2015-09-30 10 views
9

hier lernen,Python scikit pca.explained_variance_ratio_ Abschneide

Wenn die Anzahl der Hauptkomponenten, (k) die Wahl, wir k wählen, der kleinste Wert sein, so dass beispielsweise 99% der Varianz, zurückgehalten wird.

Allerdings, in der Python Scikit lernen, bin ich nicht 100% sicher pca.explained_variance_ratio_ = 0.99 ist gleich "99% der Varianz beibehalten wird"? Könnte jemand aufklären? Vielen Dank.

  • Die Python Scikit lernen Handbuch PCA ist hier

http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA

Antwort

29

Ja, Sie fast richtig sind. Der pca.explained_variance_ratio_ Parameter gibt einen Vektor der Varianz zurück, der für jede Dimension erklärt wird. Somit gibt pca.explained_variance_ratio_[i] die Varianz, die nur durch die i + 1. Dimension erklärt wird.

Sie möchten wahrscheinlich pca.explained_variance_ratio_.cumsum() tun. Das wird einen Vektor x zurückgeben, so dass x[i] die kumulative Varianz zurückgibt, die von den ersten i + 1-Dimensionen erklärt wird.

import numpy as np 
from sklearn.decomposition import PCA 

np.random.seed(0) 
my_matrix = np.random.randn(20, 5) 

my_model = PCA(n_components=5) 
my_model.fit_transform(my_matrix) 

print my_model.explained_variance_ 
print my_model.explained_variance_ratio_ 
print my_model.explained_variance_ratio_.cumsum() 

[ 1.50756565 1.29374452 0.97042041 0.61712667 0.31529082] 
[ 0.32047581 0.27502207 0.20629036 0.13118776 0.067024 ] 
[ 0.32047581 0.59549787 0.80178824 0.932976 1.  ] 

Also in meinen zufälligen Spielzeug Daten, wenn ich k=4 abgeholt würde ich 93,3% der Varianz behalten.

+1

T Hank du so sehr! Tolle Erklärung! Manchmal ist das Python-Handbuch schlecht dokumentiert/erklärt. Ich bin total erleuchtet! – Chubaka

+0

Noch eine Frage: Wenn wir PCA (n_components = 1) ausführen, führen die Scikit-Lern- "PCA" -Befehle die "Kovarianzmatrix aus den normalisierten Daten berechnen" & "Einzelwertzerlegung (SVD) verwenden, um Eigenvektoren zu berechnen"? Ich sehe nirgends andere Methoden, um Eigenvektoren im Python scikit learn PCA-Modul zu berechnen. – Chubaka

+1

Große Antwort! das hat mir wirklich geholfen – Mikim

3

Obwohl diese Frage älter als 2 Jahre ist, möchte ich ein Update zu diesem Thema bieten. Ich wollte das selbe machen und es sieht so aus, als ob sklearn jetzt diese Funktion out of the box bietet.

Wie in den

if 0 < n_components < 1 und svd_solver == ‚voll‘ docs angegeben ist, wählen die Anzahl der Komponenten, so dass die Menge an Varianz, die größer ist als der Prozentsatz werden muss erklärt von n_components angegeben

So benötigt der Code ist jetzt

my_model = PCA(n_components=0.99, svd_solver='full') 
my_model.fit_transform(my_matrix) 
Verwandte Themen