推薦算法-lfm

推薦算法

lfm -latent factor model

隱語義模型

簡單易懂 by hch

它是個啥?

點擊矩陣:

item 1 item 2 item 3
user 1 1 0 0
user 2 0 1 0
user 3 1 1 0

user i 表示第i號用戶,item j表示第j號產品
矩陣表示,用戶對產品是否有點擊,若點擊,則爲1,未點擊,則爲0
我們從這個矩陣分解出每個 item 的向量和每個 user 的向量:

user1=[0.325,0.456....0.768]item1=[0.215,0.569...0.568]user1item1=user1item1 user 1=[0.325,0.456....0.768]\\ item 1=[0.215,0.569...0.568]\\ user1*item1=常數\\ 這個常數表明user1對item1的喜好程度

算法的應用:

知道了簡單原理後,我們便可以理解一下應用:

計算用戶的toplike:可計算特定用戶對每一個item的喜愛程度
計算item的topsim:計算特定item與其他item的相似程度,
計算item的topic:聚類方法,把不同的item聚成不同的類

我們如何從矩陣中分解向量?

採用“監督學習”的思想,初始化時對向量設置隨機值
列出損失函數,然後梯度下降,得到各個item及user的向量。

分解的具體流程

設置隱特徵數量F個,隨機初始化所有item及user 的向量
計算loss函數:u表示user,i表示item,D表示樣本集
p(u,i)表示實際情況下u對i是否有點擊
P_lfm(u,i)表示用u和i向量計算得到的預測值
p_u表示u的向量
q_i表示i的向量
p_uf表示u的向量第f維(是一個我們想求的數,也就是在下面的式子中是一個自變量)
loss=(u,i)D{(P(u,i)Plfm(u,i))2+λpu2+λqi2} loss=\sum_{(u,i)\in D}\{(P(u,i)-P_{lfm}(u,i))^2+\lambda |p_u|^2+\lambda |q_i|^2\}

Plfm(u,i)=puTqi=f=1Fpufqif P_{lfm}(u,i)=p_u^T*q_i=\sum_{f=1}^Fp_{uf}*q_{if}

δlossδpuf=(u,i)DδlossδPlfm(u,i)δPlfm(u,i)δpuf+2αpuf \frac{\delta loss}{\delta p_{uf}}=\sum_{(u,i)\in D}\frac{\delta loss}{\delta P_{lfm}(u,i)}*\frac{\delta P_{lfm}(u,i)}{\delta p_{uf}}+2\alpha|p_{uf}|

=2(P(u,i)pufqif)qif+2αpuf =-2*(P(u,i)-p_{uf}*q_{if})*q_{if}+2\alpha|p_{uf}|

puf=puf+βδlossδpuf p_{uf}=p_{uf}+\beta*\frac{\delta loss}{\delta p_{uf}}

δlossδqif=(u,i)DδlossδPlfm(u,i)δPlfm(u,i)δqif+2αpuf \frac{\delta loss}{\delta q_{if}}=\sum_{(u,i)\in D}\frac{\delta loss}{\delta P_{lfm}(u,i)}*\frac{\delta P_{lfm}(u,i)}{\delta q_{if}}+2\alpha|p_uf|

=2(P(u,i)pufqif)puf+2αqif =-2*(P(u,i)-p_{uf}*q_{if})*p_{uf}+2\alpha|q_{if}|

qif=qif+βδlossδqif q_{if}=q_{if}+\beta*\frac{\delta loss}{\delta q_{if}}

構建模型需要注意的自定義參數

隱特徵個數(通常設置爲10-32個)
學習速率β
正則參數α(0.01-0.05)

評價該算法

理論基礎:

監督學習思想,理論基礎較爲完備

離線計算空間複雜度:

O(物品數目*特徵數+商品數目*特徵數)

計算時間複雜度:

M個用戶,N個商品,S次迭代,F個隱特徵
離線計算時:O(F*(N+M))
訓練模型時:O(S*M*N)

在線推薦:

用戶有新行爲時,無法即時召回重新訓練
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章