Machine-Learning
當您將 SVD 應用於協同過濾問題時會發生什麼?兩者有什麼區別?
在協同過濾中,我們有未填寫的值。假設用戶沒有看電影,那麼我們必須在其中輸入“na”。
如果我要對該矩陣進行 SVD,那麼我必須在其中輸入一些數字——比如 0。現在如果我分解矩陣,我有一種方法可以找到相似的用戶(通過找出哪些用戶在降維空間)。但是預測的偏好本身 - 用戶對某個項目的偏好將為零。(因為那是我們在未知列中輸入的內容)。
所以我陷入了協同過濾與 SVD 的問題。它們似乎幾乎相同,但並不完全相同。
它們之間有什麼區別,當我將 SVD 應用於協同過濾問題時會發生什麼?我做到了,就尋找附近的用戶而言,結果似乎是可以接受的,這很好,但是如何呢?
好的,當你說 SVD 時,大概你在談論截斷的 SVD(你只保留最大奇異值)。有兩種不同的方法可以查看矩陣的截斷 SVD。一是標准定義:
首先你做SVD:, 在哪裡和是旋轉矩陣,並且沿對角線具有奇異值。然後你選擇頂部奇異值,將其餘部分歸零,並刪除不相關的行和列以生成-rank近似原始:
這一切都很好而且很花哨(並且很容易在 R 或 matlab 中實現),但是在談論缺少值的矩陣時它沒有意義。但是,有一個有趣的屬性-截斷 SVD–這是最好的-rank近似於原始!那是:
這個屬性似乎很容易推廣到缺失值的情況。基本上你正在尋找一個-秩矩陣,最小化原始矩陣已知條目的元素均方誤差。也就是說,當您訓練系統時,您會忽略所有缺失值。(有關如何實際尋找-rank 近似值,這裡有一些 地方可以看)。
然後,一旦你想出了一個合適的“關閉”-rank 近似於原始值,您可以使用它來填充缺失值。也就是說,如果不見了,然後你填寫. 多田!你現在完成了。