Сначала PCA или нормализация?

Каков правильный (или лучший) способ предварительной обработки данных при выполнении регрессии или классификации?

  1. Нормализация данных -> PCA -> обучение
  2. PCA -> нормализовать вывод PCA -> обучение
  3. Нормализовать данные -> PCA -> нормализовать вывод PCA -> обучение

Что из вышеперечисленного более правильно или это «стандартизированный» способ предварительной обработки данных? Под «нормализацией» я подразумеваю стандартизацию, линейное масштабирование или некоторые другие методы.


person AlanS    schedule 12.04.2012    source источник


Ответы (5)


Вы должны нормализовать данные перед выполнением PCA. Например, рассмотрим следующую ситуацию. Я создаю набор данных X с известной матрицей корреляции C:

>> C = [1 0.5; 0.5 1];
>> A = chol(rho);
>> X = randn(100,2) * A;

Если я сейчас выполню PCA, я правильно обнаружу, что главные компоненты (строки вектора весов) ориентированы под углом к ​​осям координат:

>> wts=pca(X)
wts =
    0.6659    0.7461
   -0.7461    0.6659

Если я теперь масштабирую первую функцию набора данных на 100, интуитивно мы думаем, что основные компоненты не должны меняться:

>> Y = X;
>> Y(:,1) = 100 * Y(:,1);

Однако теперь мы обнаруживаем, что главные компоненты выровнены с осями координат:

>> wts=pca(Y)
wts =
    1.0000    0.0056
   -0.0056    1.0000

Чтобы решить эту проблему, есть два варианта. Во-первых, я мог масштабировать данные:

>> Ynorm = bsxfun(@rdivide,Y,std(Y))

(Странная нотация bsxfun используется для выполнения векторно-матричной арифметики в Matlab - все, что я делаю, это вычитаю среднее значение и делю на стандартное отклонение каждой функции).

Теперь мы получаем разумные результаты от PCA:

>> wts = pca(Ynorm)
wts =
   -0.7125   -0.7016
    0.7016   -0.7125

Они немного отличаются от PCA исходных данных, потому что теперь мы гарантировали, что наши функции имеют единичное стандартное отклонение, чего изначально не было.

Другой вариант — выполнить PCA, используя матрицу корреляции данных вместо внешнего продукта:

>> wts = pca(Y,'corr')
wts =
    0.7071    0.7071
   -0.7071    0.7071

Фактически это полностью эквивалентно стандартизации данных путем вычитания среднего значения и последующего деления на стандартное отклонение. Это просто удобнее. На мой взгляд, вы должны всегда делать это, если только у вас нет веских причин не делать этого (например, если вы хотите выявить различия в вариациях каждой функции).

person Chris Taylor    schedule 12.04.2012
comment
Вы должны нормализовать данные перед выполнением PCA. Это нормализовать или, скорее, стандартизировать или что-то из двух? Если не стандартизировать, то почему? Спасибо. - person DPM; 23.05.2019

Сначала необходимо нормализовать данные всегда. В противном случае PCA или другие методы, используемые для уменьшения размеров, дадут другие результаты.

person Atilla Ozgur    schedule 12.04.2012

Сначала нормализуйте данные. На самом деле некоторые пакеты R, полезные для выполнения анализа PCA, автоматически нормализуют данные перед выполнением PCA. Если переменные имеют разные единицы измерения или описывают разные характеристики, нормализация обязательна.

person Yazmín Rendón    schedule 05.04.2020

ответ - третий вариант, так как после выполнения pca мы должны нормализовать вывод pca, поскольку все данные будут иметь совершенно другой стандарт. мы должны нормализовать набор данных до и после PCA, поскольку он будет более точным.

person dcrey7    schedule 28.02.2021

У меня есть еще одна причина в целевой функции PCA. Можете ли вы увидеть подробности по этой ссылке введите здесь описание ссылки Предположим, что матрица X была нормализована до PCA.

person Tan Phan    schedule 23.07.2021
comment
Пожалуйста, предоставьте подробное объяснение вашего ответа, чтобы следующий пользователь лучше понял ваш ответ. Кроме того, обеспечьте базовое покрытие содержимого вашей ссылки на случай, если она перестанет работать в будущем. - person Elydasian; 23.07.2021