协同过滤之ALS-WR算法

转载 2016年05月30日 17:30:18

这篇文章是参考:https://github.com/ceys/jdml/wiki/ALS 改写的,由于原文Latex公式没有正常展现+少量笔误,妨碍阅读,所以这里重新整理了一下。

ALS是alternating least squares的缩写 , 意为交替最小二乘法;而ALS-WR是alternating-least-squares with weighted-λ -regularization的缩写,意为加权正则化交替最小二乘法。该方法常用于基于矩阵分解的推荐系统中。例如:将用户(user)对商品(item)的评分矩阵分解为两个矩阵:一个是用户对商品隐含特征的偏好矩阵,另一个是商品所包含的隐含特征的矩阵。在这个矩阵分解的过程中,评分缺失项得到了填充,也就是说我们可以基于这个填充的评分来给用户最商品推荐了。

ALS

由于评分数据中有大量的缺失项,传统的矩阵分解SVD(奇异值分解)不方便处理这个问题,而ALS能够很好的解决这个问题。对于R(m×n)的矩阵,ALS旨在找到两个低维矩阵X(m×k)和矩阵Y(n×k),来近似逼近R(m×n),即:

gif.latex其中R(m×n)代表用户对商品的评分矩阵,X(m×k)代表用户对隐含特征的偏好矩阵,Y(n×k)表示商品所包含隐含特征的矩阵,T表示矩阵Y的转置。实际中,一般取k<<min(m, n), 也就是相当于降维了。这里的低维矩阵,有的地方也叫低秩矩阵。

为了找到使低秩矩阵X和Y尽可能地逼近R,需要最小化下面的平方误差损失函数:

gif.latex其中xu(1×k)表示示用户u的偏好的隐含特征向量,yi(1×k)表示商品i包含的隐含特征向量, rui表示用户u对商品i的评分, 向量xu和yi的内积xuTyi是用户u对商品i评分的近似。

损失函数一般需要加入正则化项来避免过拟合等问题,我们使用L2正则化,所以上面的公式改造为:

gif.latex其中λ是正则化项的系数。

到这里,协同过滤就成功转化成了一个优化问题。由于变量xu和yi耦合到一起,这个问题并不好求解,所以我们引入了ALS,也就是说我们可以先固定Y(例如随机初始化X),然后利用公式(2)先求解X,然后固定X,再求解Y,如此交替往复直至收敛,即所谓的交替最小二乘法求解法。

具体求解方法说明如下:

  • 先固定Y,  将损失函数L(X,Y)对xu求偏导,并令导数=0,得到:

deltaxu

  • 同理固定X,可得:

deltayi其中ru(1×n)是R的第u行,ri(1×m)是R的第i列, I是k×k的单位矩阵。

  • 迭代步骤:首先随机初始化Y,利用公式(3)更新得到X,  然后利用公式(4)更新Y,  直到均方根误差变RMSE化很小或者到达最大迭代次数。

gif.latex

ALS-WR

上文提到的模型适用于解决有明确评分矩阵的应用场景,然而很多情况下,用户没有明确反馈对商品的偏好,也就是没有直接打分,我们只能通过用户的某些行为来推断他对商品的偏好。比如,在电视节目推荐的问题中,对电视节目收看的次数或者时长,这时我们可以推测次数越多,看得时间越长,用户的偏好程度越高,但是对于没有收看的节目,可能是由于用户不知道有该节目,或者没有途径获取该节目,我们不能确定的推测用户不喜欢该节目。ALS-WR通过置信度权重来解决这些问题:对于更确信用户偏好的项赋以较大的权重,对于没有反馈的项,赋以较小的权重。ALS-WR模型的形式化说明如下:

  • ALS-WR的目标函数:

gif.latex其中α是置信度系数。

  • 求解方式还是最小二乘法:

gif.latex其中Cu是n×n的对角矩阵,Ci是m×m的对角矩阵;Cuii  = cui,  Ciii  = cii。

具体实现待补充。

本文参考:

