ALS(alternating least squares)

ALS是交替最小二乘的简称。在机器学习中,ALS特指使用交替最小二乘求解的一个协同推荐算法。如:将用户(user)对商品(item)的评分矩阵分解成2个矩阵:

user对item 潜在因素的偏好矩阵(latent factor vector)

item潜在因素的偏好矩阵

假设有m个user和n个item,所以评分矩阵为R。ALS(alternating least squares)希望找到2个比较低纬度的矩阵(X和Y)来逼近这个评分矩阵R。

$$R_{m \times n}\approx X_{m \times k} \cdot Y_{n \times k}^T$$

ALS的核心就是这样一个假设:打分矩阵是近似低秩的。换句话说,就是一个m*n的打分矩阵可以由分解的两个小矩阵U(m*k)和V(k*n)的乘积来近似。这就是ALS的矩阵分解方法。

为了让X和Y相乘能逼近R,因此我们需要最小化损失函数(loss function),因此需要最小化损失函数,在此定义为平方误差和(Mean square error, MSE)。

$$Loss(X,Y)=\sum_{i,u}^{}(r_{ui}-x_uY_i^T)^2$$

一般损失函数都会需要加入正则化项(Regularization item)来避免过拟合的问题,通常是用L2,所以目标函数会被修改为:

$$Loss(X,Y)=\sum_{i,u}^{}(r_{ui}-x_uY_i^T)^2+\lambda (\sum_{u}^{}||x_u||^2+\sum_{i}^{}||y_i||^2)$$

上面介绍了“最小二乘(最小平方误差)”,但是还没有讲清楚“交替”是怎么回事。因为X和Y都是未知的参数矩阵,因此我们需要用“交替固定参数”来对另一个参数求解。

先固定Y, 将loss function对X求偏导,使其导数等于0:

$$\frac{\partial Loss(X,Y)}{\partial x_u}=0 \Rightarrow x_u = (\sum_{i}^{}y_i^Ty_i+\lambda I)^{-1}\sum_{i}^{}r_{ui}y_i$$

再固定X, 将loss function对Y求偏导,使其导数等于0:

$$\frac{\partial Loss(X,Y)}{\partial y_i}=0 \Rightarrow y_i = (\sum_{u}^{}x_u^Tx_u+\lambda I)^{-1}\sum_{u}^{}r_{ui}x_u$$

既然是交替,就会有迭代的模式存在:

初始化X,Y

利用for u=1,…,n do $\frac{\partial Loss(X,Y)}{\partial x_u}=0$ 去得到$x_u$

利用for i=1,…,m do $\frac{\partial Loss(X,Y)}{\partial y_i}=0$ 去得到$y_i$

重复2和3,不断去更新直到均方根误差RMSE收敛

$$\hat{R} \approx XY^T$$

$$RMSE = \sqrt{\frac{\sum (\hat{R}-R)^2}{N}}$$

ALS-WR(alternating-least-squares with weighted-λ-regularization)

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

损失函数为:

$${Loss}_{ALS-WR}(X, Y)=\sum_{i, u} c_{u i}(p_{u i}-x_{u}y_{i}^{T})^{2}+\lambda(\sum_{u}||x_{u}||^{2}+\sum_{i}||y_{i}||^{2}) $$

