2012-08-04 37 views
4

我正在使用scikit-learning做一些降維任務。 我的培訓/測試數據採用libsvm格式。它是一個大型的50萬列的稀疏矩陣。scikit-learning如何對libsvm格式的稀疏數據執行PCA?

我使用load_svmlight_file函數加載數據,並且通過使用SparsePCA,scikit-learning會拋出輸入數據錯誤的異常。

如何解決?

+1

請至少發佈異常消息。 – 2012-08-04 18:51:46

回答

13

稀疏PCA是一種用於在稠密數據上查找稀疏分解(組件具有稀疏約束)的算法。

如果您想對稀疏數據執行vanilla PCA,您應該使用sklearn.decomposition.RandomizedPCA實現可擴展的近似方法,該方法適用於稀疏和密集數據。

IIRC sklearn.decomposition.PCA僅適用於當前密集數據。通過將稀疏數據矩陣上的SVD計算委託給Arpack,將來可以添加對稀疏數據的支持。

編輯:如在RandomizedPCA稀疏輸入已過時的評論中指出:相反,你應該使用sklearn.decomposition.TruncatedSVD,做正是RandomizedPCA用於稀疏數據做的,但不應該擺在首位被稱爲PCA。

澄清:PCA在數學上定義爲居中數據(去掉每個特徵的平均值),然後在中心數據上應用截斷SVD。由於數據居中會破壞稀疏性並強制密集表示,而這往往不再適合內存,所以直接在稀疏數據(不居中)上進行截斷SVD是很常見的。這與PCA類似,但並不完全相同。這是在scikit-learn中以sklearn.decomposition.TruncatedSVD實現的。

+1

謝謝!有用!但是PCA的結果是糟糕的:( – 2012-08-22 18:16:47

+1

)你的意思是不正確的?或者對你的任務沒用?如果你使用RandomizedPCA,嘗試使用迭代次數iterated_power來查看你是否可以改進結果。默認情況下,您可以嘗試介於0到10之間) – ogrisel 2012-08-22 21:00:44

+1

有關更多詳細信息,請參閱參考文檔http://scikit-learn.org/dev/modules/generated/sklearn.decomposition.RandomizedPCA.html和鏈接的引用 – ogrisel 2012-08-22 21:01:10