Najpierw PCA czy normalizacja?
Podczas regresji lub klasyfikacji, jaki jest poprawny (lub lepszy) sposób wstępnego przetwarzania danych?
- normalizacja danych -> PCA - > szkolenia
- PCA -> znormalizuj wyjście PCA - > trening
- 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.
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).
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.
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