[推荐系统]--协同过滤算法和隐语义模型

协同过滤

协同过滤主要包含基于用户的协同过滤基于商品的协同过滤

1. 基于用户的协同过滤

a. 找到和用户最近的其它用户,找到他们看/买过但当前用户没看/买过的item,根据距离加权打分。
b.找得分最高的items进行推荐
[推荐系统]--协同过滤算法和隐语义模型_第1张图片
基于用户的协同过滤和基于物品的协同过滤相似
[推荐系统]--协同过滤算法和隐语义模型_第2张图片
步骤:
a. 对每个用户的所有评分减去其均值,将某用户未打分的item设为0
b. 计算当前用户评分和其余用户的Person相似度
c. 选取TopK个为正的相似度,加权得分

2. 基于物品的协同过滤

根据用户对商品/内容的行为,计算item之间的相似度,找到和当前item最近的进行推荐。
[推荐系统]--协同过滤算法和隐语义模型_第3张图片
示例:
[推荐系统]--协同过滤算法和隐语义模型_第4张图片
[推荐系统]--协同过滤算法和隐语义模型_第5张图片
步骤:
a. 对每场电影的评分减去其均值,将某用户未打分的item设为0
b. 计算当前电影评分和其余电影的Person相似度
c. 选取TopK个为正的相似度,加权得分

在工业界,绝大数为基于item的协同过滤。
a.因为用户太多了,相似度计算量太大。
b.item是固定不变的,user的变化性较强,itemCF的稳定性高

3.相似度/距离度量
  • 欧氏距离
    D1,2=(x1x2)2+(y1y2)2 D 1 , 2 = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2
  • Jaccard相似度
    J(A,B)=|AB|AB| J ( A , B ) = | A ∩ B | A ∪ B |

    狭义Jaccard相似度,计算两个集合之间的相似程度,元素的“取值”为0或1
  • 余弦相似度
    cos(θ)=aTb|a|·|b| c o s ( θ ) = a T b | a | · | b |
  • Pearson相似度
    ρX,Y=cov(X,Y)σXσY ρ X , Y = c o v ( X , Y ) σ X σ Y
4.冷启动“问题”

对于新用户:
a. 推荐hot
b. 用户注册,勾选感兴趣的item
c.用户注册完,用一些互动游戏等确定喜欢和不喜欢。
对于新商品
根据当前item的属性,求与其它item的相似性

隐语义模型

现有一个用户对电影评分矩阵,通过预测,尽量将未打分的项进行打分。
我们假定:应该有一些隐藏因子,影响用户的评分,隐藏因子小于user和item数。
因此,我们首先想到的就是SVD矩阵分解,过程如下:
[推荐系统]--协同过滤算法和隐语义模型_第6张图片

1.SVD矩阵分解

假设R为打分矩阵,有K个隐含变量,我们需要找到矩阵P(U*K)和Q(D*K)

采用梯度下降:
a. 定义目标函数:

b. 求梯度和偏导,更新迭代公式:
[推荐系统]--协同过滤算法和隐语义模型_第7张图片
c. 还原回矩阵乘积,即可补充未打分项

2.隐语义模型进一步优化

μ μ 为用户的平均打分
bx b x 为用户偏置:有一部分用户就喜欢打很高或很低的分
bi b i item偏置:这部电影很多人打了5分,很少人打了3分
则加上偏置后的隐语义模型的损失函数为:
[推荐系统]--协同过滤算法和隐语义模型_第8张图片
对上述公式求偏导,并用梯度下降法更新迭代公式。

你可能感兴趣的:(推荐系统,协同过滤,隐语义模型)