[1] https://github.com/ceys/jdml/wiki/ALS

[2] http://mt.sohu.com/20150507/n412633357.shtml

 

【转载请注明:纯净的天空出品: http://www.fuqingchuan.com/2015/03/812.html

协同过滤之ALS-WR算法

这篇文章是参考:https://github.com/ceys/jdml/wiki/ALS 改写的,由于原文Latex公式没有正常展现+少量笔误,妨碍阅读,所以这里重新整理了一下。 ALS是...
  • winone361
  • winone361
  • 2016年02月21日 17:55
  • 658

推荐系统ALS矩阵分解

思想类似线性回归做预测,大致如下 定义一个预测模型(数学公式), 然后确定一个损失函数, 将已有数据作为训练集, 不断迭代来最小化损失函数的值, 最终确定参数,把参数套到预测模型中做预测。 ...
  • u013749540
  • u013749540
  • 2016年07月01日 10:05
  • 1522

协同过滤之ALS-WR算法

协同过滤之ALS-WR算法 这篇文章是参考:https://github.com/ceys/jdml/wiki/ALS 改写的,由于原文Latex公式没有正常展现+少量笔误,妨碍阅读,所以这...
  • nysyxxg
  • nysyxxg
  • 2017年05月31日 17:09
  • 292

可交替的最小二乘法(ALS-WR)

为什么要在推荐系统中用隐式因子分解-隐语义模型? 因为在实际项目中,我们的用户很多项目都是没有评分的,并且很多情况下评分值都是缺失的。或者很稀疏。 那么我们分解为用户因子矩阵和项目因子矩阵,然后在...
  • zengxiaosen
  • zengxiaosen
  • 2017年02月22日 01:36
  • 667

机器学习(十四)——协同过滤的ALS算法(2)、主成分分析

机器学习(十四)——协同过滤的ALS算法(2)、主成分分析
  • antkillerfarm
  • antkillerfarm
  • 2016年12月19日 09:41
  • 3531

基于Spark构建推荐引擎之一:基于物品的协同过滤推荐

1、Spark构建推荐引擎之一:基于物品的协同过滤推荐 1.0 前言 目前SparkMLlib支持的推荐算法只有alternating least squares (ALS)这一种,相比较Mahout...
  • sunbow0
  • sunbow0
  • 2015年01月15日 10:14
  • 7172

sparkmllib协同过滤推荐算法

协同过滤推荐算法,是最经典、最常用的推荐算法。通过分析用户兴趣,在用户群中找到指定用户的相似用户,综合这些相似用户对某一信息的评价,形成系统关于该指定用户对此信息的喜好程度预测。 要实现协同过滤,需...
  • illbehere
  • illbehere
  • 2016年11月20日 15:39
  • 4010

协同过滤中显性反馈 与 隐性反馈 的区别(附ALS最优化)

协同过滤中显性反馈 与 隐性反馈 的区别1. 特质上的区别显性反馈行为:用户明确表示对物品喜好的行为。 隐性反馈行为:不能明确反映用户喜好的行为。隐性反馈的特性 没有负反馈。隐性反馈无法判断是否不喜...
  • axuanwu
  • axuanwu
  • 2017年07月07日 18:52
  • 817

使用Spark ALS实现协同过滤

转自:http://blog.javachen.com/2015/06/01/how-to-implement-collaborative-filtering-using-spark-als.html...
  • student1218
  • student1218
  • 2015年08月12日 10:22
  • 3292

协同过滤(ALS)算法原理及Spark MLlib调用实例(Scala/Java/Python)

协同过滤 算法介绍:     协同过滤常被用于推荐系统。这类技术目标在于填充“用户-商品”联系矩阵中的缺失项。Spark.ml目前支持基于模型的协同过滤,其中用户和商品以少量的潜在因子来描述,用以...
  • liulingyuan6
  • liulingyuan6
  • 2016年12月06日 17:03
  • 3984
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:协同过滤之ALS-WR算法
举报原因:
原因补充:

(最多只允许输入30个字)