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.
T Hank du so sehr! Tolle Erklärung! Manchmal ist das Python-Handbuch schlecht dokumentiert/erklärt. Ich bin total erleuchtet! – Chubaka
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
Große Antwort! das hat mir wirklich geholfen – Mikim