2014-02-11 189 views
2

我試圖運行大型(120k x 600k)和稀疏(非空值的0,1%)矩陣M的全SVD。由於內存限制,我之前的所有嘗試都失敗了(使用SVDLIBC,Octave和R),我幾乎(已經)放棄了探索解決我的問題的其他方法(LSA)。然而,此刻,我只對對角矩陣S的特徵值感興趣,而不是在左/右奇異向量(矩陣U和V)中感興趣。大型稀疏矩陣的全SVD(只需要特徵值)

有沒有一種方法來計算這些奇異值而不在存儲器中存儲密集矩陣M和/或奇異向量矩陣U和V?

任何幫助將不勝感激。

[編輯]我的服務器配置:3,5GHz/3,9GHz(6個核/ 12線程)的RAM

+1

您可以檢查新的'rARPACK'包或'irlba'哪個適用於bigmemory :: big.matrix對象或稀疏矩陣。 – dickoa

+0

我已經檢查過這些軟件包,但它似乎只適用於需要幾個奇異值時... – Pierre

回答

0

128GB尋找的,該含義維基值(從一個SVD decomposition矩陣S的元素)我們得到:

M(上Σ的對角線項中找到) 的非零奇異值都爲M * M的非零特徵值的平方根和MM *

所以你可以找當然,矩陣A * A'(120k x 120k)的特徵值沒有明確地建立矩陣。順便說一句,我不認爲你對這樣一個尺寸的矩陣的所有特徵值(或奇異值)感興趣。我不認爲任何算法會給出足夠的準確結果。

+0

謝謝。問題是我正試圖應用'特徵值一標準'來找到LSA的最佳維度。這種方法需要所有的特徵值來計算它們的均值。另外,我寧願不自己實施所有的矩陣運算。 – Pierre

+1

如果您需要(方形)矩陣的特徵值的均值,這很容易。它與矩陣的對角線元素的均值相同(在基礎變化下的ivariant)請看這裏http://en.wikipedia.org/wiki/Trace_(linear_algebra) – sebas

+0

感謝您指出這一點。它有幫助。然而,看起來,特徵值一標準不適用於處理大矩陣(太多維度)。所以我需要嘗試一些不同的東西。我正在考慮運行'Scree測試',但在這裏我需要儘可能多的特徵值... – Pierre

1

您對Fortran的使用感覺如何?我認爲你應該可以使用預編譯包here和/或here來完成計算。此外,如果您打算使用C++並使用隨機和重新正交矩陣進行分解,則可以在名爲redsvd的Google代碼項目中嘗試代碼。 (我無法發佈鏈接,因爲我沒有三個鏈接的必要聲望,但是您可以搜索redsvd並隨時查找。)

+0

thanx爲您提供幫助。我沒有使用Fortran的經驗,但redsvd似乎值得一試,因爲它非常簡單。我會回來的。 – Pierre