$$P_{m \times n} =\left[\begin{array}{ccc} p_{11} & \cdots & p_{1 n} \\ \vdots & \ddots & \vdots \\ p_{m 1} & \cdots & p_{m n} \end{array}\right], p_{u i}=\left\{\begin{array}{cc} 1 & i f r_{u i}>0 \\ 0 & i f r_{u i}=0 \end{array}\right.$$

$$C_{m \times n}=\left[\begin{array}{ccc} c_{11} & \cdots & c_{1 n} \\ \vdots & \ddots & \vdots \\ c_{m 1} & \ldots & c_{m n} \end{array}\right]=\left[\begin{array}{ccc} 1+\alpha r_{11} & \cdots & 1+\alpha r_{1 n} \\ \vdots & \ddots & \vdots \\ 1+\alpha r_{m 1} & \ldots & 1+\alpha r_{m n} \end{array}\right], c_{u i}=1+\alpha r_{u i}$$

其中, $r_{ui}$表示原始量化值,比如观看电影的时间;$\alpha$表示根据用户行为所设置的信任度

小结

在实际应用中,由于待分解的矩阵常常是非常稀疏的,与SVD相比,ALS能有效的解决过拟合问题。基于ALS的矩阵分解的协同过滤算法的可扩展性也优于SVD。与随机梯度下降的求解方式相比,一般情况下随机梯度下降比ALS速度快;但有两种情况ALS更优于随机梯度下降:

当系统能够并行化时,ALS的扩展性优于随机梯度下降法。

ALS-WR能够有效的处理用户对商品的隐式反馈的数据

ALS算法的缺点在于:

它是一个离线算法。

无法准确评估新加入的用户或商品。这个问题也被称为冷启动问题。

参考链接:

als算法参数_矩阵分解之交替最小二乘ALS相关推荐

  1. TensorFlow2实现协同过滤算法中的矩阵分解(首家基于TS2版本)

    目标: 用TensorFlow2,实现协同过滤算法中的矩阵分解.网上找的绝大部分是基于一个模板复制出来的,且基于TensorFlow1,因此本人亲自动手,用TensorFlow2实现. 好奇为什么Te ...

  2. 交替最小二乘+ALS+推荐+Spark

    交替最小二乘+ALS+推荐+Spark 在机器学习的上下文中,ALS 特指使用交替最小二乘求解的一个协同推荐算法.  它通过观察到的所有用户给产品的打分,来推断每个用户的喜好并向用户推荐适合的产品. ...

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

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

  4. python实现lfm_推荐系统召回算法之——LFM(矩阵分解)

    目录 1.LFM算法原理 2.LFM数学原理 3.应用场景 4.python实现 5.总结 算法原理:LFM(later factor model)是一种基于矩阵分解的召回算法,输入UI点展矩阵,输出 ...

  5. qr分解求线性方程组_矩阵分解

    矩阵分解 1. 矩阵的三角分解 1.1 高斯消去法解线性方程组 在聊起矩阵分解之前,先看一下我们小学二年级就学过的高斯消去法解线性方程组,其主要思想就是:将方程组写作写作增广矩阵(A|b)的形式,然后 ...

  6. nmf算法 python_python-非负矩阵分解-NMF

    #非负矩阵分解(NMF): ''' 1.NMF 人脸数据特征提取 目标:已知Olivetti 人脸数据供400个,每个数据64*64, 由于NMF分解得到的W矩阵相当于从原始矩阵中提取的特征, 那么就 ...

  7. ktt算法 约化_矩阵特征与特征向量的计算

    矩阵特征与特征向量的计算 第三章第三章 矩阵特征与特征向量的计算矩阵特征与特征向量的计算3.1 引言引言在科学技术的应用领域中,许多问题都归为求解一个特征系统.如动力学系统和结构 系统中的振动问题,求 ...

  8. 蓝桥杯_算法训练_矩阵乘法

    问题描述 输入两个矩阵,分别是m*s,s*n大小.输出两个矩阵相乘的结果. 输入格式 第一行,空格隔开的三个正整数m,s,n(均不超过200). 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j ...

  9. 从原理到落地,七大维度详解矩阵分解推荐算法

    作者 | gongyouliu 编辑丨Zandy 来源 |  大数据与人工智能 ( ID: ai-big-data) 导语:作者在<协同过滤推荐算法>这篇文章中介绍了 user-based ...

  10. 交替最小二乘矩阵分解_使用交替最小二乘矩阵分解与pyspark建立推荐系统

    交替最小二乘矩阵分解 pyspark上的动手推荐系统 (Hands-on recommender system on pyspark) Recommender System is an informa ...

最新文章

  1. Linux搭建SVN(CollabNet Subversion)服务器 可视化界面
  2. HDFS的访问方式之HDFS shell的常用命令
  3. eclipse 连接mysql_eclipse连接MySQL
  4. /*3.使用二维数组存储班上五个学生三门功课的考试成绩,要求输出每一个学生的总分、平均分、最高分、最低分。
  5. winform 代码定义事件
  6. usb4-配置usb触摸屏
  7. React的组件模式 1
  8. 计算机二级考试考不考二进制,如何通过计算机一、二级考试?方法很重要,过来人的经验告诉你...
  9. python中运行linux命令
  10. MyBatis学习笔记(2)-MyBatis入门
  11. Google是如何赚钱的 -- 四年工作离别小结
  12. “死”法不重样,一根数据线如何从“机器伴侣”变身电脑杀手?...
  13. java基础总结06-常用api类-Object和Objects
  14. 使用git小乌龟拉取,更新,上传资料文档
  15. 详解Unity的几种移动方式实现
  16. ORACLE函数返回数据或字符串
  17. 带隔离功能的 高速CAN总线收发器 SIT1050ISODUB8 国产
  18. 如何减少万兆以太网线外部串扰
  19. android七牛多张图片上传
  20. 大白话解析Context中的cancelCtx

热门文章

  1. python3.7怎么设置字体大小,python字体大小如何设置
  2. DirectX12(D3D12)基础教程(十九)—— 多实例渲染
  3. Unity-动画系统-Animat
  4. Python经典书籍推荐
  5. NO3:步履蹒跚-完成第一章节学习
  6. css 头像外圈白_如何使用css实现一个圆形头像框
  7. mac的hosts文件位置在哪?
  8. 计算机二级msoffice操作题如何评分,计算机二级MSOffice操作题及答案解析
  9. 一些文字游戏....
  10. 中国历史上十大无名英雄