2017-04-11 32 views
0

我正在開發搜索算法,並且我正在努力理解如何實際使用奇異值分解的結果(u,w,vt = svd( a))減少術語文件矩陣。如何將搜索查詢與SVD結果'w'矩陣進行比較

例如,假設我有一個M×N的矩陣如下,其中每列表示(每個文檔中許多術語)的文件向量

a = [[ 0, 0, 1 ], 
    [ 0, 1, 2 ], 
    [ 1, 1, 1 ], 
    [ 0, 2, 3 ]] 

現在,我可以在運行一個TF-IDF功能這個矩陣爲每個術語/文檔值生成一個分數,但爲了清晰起見,我將忽略它。

SVD結果

一旦在此矩陣運行SVD,我結束了關於「W」

import svd 

u,w,vt = svd.svd(a) 
print w 

// [4.545183973611469, 1.0343228430392626, 0.5210363733873331] 

我明白或多或少什麼這代表(得益於以下對角矢量很多的閱讀,特別是這篇文章https://simonpaarlberg.com/post/latent-semantic-analyses/),但是我不知道如何將這個產生的'逼近'矩陣返回到原始文檔?這些權重代表什麼?如何在我的代碼中使用此結果來查找與術語查詢相關的文檔?

基本上...我如何使用它?

回答

0

的秩- [R SVD減少了秩- [R中號 X Ñ矩陣- [R正交秩1 中號 X Ñ矩陣(u_n * s_n * v_n')。如果您使用這些奇異值和矢量重建原始矩陣,您將獲得最佳排名r近似A

而不是存儲完整的矩陣一個的,你只是存儲u_nS_Nv_n。 (中號 X Ñ,但Ú中號 X - [R小號可以被存儲在一個維度爲- [R元件,並且V'是- [R x N)。

爲了接近 * X,只需計算(û *(小號 *(V」 * X)))[中號 X - [R X ř X - [R X - [R X ñ X ñ X1]。您可以通過分別存儲(U * S)而不是US來進一步提高速度。

那麼奇異值代表什麼?在某種程度上,它們代表每個1級矩陣的能量。奇異值越高,其相關的一級矩陣對原始矩陣的貢獻越大,如果它被截斷則不包括在內的情況下,重建將會越糟糕。

請注意,此過程是密切相關的Principal Component Analysis,這是在協方差矩陣進行,在機器學習通常用於減少測量Ñ維變量的維數。

另外,應該指出的是,SVD對於信號處理中的許多其他應用是有用的。

更多信息請登錄Wikipedia article

+0

謝謝@rlbond,我認爲這是開始有意義的。我使用的是gensim,它真的爲我做了所有的工作,但我真的很想了解底層的數學。我想我只是需要更多的時間來研究這個話題,才能讓我的頭腦環繞它。 –

相關問題