基于矩阵分解的推荐算法

推荐系统

             我们知道,协同过滤算法(Collaborative Filtering)是最常用的推荐算法,其就是通过从用户(User)的历史行为数据中挖掘出用户的兴趣,并为其推荐可能感兴趣的项(Item),常用的方法有,基于用户的协同过滤算法和基于项的协同过滤算法。
             我们采用常用的相似度度量方法,欧氏距离(Euclidean Distance)、皮尔逊相关系数(Pearson Correlation)、余弦相似度(Cosine Similarity),以上三种度量方法均满足拓扑学度量空间三要素,即非负性、对称性、三角不等性。此处我们不打算展开讲解以上两种算法,而是重点说明基于模型的协同过滤算法中的一种—–矩阵分解(Matrix Factorization),另外大家有兴趣也可以查看一下基于图的推荐算法(PersonalRank)的简单实现点这里。。。 ^-^。

矩阵分解

             此处我们只将用户—商品矩阵 Rm×n R m × n 分解为两个矩阵 Pm×k P m × k Qk×n Q k × n ,使得满足,

Rm×nPm×k×Qk×n=R^m×n R m × n ≈ P m × k × Q k × n = R ^ m × n
从而补全那些缺失值,进而为用户推荐那些可能感兴趣的商品。
             我们将使用最小二乘法对那些非缺失的值进行损失评估,即
e2=(rijr^ij)2=(rijl=1kpil×qlj)2 e 2 = ( r i j − r ^ i j ) 2 = ( r i j − ∑ l = 1 k p i l × q l j ) 2
另外我们使用 L2 L 2 正则化,
L2=l=1k(p2il+q2lj) L 2 = ∑ l = 1 k ( p i l 2 + q l j 2 )
其中 i[1,m],j[1,n] i ∈ [ 1 , m ] , j ∈ [ 1 , n ] , k是我们所指定的大小,因此最终的损失函数为,
loss(pil,qlj)=e2+β2L2  pil,qlj l o s s ( p i l , q l j ) = e 2 + β 2 L 2     其 中 p i l , q l j 即 为 分 解 的 两 个 矩 阵 中 的 元 素 , 也 就 是 求 解 参 数
接下来我们就可以使用梯度下降算法求解 Pm×k P m × k Qk×n Q k × n
ploss= losspil=2(rijr^ij)qlj+βpil=2eijqlj+βpil ∇ p l o s s = ∂   l o s s ∂ p i l = − 2 ( r i j − r ^ i j ) q l j + β p i l = − 2 e i j q l j + β p i l

qloss= lossqlj=2(rijr^ij)pil+βqlj=2eijpil+βqlj ∇ q l o s s = ∂   l o s s ∂ q l j = − 2 ( r i j − r ^ i j ) p i l + β q l j = − 2 e i j p i l + β q l j

So…,
pil=pilploss p i l = p i l − ∇ p l o s s
qlj=qljqloss q l j = q l j − ∇ q l o s s
这样我们就可以通过迭代(迭代次数,误差容忍度。。。)直到收敛。
实现完整代码 点这里。。。

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值