Najpierw PCA czy normalizacja?

Podczas regresji lub klasyfikacji, jaki jest poprawny (lub lepszy) sposób wstępnego przetwarzania danych?

  1. normalizacja danych -> PCA - > szkolenia
  2. PCA -> znormalizuj wyjście PCA - > trening
  3. znormalizuj dane -> PCA -> znormalizuj wyjście PCA - > trening

Który z powyższych jest bardziej poprawny, czy jest "standaryzowany" sposób wstępnego przetwarzania danych? Przez "normalizację" mam na myśli standaryzację, skalowanie liniowe lub inne techniki.

Author: Smi, 2012-04-12

2 answers

Należy znormalizować dane przed wykonaniem PCA. Na przykład rozważ następującą sytuację. Tworzymy zbiór danych X ze znaną macierzą korelacji C:

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

Jeśli teraz wykonam PCA, poprawnie stwierdzam, że główne składniki (rzędy wektora wagi) są zorientowane pod kątem do osi współrzędnych:

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

Jeśli teraz skaluję pierwszą cechę zbioru danych o 100, intuicyjnie uważamy, że główne składniki nie powinny zmiana:

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

Okazuje się jednak, że główne składniki są wyrównane z osiami współrzędnych:

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

Aby rozwiązać ten problem, istnieją dwie opcje. Po pierwsze, mogłem przeskalować dane:

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

(dziwna notacja bsxfun jest używana do arytmetyki wektorowo-macierzowej w Matlab - jedyne co robię to odejmowanie średniej i dzielenie przez odchylenie standardowe każdej funkcji).

Otrzymujemy teraz sensowne wyniki z PCA:

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

Są nieco różni się od PCA na oryginalnych danych, ponieważ teraz gwarantujemy, że nasze funkcje mają odchylenie standardowe jednostki, co nie miało miejsca pierwotnie.

W zależności od tego, która z tych wartości jest dokładna, można zastosować PCA, a nie iloczyn zewnętrzny.]}
>> wts = pca(Y,'corr')
wts =
    0.7071    0.7071
   -0.7071    0.7071

W rzeczywistości jest to całkowicie równoważne standaryzacji danych przez odjęcie średniej, a następnie dzielenie przez odchylenie standardowe. Tak jest wygodniej. Moim zdaniem powinieneś zawsze zrób to, chyba że masz dobry powód, aby tego nie robić (np. jeśli chcesz, Aby wykryć różnice w wariancji każdej funkcji).

 25
Author: Chris Taylor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-19 05:27:14

Najpierw musisz znormalizować dane Zawsze . W przeciwnym razie PCA lub inne techniki stosowane w celu zmniejszenia wymiarów dadzą różne wyniki.

 6
Author: Atilla Ozgur,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-25 19:45:23