我正在使用scikit-learning做一些降維任務。 我的培訓/測試數據採用libsvm格式。它是一個大型的50萬列的稀疏矩陣。scikit-learning如何對libsvm格式的稀疏數據執行PCA?
我使用load_svmlight_file函數加載數據,並且通過使用SparsePCA,scikit-learning會拋出輸入數據錯誤的異常。
如何解決?
我正在使用scikit-learning做一些降維任務。 我的培訓/測試數據採用libsvm格式。它是一個大型的50萬列的稀疏矩陣。scikit-learning如何對libsvm格式的稀疏數據執行PCA?
我使用load_svmlight_file函數加載數據,並且通過使用SparsePCA,scikit-learning會拋出輸入數據錯誤的異常。
如何解決?
稀疏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
實現的。
謝謝!有用!但是PCA的結果是糟糕的:( – 2012-08-22 18:16:47
)你的意思是不正確的?或者對你的任務沒用?如果你使用RandomizedPCA,嘗試使用迭代次數iterated_power來查看你是否可以改進結果。默認情況下,您可以嘗試介於0到10之間) – ogrisel 2012-08-22 21:00:44
有關更多詳細信息,請參閱參考文檔http://scikit-learn.org/dev/modules/generated/sklearn.decomposition.RandomizedPCA.html和鏈接的引用 – ogrisel 2012-08-22 21:01:10
請至少發佈異常消息。 – 2012-08-04 18:51:46