2017-02-17 22 views
-1

雖然我在用scikit-learn進行PCA時,發現它使用svd來獲得eigenvalueeigenvector,然後使用svd_flip來獲得真正的特徵向量。爲什麼在做PCA時,scikit-learn使用svd來獲得特徵值,而傳統的方法是使用eig?

這裏是我的代碼eigenvalueeigenvector

pca = PCA(data.shape[1]) 
newData = pca.fit_transform(data) 
eigenvalue, eigenvector = np.linalg.eig(np.cov(data.transpose())) 
explained_variance_ratio_sum_ = np.cumsum(pca.explained_variance_ratio_) 

index = eigenvalue.argsort()[::-1] 
eigenvalue = eigenvalue[index] 
eigenvector = eigenvector[:, index] 

爲什麼sklearn使用svd?有沒有優點或缺點?而且我對svd_flip函數不太熟悉,你會告訴我它的用法嗎?

非常感謝。

+0

這可能不是討論算法的正確位置。請查看https://stats.stackexchange.com/questions/79043/why-pca-of-data-by-means-of-svd-of-the-data –

回答

0

scikit-learn使用的基於SVD的方法不必實現內存中的經驗協方差矩陣,因此具有更高的內存效率。

從計算時間的角度來看,它應該是非常相似,雖然我沒有檢查。

相關問題