算法回顧:SVD在協(xié)同過濾推薦系統(tǒng)中的應用

協(xié)同過濾一般分為兩大類:一類為基于領域(記憶)的方法,第二類為基于模型的方法,即隱語義模型口糕,矩陣分解模型是隱語義模型最為成功的一種實現搞挣。隱語義模型最早在文本挖掘領域被提出带迟,用于尋找文本的隱含語義,相關的模型常見的有潛在語義分析(Latent Semantic Analysis,LSA)囱桨、LDA(Latent Dirichlet Allocation)的主題模型(Topic Model)仓犬、矩陣分解(Matrix Factorization)等等。本文主要介紹的是矩陣分解中SVD相關的方法舍肠。

大綱

  1. 傳統(tǒng)的SVD
  2. FunkSVD
  3. FunkSVD在協(xié)同過濾中的應用
  4. 基于SVD的其他改進方法

1. SVD簡介

在推薦系統(tǒng)中搀继,我們根據用戶行為通常可以得到user-item的評分矩陣貌夕。由于每個用戶可能只在少部分商品上有歷史行為律歼,因此評分矩陣往往是稀疏的,如下:

user\item item1 item2 item3 item4 item5 item6 item7
user1 3 5 1
user2 2 1 4
user3 4 3
user4 1 4 2

在推薦中啡专,我們希望可以預測出用戶對未評分商品的評分险毁,從而將評分高的商品推薦給用戶。矩陣分解就是解決該問題的其中一種方法。如果對SVD原理不了解的可以看看這篇博客強大的矩陣奇異值分解(SVD)及其應用畔况,本文不詳細介紹鲸鹦。

如果我們對user-item評分矩陣進行SVD分解,就可以得到:
M_{m*n} = U_{m_k}^T\Sigma_{k*k}V_{k*n}
其中k是矩陣M中較大的部分奇異值的個數跷跪,一般會遠遠的小于用戶數和物品樹馋嗜。如果我們要預測第i個用戶對第j個物品的評分M_{ij},則只需要計算U^T_i\Sigma V_j即可。通過這種方法吵瞻,我們可以將評分表里面所有沒有評分的位置得到一個預測評分葛菇。通過找到最高的若干個評分對應的物品推薦給用戶。到這里似乎很完美了橡羞,但是我們忽略了一個問題眯停,傳統(tǒng)的SVD要求矩陣是稠密的,因此為了讓SVD解決該問題卿泽,我們需要對SVD進行缺失值填充莺债。但是這樣又會導致新的問題:

  • 矩陣太稠密計算復雜度高
  • 如何對缺失值進行填充

2. FunkSVD

為了解決上述傳統(tǒng)SVD的問題,FunkSVD被提出签夭,這種改進算法稱為隱語義模型或潛在因素模型齐邦。該方法只將矩陣分解成2個矩陣——用戶隱含特征組成的矩陣和項目隱含特征組成的矩陣:
R \approx P_{m*k}^TQ_{k*n}
其中k表示隱特征的數量,Pk×m矩陣第租,表示用戶特征向量措拇;Qk×n矩陣,表示物品特征向量煌妈。那么用戶u對用戶i的預測評分為:
\hat r_{ui}=p_u^Tq_i

2.1求解

求解方法是將問題轉化為最小化誤差函數儡羔,目標函數為:
C = \sum_{(u, i) \in R} (r_{ui} - p_u^Tq_i)^2 + \lambda (||p_u||^2 +||q_i||^2 )
目標
\min_{p_u, q_i} C

2.2優(yōu)化方法

最常用的兩種優(yōu)化方法:隨機梯度下降(SGD)和最小二乘(ALS)。通常SGD比ALS(Alternating Least Squares)簡單而且快速璧诵;但是ALS的并行性能比較好汰蜘,而且可以較好地處理稀疏數據,spark的實現方式就是ALS之宿。

隨機梯度下降

分別對p_uq_i求導:
\frac{\partial C }{\partial p_u} = -2(r_{ui} - p_u^Tq_i)q_i + 2\lambda p_u
\frac{\partial C }{\partial q_i} = -2(r_{ui} - p_u^Tq_i)p_u + 2\lambda q_i
那么p_u,q_i的迭代公式為:
p_u = \alpha[(r_ui - p_u^Tq_i)q_i - \lambda p_u]
q_i = \alpha[(r_ui - p_u^Tq_i)p_u - \lambda q_i]

ALS

同樣通過求偏導的方法族操,并令偏導等于0,可以得到
p_u = (Q^TQ + \lambda E)^{-1} Q^Tr_u \space\space (1)
q_i = (P^TP + \lambda E)^{-1} P^T r_i \space\space (2)
先固定Q比被,通過公式(1)求解P色难;再固定P,通過公式(2)求解Q等缀;直到收斂枷莉。

3. FunkSVD在協(xié)同過濾中的應用

