14

При выполнении регрессии или классификации, каков правильный (или лучший) способ предварительной обработки данных?Первичная или нормализация PCA?

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

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

ответ

23

Вы должны нормализовать данные перед выполнением 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 

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

5

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

Смежные вопросы