2016-11-24 2 views
6

In meinem Verständnis dachte ich, PCA kann nur für kontinuierliche Funktionen durchgeführt werden. Aber bei dem Versuch, den Unterschied zwischen onehot Codierung und Label-Codierung zu verstehen, kam durch einen Eintrag in dem folgenden Link:PCA Für kategoriale Funktionen?

When to use One Hot Encoding vs LabelEncoder vs DictVectorizor?

Es besagt, dass eine heiße Codierung gefolgt von PCA ist eine sehr gute Methode, die im Grunde bedeutet, PCA wird für kategoriale Merkmale angewendet. Daher verwirrt, bitte schlagen Sie mich auf dem gleichen.

Antwort

9

Ich stimme nicht mit den anderen überein.

Während können Sie PCA auf Binärdaten (z. B. One-Hot-codierte Daten) verwenden, die nicht bedeutet, dass es eine gute Sache ist, oder es wird sehr gut funktionieren.

PCA ist für kontinuierliche Variablen desinged. Es versucht die Varianz zu minimieren (= quadrierte Abweichungen). Das Konzept der quadrierten Abweichungen bricht zusammen, wenn Sie binäre Variablen haben.

Also ja, Sie können PCA verwenden. Und ja, du bekommst eine Ausgabe. Es ist sogar eine Ausgabe im Least-Square-Format - es ist nicht so, als ob PCA bei solchen Daten segfault wäre. Es funktioniert, aber es ist nur viel weniger aussagekräftige als Sie es wollen; und angeblich weniger bedeutsam als z.B. häufiges Musterbergbau.

0

PCA ist eine dimensionality reduction method, die jede Reihe von Funktionen angewendet werden kann. Hier ist ein Beispiel OneHotEncoded (das heißt kategorische) Daten:

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

Dank für die ausführliche Erklärung. Können Sie mir bitte vorschlagen, wie Sie die Ergebnisse eines Hot-Encoders in Ihrem Code darstellen können. – vikky

+0

Wenn ich mich richtig erinnere, projiziert der PCA-Algorithmus die Merkmale auf einen anderen Raum, indem er nach den Eigenvektoren und Eigenwerten auflöst. Dann schaut es sich die oberen N (3 in diesem Fall) größten Eigenwerte an und nimmt diese Eigenvektorkomponenten. Die Idee besteht darin, die nützlichsten Daten in weniger Features zu kodieren. – AlexG

+0

danke youuuuuuu – vikky

2

Grundsätzlich PCA findet und beseitigt weniger informativ (duplicate) Informationen über die Funktionen und die Dimension des Merkmalsraumes reduzieren. Mit anderen Worten, stellen Sie sich einen N-dimensionalen Hyperraum vor, findet PCA solche M (M < N) Merkmale, die die Daten am stärksten variieren. Auf diese Weise können Daten als M-dimensionale Merkmalsvektoren dargestellt werden. Mathematisch ist es eine Art von Eigenwerten & Eigenvektoren Berechnung eines Merkmalsraumes.

So ist es nicht wichtig, ob die Merkmale kontinuierlich sind oder nicht.

PCA wird häufig in vielen Anwendungen verwendet. Meistens zur Beseitigung von verrauschten, weniger informativen Daten, die von einem Sensor oder einer Hardware vor der Klassifizierung/Erkennung stammen.

1

MCA ist eine bekannte Technik zur kategorischen Datenreduzierung. In R gibt es eine Menge Paket, um MCA zu verwenden und sogar mit PCA in gemischten Kontexten zu mischen. In Python existiert auch eine a mca-Bibliothek. MCA ähnliche Mathematik anwenden, die PCA, in der Tat die Französisch Statistiker zu sagen pflegte, „Datenanalyse korrekt Matrix diagonalisieren zu finden“

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

Verwandte Themen