最后得到P, Q后,可以通過4種方式進行推薦:

  • 直接使用p_u^Tq_i
  • 基于user-based推薦
    先通過P計算出相似用戶尺迂,然后再推薦相似用戶評分高的物品
  • 基于item-based推薦
    先通過Q計算出相似物品笤妙,然后再根據該用戶的歷史行為推薦相似物品
  • 基于主題的推薦(可能這種叫法不對)
    這個有點類似于LDA, 通過P可以得到用戶最顯著的隱特征冒掌,然后推薦在該隱特征上表現明顯的商品。

4. 基于SVD的其他改進方法

Bias-SVD

用戶對物品的評價有些因素與用戶的喜好無關蹲盘,而只取決于用戶或物品本身特性股毫。例如,對于樂觀的用戶來說召衔,它的評分行為普遍偏高铃诬,而對批判性用戶來說,他的評分記錄普遍偏低苍凛,即使他們對同一物品的評分相同趣席,但是他們對該物品的喜好程度卻并不一樣。同理醇蝴,對物品來說吩坝,以電影為例,受大眾歡迎的電影得到的評分普遍偏高哑蔫,而一些爛片的評分普遍偏低,這些因素都是獨立于用戶或產品的因素弧呐,而和用戶對產品的的喜好無關闸迷。
Bias-SVD把這些獨立于用戶或獨立于物品的因素稱為偏置(Bias)部分,將用戶和物品的交互即用戶對物品的喜好部分稱為個性化部分俘枫。偏置部分由3部分組成:

  • 訓練集中所有評分記錄的全局平均數\mu, 該值為常數
  • 用戶偏置bu
  • 物品偏置bi
    則偏置部分為:
    b = \mu + b_u + b_i
    b加入目標函數腥沽,則變成:
    \hat r_{ui} = p_u^Tq_i + \mu + b_u + b_i
    C = \sum_{(u, i) \in R} (r_{ui} - \hat r_{ui})^2 + \lambda (||p_u||^2 +||q_i||^2 + b_u^2 + b_i^2)

SVD++

SVD++算法在Bias-SVD算法上增加考慮了用戶的隱式反饋。
對于某一個用戶u鸠蚪,它提供了隱式反饋的物品集合定義為N(u)今阳,這個用戶對某個物品j對應的隱式反饋修正的評分值為c_{ij},表示為q_i^Ty_s那么該用戶所有的評分修正值為\sum_{s \in N(u)}{c_{sj}}茅信,則加入了隱式反饋以后的優(yōu)化目標函數J(p,q)是這樣的:
\hat r_{ui} = p^T_uq_i + \mu + b_i + b_u + q_i^T|N(u)|^{-\frac{1}{2}}\sum_{s \in N(i)}y_s
arg \min_{p_uq_i} \sum_{(u, i) \in R} (r_{ui} - \hat r_{ui})^2 + \lambda (||p_u||^2 +||q_i||^2 + b_u^2 + b_i^2 + \sum_{s \in N(u) }||y_s||^2)
其中盾舌,引入|N(i)|^{?\frac{1}{2}}是為了消除不同|N(i)|個數引起的差異。如果需要考慮用戶的隱式反饋時蘸鲸,使用SVD++是個不錯的選擇妖谴。

參考資料

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市酌摇,隨后出現的幾起案子膝舅,更是在濱河造成了極大的恐慌,老刑警劉巖窑多,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仍稀,死亡現場離奇詭異狂魔,居然都是意外死亡蚓再,警方通過查閱死者的電腦和手機载萌,發(fā)現死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來讲冠,“玉大人,你說我怎么就攤上這事淮摔〗耄” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵琉闪,是天一觀的道長迹炼。 經常有香客問我,道長颠毙,這世上最難降的妖魔是什么斯入? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蛀蜜,結果婚禮上刻两,老公的妹妹穿的比我還像新娘。我一直安慰自己滴某,他們只是感情好磅摹,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著霎奢,像睡著了一般户誓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上幕侠,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天帝美,我揣著相機與錄音,去河邊找鬼晤硕。 笑死悼潭,一個胖子當著我的面吹牛,可吹牛的內容都是我干的舞箍。 我是一名探鬼主播舰褪,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼疏橄!你這毒婦竟也來了抵知?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤软族,失蹤者是張志新(化名)和其女友劉穎刷喜,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體立砸,經...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡掖疮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了颗祝。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浊闪。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡恼布,死狀恐怖,靈堂內的尸體忽然破棺而出搁宾,到底是詐尸還是另有隱情折汞,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布盖腿,位于F島的核電站爽待,受9級特大地震影響,放射性物質發(fā)生泄漏翩腐。R本人自食惡果不足惜鸟款,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望茂卦。 院中可真熱鬧何什,春花似錦、人聲如沸等龙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛛砰。三九已至霍比,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間暴备,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工们豌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留涯捻,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓望迎,卻偏偏與公主長得像障癌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子辩尊,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內容