推荐算法
lfm -latent factor model
隐语义模型
它是个啥?
点击矩阵:
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 的向量:
u s e r 1 = [ 0.325 , 0.456....0.768 ] i t e m 1 = [ 0.215 , 0.569...0.568 ] u s e r 1 ∗ i t e m 1 = 常 数 这 个 常 数 表 明 u s e r 1 对 i t e m 1 的 喜 好 程 度 user 1=[0.325,0.456....0.768]\\ item 1=[0.215,0.569...0.568]\\ user1*item1=常数\\ 这个常数表明user1对item1的喜好程度 user1=[0.325,0.456....0.768]item1=[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维(是一个我们想求的数,也就是在下面的式子中是一个自变量)
l
o
s
s
=
∑
(
u
,
i
)
∈
D
{
(
P
(
u
,
i
)
−
P
l
f
m
(
u
,
i
)
)
2
+
λ
∣
p
u
∣
2
+
λ
∣
q
i
∣
2
}
loss=\sum_{(u,i)\in D}\{(P(u,i)-P_{lfm}(u,i))^2+\lambda |p_u|^2+\lambda |q_i|^2\}
loss=(u,i)∈D∑{(P(u,i)−Plfm(u,i))2+λ∣pu∣2+λ∣qi∣2}
P l f m ( u , i ) = p u T ∗ q i = ∑ f = 1 F p u f ∗ q i f P_{lfm}(u,i)=p_u^T*q_i=\sum_{f=1}^Fp_{uf}*q_{if} Plfm(u,i)=puT∗qi=f=1∑Fpuf∗qif
δ l o s s δ p u f = ∑ ( u , i ) ∈ D δ l o s s δ P l f m ( u , i ) ∗ δ P l f m ( u , i ) δ p u f + 2 α ∣ p u f ∣ \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}| δpufδloss=(u,i)∈D∑δPlfm(u,i)δloss∗δpufδPlfm(u,i)+2α∣puf∣
= − 2 ∗ ( P ( u , i ) − p u f ∗ q i f ) ∗ q i f + 2 α ∣ p u f ∣ =-2*(P(u,i)-p_{uf}*q_{if})*q_{if}+2\alpha|p_{uf}| =−2∗(P(u,i)−puf∗qif)∗qif+2α∣puf∣
p u f = p u f + β ∗ δ l o s s δ p u f p_{uf}=p_{uf}+\beta*\frac{\delta loss}{\delta p_{uf}} puf=puf+β∗δpufδloss
δ l o s s δ q i f = ∑ ( u , i ) ∈ D δ l o s s δ P l f m ( u , i ) ∗ δ P l f m ( u , i ) δ q i f + 2 α ∣ p u f ∣ \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| δqifδloss=(u,i)∈D∑δPlfm(u,i)δloss∗δqifδPlfm(u,i)+2α∣puf∣
= − 2 ∗ ( P ( u , i ) − p u f ∗ q i f ) ∗ p u f + 2 α ∣ q i f ∣ =-2*(P(u,i)-p_{uf}*q_{if})*p_{uf}+2\alpha|q_{if}| =−2∗(P(u,i)−puf∗qif)∗puf+2α∣qif∣
q i f = q i f + β ∗ δ l o s s δ q i f q_{if}=q_{if}+\beta*\frac{\delta loss}{\delta q_{if}} qif=qif+β∗δqifδloss
构建模型需要注意的自定义参数
隐特征个数(通常设置为10-32个)
学习速率β
正则参数α(0.01-0.05)
评价该算法
理论基础:
监督学习思想,理论基础较为完备
离线计算空间复杂度:
O(物品数目*特征数+商品数目*特征数)
计算时间复杂度:
M个用户,N个商品,S次迭代,F个隐特征
离线计算时:O(F*(N+M))
训练模型时:O(S*M*N)
在线推荐:
用户有新行为时,无法即时召回重新训练