推薦系統的評分預測場景可看做是一個矩陣補全的游戲,矩陣補全是推薦系統的任務,矩陣分解(Matrix Factorization)是其達到目的的手段。因此,矩陣分解是為了更好的完成矩陣補全任務(欲其補全,先其分解之)。之所以可以利用矩陣分解來完成矩陣補全的操作,那是因為基於這樣的假設:假設UI矩陣是低秩的,即在大千世界中,總會存在相似的人或物,即物以類聚,人以群分,然后我們可以利用兩個小矩陣相乘來還原它。
矩陣分解方法在基於模型推薦算法中最先得到發展。后面很多的推薦算法也都是基於矩陣分解方法的。
矩陣分解的思想是:像對整數進行質因數分解一樣,將矩陣分解成一些更有代表性的特征向量,進而方便研究。矩陣分解方法有很多,在線性代數中比較常見的就是特征分解和奇異值分解兩種。在推薦系統中還有Funk-SVD,SVD++等方法。
特征分解
特征分解是對方陣而言的,我們只可以對可對角化矩陣進行特征值分解。如果一個方塊矩陣 A 相似於對角矩陣,也就是說,如果存在一個可逆矩陣 P 使得\(P^{-1}AP\) 是對角矩陣,則它就被稱為可對角化的。
N 維非零向量 v 是 N×N 的矩陣 A 的特征向量,當且僅當\(Av=\lambda v\)。
其中v為\(\lambda\)對應的特征向量,\(\lambda\)為特征值。
則矩陣A可以被分解為:
任意的 N×N 實對稱矩陣都有 N 個線性無關的特征向量。並且這些特征向量都可以正交單位化而得到一組正交且模為 1 的向量。故實對稱矩陣 A 可被分解成:
其中Q為正交矩陣,\(\hat{A}\)為實對角矩陣。
然而我們在推薦系統中常見的UI矩陣都不是方陣。所以特征分解的方法不適用。
奇異值分解 SVD
特征分解是將方陣A分解為特征向量矩陣,特征值對角矩陣和特征向量矩陣的逆(實對稱矩陣則使用轉置)的矩陣乘積。
而奇異值分解則是可以對M*N的矩陣也進行分解的方法。它將矩陣M分解為:
假設A是一個M * N的矩陣,那么得到的U是一個M * M的方陣(里面的向量是正交的,U里面的向量稱為左奇異向量),Σ是一個M * N的實數對角矩陣(對角線以外的元素都是0,對角線上的元素稱為奇異值),VT(V的轉置)是一個N * N的矩陣,里面的向量也是正交的,V里面的向量稱為右奇異向量)。
具體不展開了,利用奇異值分解,我們就可以達到使用更少的存儲空間,表示我們的UI矩陣。
但是,實際場景中,我們的UI矩陣又大都是稀疏的。奇異值分解在矩陣稠密的情況下表示效果才會好。所以我們也不能使用奇異值分解。
於是,真正推薦場景下的矩陣分解方法來了。
隱語義模型 LFM
LFM(Latent Factor Model,隱語義模型)的主要思想是將原始評分矩陣M(mn)分解成兩個矩陣P(mk)和Q(kn),同時僅考察原始評分矩陣中有評分的項分解結果是否准確,而判別標准則是均方差(MSE)。即對於矩陣M(mn),我們想辦法將其分解為P(mk)、Q(kn),此時對於原始矩陣中有評分的位置MUI來說,其在分解后矩陣中對應的值就是
這種方法就是基於隱語義模型(LFM,Latent Factor Model)的矩陣分解。其算法意義層面的解釋為通過隱含特征(latent factor)將user興趣與item特征聯系起來。
LFM的思想其實很簡單,就是人為設計一個“隱類別”的類別數,各個隱類別的意義我們不用去管,然后通過訓練user和item在每個隱類別上的“興趣”或者“比重”,進而恢復出UI矩陣的思想(后面提到的很多模型都是可以得到用戶對未交互過的物品的打分或者點擊購買概率,那也相當於恢復出了UI矩陣)。
那么使用LFM的好處是什么呢?為什么要用LFM呢?
還是回到推薦系統的場景中。我們遇到的UI矩陣都是稀疏的,即用戶基本和絕大多數的item都沒有交互過,體現在隱式反饋的數據中則是一大片的0。
那么我們比如想利用模型恢復出(i,j)位置(用戶i對物品j的打分),而這個位置正好沒有交互過,是0,那么我們是無法訓練到這個點的。使用SVD也是很難訓練出一個理想的結果的,因為矩陣太稀疏了,很難學到可以表示UI矩陣的特征值和特征向量們。
而使用了LFM之后,我們將UI矩陣抽象到了兩個矩陣P和Q上,這兩個矩陣一個代表用戶興趣矩陣,一個代表物品矩陣,兩者相乘恢復出UI矩陣。
那么只要這個用戶或者物品與其他物品或者用戶交互過,其矩陣就能得到訓練,所以不需要矩陣稠密,即可訓練。
所以我們使用LFM。
Funk-SVD
在LFM的基本思想下,考慮了評分基准的偏置,這樣矩陣分解的用戶物品向量只用學習評分和評分基准的差值;考慮了用戶和物品的偏置,比如有些用戶就是傾向於給予很低的評分,或者某部電影很爛,大家評分都很低。
使用偏置來處理特殊情況,這樣的話,用戶和物品矩陣就更容易學到泛化性能更好的表示。
目標函數:
SVD++
SVD++在SVD的基礎上引入隱式反饋,使用用戶的歷史瀏覽數據、用戶歷史評分數據、電影的歷史瀏覽數據、電影的歷史評分數據等作為新的參數。
某個用戶對某個電影進行了評分,那么說明他看過這部電影,那么這樣的行為事實上蘊含了一定的信息,因此我們可以這樣來理解問題:評分的行為從側面反映了用戶的喜好,可以將這樣的反映通過隱式參數的形式體現在模型中.
其中 I(u) 為該用戶所評價過的所有電影的集合,yj為隱藏的“評價了電影 j”反映出的個人喜好偏置,是一個和\(p_u\)維度相同的向量,而非標量。收縮因子取集合大小的根號是一個經驗公式,並沒有理論依據。
Reference
https://www.cnblogs.com/fuleying/p/4466326.html
https://blog.csdn.net/wjmishuai/article/details/71191945
https://www.cnblogs.com/Xnice/p/4522671.html