这篇文章是参考: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),即:

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

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

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

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

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

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

具体求解方法说明如下:

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

  • 同理固定X,可得:

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

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

ALS-WR

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

  • ALS-WR的目标函数:

其中α是置信度系数。

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

其中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算法相关推荐

  1. 机器学习(十三)——机器学习中的矩阵方法(3)病态矩阵、协同过滤的ALS算法(1)

    http://antkillerfarm.github.io/ 向量的范数(续) 范数可用符号∥x∥λ\|x\|_\lambda∥x∥λ​表示.常用的有: ∥x∥1=∣x1∣+⋯+∣xn∣\|x\|_ ...

  2. 机器学习(十三)——机器学习中的矩阵方法(3)病态矩阵、协同过滤的ALS算法(1)...

    http://antkillerfarm.github.io/ 向量的范数(续) 范数可用符号∥x∥λ表示. 经常使用的有: ∥x∥1=|x1|+⋯+|xn| ∥x∥2=x21+⋯+x2n−−−−−− ...

  3. Python推荐系统学习笔记(3)基于协同过滤的个性化推荐算法实战---ItemCF算法(下)

    本文在 Python推荐系统学习笔记(2)基于协同过滤的个性化推荐算法实战---ItemCF算法 一文的基础上,对其基本的ItemCF算法做出改进. 一.相关概念 1.ItemCF中,基于行为(喜好) ...

  4. Python推荐系统学习笔记(5)基于协同过滤的个性化推荐算法实战---UserCF算法(下)

    本文在 Python推荐系统学习笔记(4)基于协同过滤的个性化推荐算法实战---UserCF算法(上) 一文的基础上,对其基本的UserCF算法做出改进. 一.相关概念 1.UserCF中,基于行为( ...

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

    http://antkillerfarm.github.io/ Kendall秩相关系数(Kendall rank correlation coefficient) 对于秩变量对(xi,yi),(xj ...

  6. 协同过滤——基于模型的算法

    文章目录 1 概述 1.1 基于分解的方法 1.1.1 分解相似度矩阵:特征值分解 1.1.2 分解评分矩阵:奇异值分解(SVD) 1.1.3 SVD.SVD++.时间敏感模型 1.2 基于邻域的学习 ...

  7. 原创:协同过滤之ALS

    推荐系统的算法,在上个世纪90年代成型,最早应用于UserCF,基于用户的协同过滤算法,标志着推荐系统的形成.首先,要明白以下几个理论:①长尾理论②评判推荐系统的指标.之所以需要推荐系统,是要挖掘冷门 ...

  8. 协同过滤——基于邻域的算法

    文章目录 1.概述 1.1 基于用户的协同过滤与基于物品的协同过滤的比较 1.2 用户行为数据 1.3 数学符号约定 2.基于用户的协同过滤 2.1 基本原理 2.2 数学描述 2.3 回归与分类 3 ...

  9. Python推荐系统学习笔记(1)基于协同过滤的个性化推荐算法实战---隐语义模型

    一.相关概念: 1.隐语义模型(LFM) 通过矩阵分解建立用户和隐类之间的关系,物品和隐类之间的关系,最终得到用户对物品的偏好关系. 假设我们想要发现 F 个隐类, 我们的任务就是找到两个矩阵 U 和 ...

  10. als算法参数_Spark2.0协同过滤与ALS算法介绍

    ALS矩阵分解 一个 的打分矩阵 A 可以用两个小矩阵和的乘积来近似,描述一个人的喜好经常是在一个抽象的低维空间上进行的,并不需要把其喜欢的事物一一列出.再抽象一些,把人们的喜好和电影的特征都投到这个 ...

最新文章

  1. ALEIDoc EDI(3)--change point01
  2. HBase cell
  3. 区分range() , np.arange() , np.linspace()
  4. SSDT表的遍历(源码)
  5. Java学习笔记11-1——Spring5
  6. 正则表达式RegExp对象
  7. 【译】Angular Elements 及其运作原理
  8. Unity中Lua造成的堆内存泄露问题
  9. CC2530存储器映射
  10. [转]关于公司级别的知识库的建设的一些看法。
  11. 2021人工智能状况分析报告
  12. 智慧医疗管理系统解决方案:医药电商系统实现智能化改造
  13. Microsoft Surface
  14. creo打不开stp文件_为什么stp网站打不开 creo打不开stp文件
  15. 微软官方网站下载 Visual Studio 2019 各版本
  16. 影响GPS定位精度的基本概念
  17. 固定光束扫描器行业研究及十四五规划分析报告
  18. 流媒体技术在宽带网络的应用与发展
  19. 网易前端微专业课程讨论区问答精选
  20. 亿百特E22 lora模块使用教程

热门文章

  1. MySql中的count函数
  2. HCIE-Security Day21:GRE协议:实验(二)配置基于OSPF的GRE隧道
  3. 求二叉树的深度(C++)
  4. HDU 2186--
  5. CentOS下redis安装和部署
  6. 想要组装一台 RISC-V PC?试试这个 RISC-V 开发板
  7. PHP表单header post get
  8. linux下常用文件传输命令(转)
  9. 使用JDK自带jvisualvm监控tomcat(收藏)
  10. JavaScript学习笔记——运算符和表达式