协同过滤
协同过滤主要包含基于用户的协同过滤和基于商品的协同过滤
1. 基于用户的协同过滤
a. 找到和用户最近的其它用户,找到他们看/买过但当前用户没看/买过的item,根据距离加权打分。
b.找得分最高的items进行推荐
基于用户的协同过滤和基于物品的协同过滤相似
步骤:
a. 对每个用户的所有评分减去其均值,将某用户未打分的item设为0
b. 计算当前用户评分和其余用户的Person相似度
c. 选取TopK个为正的相似度,加权得分
2. 基于物品的协同过滤
根据用户对商品/内容的行为,计算item之间的相似度,找到和当前item最近的进行推荐。
示例:
步骤:
a. 对每场电影的评分减去其均值,将某用户未打分的item设为0
b. 计算当前电影评分和其余电影的Person相似度
c. 选取TopK个为正的相似度,加权得分
在工业界,绝大数为基于item的协同过滤。
a.因为用户太多了,相似度计算量太大。
b.item是固定不变的,user的变化性较强,itemCF的稳定性高
3.相似度/距离度量
- 欧氏距离D1,2=(x1−x2)2+(y1−y2)2‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾√D1,2=(x1−x2)2+(y1−y2)2
- Jaccard相似度J(A,B)=|A∩B|A∪B|J(A,B)=|A∩B|A∪B|
狭义Jaccard相似度,计算两个集合之间的相似程度,元素的“取值”为0或1 - 余弦相似度 cos(θ)=aTb|a|·|b|cos(θ)=aTb|a|·|b|
- Pearson相似度ρX,Y=cov(X,Y)σXσYρX,Y=cov(X,Y)σXσY
4.冷启动“问题”
对于新用户:
a. 推荐hot
b. 用户注册,勾选感兴趣的item
c.用户注册完,用一些互动游戏等确定喜欢和不喜欢。
对于新商品
根据当前item的属性,求与其它item的相似性
隐语义模型
现有一个用户对电影评分矩阵,通过预测,尽量将未打分的项进行打分。
我们假定:应该有一些隐藏因子,影响用户的评分,隐藏因子小于user和item数。
因此,我们首先想到的就是SVD矩阵分解,过程如下:
1.SVD矩阵分解
假设R为打分矩阵,有K个隐含变量,我们需要找到矩阵P(U*K)和Q(D*K)
采用梯度下降:
a. 定义目标函数:
b. 求梯度和偏导,更新迭代公式:
c. 还原回矩阵乘积,即可补充未打分项
2.隐语义模型进一步优化
μμ为用户的平均打分
bxbx为用户偏置:有一部分用户就喜欢打很高或很低的分
bibiitem偏置:这部电影很多人打了5分,很少人打了3分
则加上偏置后的隐语义模型的损失函数为:
对上述公式求偏导,并用梯度下降法更新迭代公式。