大師,的Python scikit學習pca.explained_variance_ratio_截止
當選擇主成分(k)的數量,我們選擇k,使得例如,方差爲99%,被保持爲最小的值。
但是,在Python Scikit學習中,我不是100%確定pca.explained_variance_ratio_ = 0.99等於「保留99%的方差」?任何人都可以啓發?謝謝。
- Python的Scikit學習PCA手冊是在這裏
大師,的Python scikit學習pca.explained_variance_ratio_截止
當選擇主成分(k)的數量,我們選擇k,使得例如,方差爲99%,被保持爲最小的值。
但是,在Python Scikit學習中,我不是100%確定pca.explained_variance_ratio_ = 0.99等於「保留99%的方差」?任何人都可以啓發?謝謝。
是的,你是接近直角的。 pca.explained_variance_ratio_
參數返回每個維度解釋的方差向量。因此pca.explained_variance_ratio_[i]
給出的方差完全由i + 1維解釋。你可能想要做pca.explained_variance_ratio_.cumsum()
。這將返回一個向量x
,使得x[i]
返回第一個i + 1維解釋的累積方差。
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. ]
所以在我的隨機玩具的數據,如果我拿起k=4
我將保留方差的93.3%。
雖然這個問題超過2年,我想提供一個更新。 我想要做同樣的事情,看起來sklearn現在提供了這個功能。
如docs
如果0 < n_components指出< 1和svd_solver ==「充分」,選擇部件的數量,使得方差的需要被解釋量比較大百分比通過n_components
指定所以所需的代碼現在是
my_model = PCA(n_components=0.99, svd_solver='full')
my_model.fit_transform(my_matrix)
Ť非常感謝你!很好的解釋!有時Python手冊的記錄不完整/解釋不清。我完全開悟了! – Chubaka
還有一個問題:當我們做PCA(n_components = 1)時,scikit學習「PCA」命令執行「從歸一化數據計算協方差矩陣」和「使用單值分解(SVD)來計算特徵向量」?在Python scikit學習PCA模塊中,我沒有看到在哪裏選擇其他方法來計算特徵向量。 – Chubaka
很好的回答!這真的幫了我 – Mikim