R
如何執行 SVD 來估算缺失值,一個具體的例子
在應用 SVD 之前,我已經閱讀了有關如何處理缺失值的精彩評論,但我想通過一個簡單的示例了解它是如何工作的:
Movie1 Movie2 Movie3 User1 5 4 User2 2 5 5 User3 3 4 User4 1 5 User5 5 1 5
鑑於上面的矩陣,如果我刪除 NA 值,我最終將只有 User2 和 User5。這意味著我的U將是 2 × k。但如果我預測缺失值,U應該是 5 × k,我可以將其與奇異值和V相乘。
你們中的任何人都會通過首先刪除具有缺失值的用戶然後應用 SVD 來填充上面矩陣中的缺失值嗎?請對您應用的程序提供一個非常簡單的解釋,並使您的答案實用(即數字乘以另一個數字給出答案)而不是使用過多的數學符號。
我已閱讀以下鏈接:
stats.stackexchange.com/q/33142
SVD 僅針對完整矩陣定義。因此,如果您堅持使用普通 SVD,您需要在之前填寫這些缺失值(SVD 本身不是一種插補算法)。您引入的錯誤有望被您的矩陣分解方法消除(一般假設:數據是由低秩模型生成的)。
像你想做的那樣刪除完整的行是很糟糕的。即使將缺失值設置為零也會更好。
有許多插補策略,但在這種情況下,我會用列平均值(或者可能是行平均值)來插補。這基本上是您在第二個鏈接中推薦的策略。
Movie1 Movie2 Movie3 User1 5 4 User2 2 5 5 User3 3 4 User4 1 5 User5 5 1 5
變為(列均值;電影的平均得分)
Movie1 Movie2 Movie3 User1 5 3 4 User2 2 5 5 User3 3 3 4 User4 1 3 5 User5 5 1 5
還有一點:你應該預處理數據。至少從所有值中減去平均值!
看看這個介紹。它提到了 impute+SVD 方法,還討論了更直接的缺失值建模。但在這種情況下,使用了其他算法。