Svd
如何計算巨大稀疏矩陣的 SVD?
計算數據極其稀疏的非常大的正矩陣(65M x 3.4M)的奇異值分解(SVD)的最佳方法是什麼?
少於 0.1% 的矩陣是非零的。我需要一種方法:
- 將適合記憶(我知道存在在線方法)
- 將在合理的時間內計算:3,4 天
- 將足夠準確,但準確性不是我主要關心的問題,我希望能夠控制我投入多少資源。
擁有一個實現它的 Haskell、Python、C# 等庫會很棒。我沒有使用 mathlab 或 R,但如有必要,我可以使用 R。
如果它適合內存,請使用Matrix 包在 R 中構造一個稀疏矩陣,並嘗試irlba用於 SVD。您可以指定結果中需要多少個奇異向量,這是限制計算的另一種方法。
這是一個相當大的矩陣,但過去我用這種方法取得了非常好的結果。
irlba
是相當先進的。它使用隱式重啟的 Lanczos 雙對角化算法。它可以在幾毫秒內瀏覽 netflix 獎品數據集(480,189 行 x 17,770 列,100,480,507 個非零條目)。你的數據集比 Netflix 數據集大約 200,000 倍,所以它需要的時間要長得多。期望它可以在幾天內完成計算可能是合理的。