推薦系統之改進版SVD


之前的blog(http://blog.csdn.net/ice110956/article/details/21955461 )簡單闡述了基於SVD矩陣分解的隱因子模型。

隱因子模型通過假設一個隱因子空間,通過矩陣分解,得到隱因子空間上的用戶-隱因子屬性向量,以及物品-隱因子屬性向量。再把兩個分解後的矩陣相乘,得到滿的用戶-物品矩陣。以此來推薦。

 隱因子模型運用在推薦系統中,相比與簡單的協同過濾,其同時考慮了用戶聚類,物品聚類,因而效果會好於簡單的user-CF或者item-CF。

 上篇blog中,簡單介紹了基於最優化模型的矩陣分解,以此來求的隱因子空間的方法。三個簡單的方法:batch SVD,incomplete incremental SVD和complete incremental SVD。

這裏繼續闡述另兩個改進的SVD-bias SVD 和constraint SVD。

 

bias-SVD

一般的SVD的最優化目標函數如下:


其中第一項爲最小二乘項,後兩項爲正則化約束,防止過擬合。

 第一項中的P,可以簡單定義爲點乘,如下:

P=Ui’*Mj;

 

我們知道,每個用戶都有不同的打分習慣。比如,A,B兩個用戶對於電影C都是同樣的喜好層度,爲3。不過A是一個嚴格的打分者,他一般傾向於保守打分,於是A給電影C的打分爲3-0.5=2.5;而B是一個寬鬆的打分者,他的分數便爲3+0.5=4;

 如果我們不考慮上面的因素,就會簡單地判斷B更喜歡電影C。

 

於是,我們希望引入一個無偏的喜好度U和M,以及額外的bias偏差變量alfa,beta。用U,M來描述無偏喜好,alfa,beta描述打分寬鬆度。這樣,我們的P函數就可以寫成:

如果在加入一個基本分a,公式最終可以寫成:

 


目標函數:

 

上述爲四個變量的凸優化過程,其中關於Ui,Mj的負梯度同completeincremental SVD,而關於alfa,beta的求解如下:


負梯度:

 

 

於是我們遍歷整個V矩陣,對於已知元素,更新上面四個值;迭代計算,直至收斂。


Constraint SVD

SVD是矩陣乘法的方式,得到用戶-物品可能喜好度。從數學形式上我們可以看出,隱因子模型同時考慮了用戶聚類,物品聚類,用類似聚類的信息填充了這些Miss value。如果某個用戶的U-M行過於稀疏,而某個物品M-U不稀疏,(這種情況是常見的)。那麼Miss value的填充很大程度上取決於這個物品的屬性,最後得到近似於這個物品的平均值。

也就是,在用戶,物品信息不平衡的情況下,我們容易減少用戶對於喜好的影響程度。如下的contraint SVD一定程度上解決了這個問題。

我們重新定義U矩陣,如下:


其中Y表示用戶的無偏喜好,I爲已知元素的索引,W爲一個大小=物品矩陣M-factor的矩陣。

我們可以看出,對於不同的用戶,只要他們購買相同的物品,那麼後一項就會完全一樣。以此來進一步刻畫用戶特徵。

對於稀疏的用戶行爲,後一項相當於預先填充了用戶矩陣。

 

目標函數:

 

其中


負梯度方向:

 

 

算法優化:

上面的負梯度中,我們可以看出,每次計算時,對於同一用戶來說,這一行的目標值,都具有相同的一項,於是我們可以考慮以行爲單位,記錄中間重複計算的項,以此簡化計算。

 

下一篇blog繼續這兩個SVD的組合體- compound SVD,以及其具體的編程實現

發佈了89 篇原創文章 · 獲贊 51 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章