2016-11-24 14 views
6

W moim rozumieniu pomyślałem, że PCA może być wykonywane tylko dla funkcji ciągłych. Ale starając się zrozumieć różnicę pomiędzy kodowaniem onehot i kodowania etykiet przedziera stanowisko w następujący link:PCA Dla funkcji jakościowych?

When to use One Hot Encoding vs LabelEncoder vs DictVectorizor?

Stwierdza, że ​​jeden gorący kodowania następnie PCA jest to bardzo dobra metoda, która w zasadzie oznacza PCA jest stosowany dla cech kategorycznych. Stąd pomieszany, proszę zasugeruj mi na tym samym.

Odpowiedz

9

Nie zgadzam się z innymi.

Podczas gdy można użyć PCA na danych binarnych (np. Dane zakodowane jeden-hot), co nie oznacza, że ​​jest to dobre, lub będzie działać bardzo dobrze.

Parametry PCA są zmienne na ciągłe. Próbuje zminimalizować wariancję (= odchylenia kwadratów). Pojęcie odchyleń do kwadratu rozkłada się, gdy masz zmienne binarne.

Tak, możesz użyć PCA. I tak, otrzymujesz wynik. Jest to nawet najmniejsze kwadratowe wyjście - nie jest tak, że PCA miałoby powodować uszkodzenie takich danych. Działa, ale jest znacznie mniej znaczący, niż znaczący niż chcesz; i rzekomo mniej znaczące niż np. częste modelowanie.

0

PCA to dimensionality reduction method, który można zastosować dowolny zestaw funkcji. Oto przykład z użyciem OneHotEncoded (tj kategoryczne) dane:

from sklearn.preprocessing import OneHotEncoder 
enc = OneHotEncoder() 
X = enc.fit_transform([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]]).toarray() 

print(X) 

> array([[ 1., 0., 1., 0., 0., 0., 0., 0., 1.], 
     [ 0., 1., 0., 1., 0., 1., 0., 0., 0.], 
     [ 1., 0., 0., 0., 1., 0., 1., 0., 0.], 
     [ 0., 1., 1., 0., 0., 0., 0., 1., 0.]]) 


from sklearn.decomposition import PCA 
pca = PCA(n_components=3) 
X_pca = pca.fit_transform(X) 

print(X_pca) 

> array([[-0.70710678, 0.79056942, 0.70710678], 
     [ 1.14412281, -0.79056942, 0.43701602], 
     [-1.14412281, -0.79056942, -0.43701602], 
     [ 0.70710678, 0.79056942, -0.70710678]]) 
+0

dzięki za szczegółowe wyjaśnienia. Czy mógłbyś zaproponować mi, jak zawczasu przygotować wyniki jednego z gorących koderów w twoim kodzie? – vikky

+0

Jeśli dobrze pamiętam, algorytm PCA wyświetla obiekty na innej przestrzeni, rozwiązując wektory własne i wartości własne. Następnie analizuje najwyższe wartości własne N (w tym przypadku 3) i pobiera te elementy wektory własne. Chodzi o to, aby kodować najbardziej przydatne dane w mniejszej liczbie funkcji. – AlexG

+0

dziękuję youuuuuuu – vikky

2

Zasadniczo PCA wyszukuje i eliminuje mniej informacyjny (duplikat) informacji o zestawie funkcji i zmniejszenie wymiaru przestrzeni cech. Innymi słowy, wyobraź sobie N-wymiarową hiperprzestrzeń, PCA znajduje takie M (M < N) cechy, że dane różnią się najbardziej. W ten sposób dane mogą być reprezentowane jako M-wymiarowe wektory cech. Matematycznie, jest to pewnego rodzaju wartości własne & obliczenia wektorów własnych przestrzeni cech.

Nie ma zatem znaczenia, czy funkcje są ciągłe, czy nie.

PCA jest szeroko stosowana w wielu aplikacjach. Głównie do eliminowania hałaśliwych, mniej informacyjnych danych pochodzących z jakiegoś sensora lub sprzętu przed klasyfikacją/rozpoznawaniem.

1

MCA jest znaną techniką redukcji wymiaru danych kategorialnych. W R istnieje wiele pakietów do użycia MCA, a nawet mix z PCA w mieszanym kontekście. W pythonie istnieje również biblioteka mca. MCA stosować podobne policzyć, że PCA rzeczywiście francuski statystyk mawiał, „analiza danych jest znalezienie poprawnej matrycy do diagonalize”

http://gastonsanchez.com/visually-enforced/how-to/2012/10/13/MCA-in-R/

Powiązane problemy