Svd
如何在協同過濾中使用 SVD?
我對如何在協同過濾中使用 SVD 感到有點困惑。假設我有一個社交圖,我從邊緣構建一個鄰接矩陣,然後採用 SVD(讓我們忘記正則化、學習率、稀疏優化等),我如何使用這個 SVD 來改進我的推薦?
假設我的社交圖對應於 instagram,我的任務是僅根據社交圖推薦服務中的用戶。我會首先建立一個鄰接矩陣 ,取 SVD,,選擇第一個特徵值,然後呢?
我大概會創建一組新的矩陣:
那麼一個人做什麼呢? 我在網上看過,大多數鏈接都集中在計算 SVD,但沒有人告訴你如何處理它。所以我該怎麼做?
但是:使用純普通 SVD,您可能無法重新創建原始矩陣,更不用說預測缺失項的值了。該領域有用的經驗法則是計算每部電影的平均評分,然後減去每個用戶/電影組合的平均值,即減去每個用戶的電影偏差。然後建議您運行 SVD,當然,您必須在某處記錄這些偏差值,以便重新創建評級或預測未知值。我讀過 Simon Funk 在 SVD 上的推薦文章——他在 Netflix 比賽中發明了一種增量 SVD 方法。
http://sifter.org/~simon/journal/20061211.html
我想在 SVD 之前貶低矩陣 A 是有道理的,因為 SVD 的近親 PCA 也以類似的方式工作。在增量計算方面,Funk 告訴我,如果你不貶低,第一個梯度方向將主導其餘的計算。我親眼看到了這個,基本上沒有貶低的東西是行不通的。