文章目录

  • 交替最小二乘推荐算法

交替最小二乘推荐算法

ALS(Alternating Least Square),交替最小二乘法。在机器学习中,特指使用最小二乘法的一种协同推荐算法。
如下图所示,u表示用户,v表示商品,用户给商品打分,但是并不是每一个用户都会给每一种商品打分。比如用户u6就没有给商品v3打分,需要我们推断出来,这就是机器学习的任务。

注意:虽然这个表在上图看起来很小,实际上这个表是很大的,行列一般以万/十万/百万/千万计数。

由于并不是每个用户给每种商品都打了分,可以假设ALS矩阵是低秩的,即一个mn的矩阵,是由mk和k*n两个矩阵相乘得到的,其中k<<m,n

这种假设是合理的,因为用户和商品都包含了一些低维度的隐藏特征,比如我们只要知道某个人喜欢碳酸饮料,就可以推断出他喜欢百世可乐、可口可乐、芬达,而不需要明确指出他喜欢这三种饮料。这里的碳酸饮料就相当于一个隐藏特征。上面的公式中,Um×k表示用户对隐藏特征的偏好,Vk×n表示产品包含隐藏特征的程度。这个k就是商品Product的潜在因素,用来解释数据中的交互关系。

注意:由于k的值很小,所以这种分解算法只能是一种近似值,并不是绝对的上述说的等式

原始的矩阵是低秩的,也就是稀疏的,但UV的乘积是却稠密的,即该矩阵存在较少的非0元素。因此,该约等式只是一种近似,原始矩阵大量元素是缺失的(因为缺失,默认为0,但可能实际上不为0),而算法为原始矩阵补全了大部分缺失值。从这个角度来看,矩阵分解的算法有时候称为矩阵补全算法。

第三次强调了,UV的乘积只是尽可能的逼近A,用数学的话来讲就是无限趋近于A。怎么求解呢?ALS算法呼之欲出!
首先我们简写前面的公式为下:
A = X T Y A=X^{T}Y A=XTY

不幸的是,上述的 A = X T Y A=X^{T}Y A=XTY 通常没有解,因为 X T Y X^{T}Y XTY 通常不够大!也就是说,我们找到的分解矩阵X和Y的阶太小了无法完美的表示A。其实这不完全是坏事,因为A归根到底只是现实中的一个微小样本,它只是一次观察,而且是很稀疏的观察。就比如拼图里,很多拼板都掉了,虽然拼图最后的图样是一只猫,但是手上的拼板太少的时候,就很难看到正确的图案。

所以,另一个由上述公式推导化为:
A i Y ( Y T Y ) − 1 = X i A_{i}Y(Y^{T}Y)^{-1}=X_{i} Ai​Y(YTY)−1=Xi​
这个公式如何理解呢?
首先A是已知的,要求解矩阵 X X X和矩阵 Y Y Y。那么根据上述公式,只需要知道一个另一个通过公式推导也是能够知道的。
比如知道矩阵 Y Y Y,那么,因为 X X X的第 i i i行是根据 A A A的第 i i i行和 Y Y Y的函数得到的,所以只需要根据上述公式,一行一行求出 X X X即可。
要想两边精确相等是不可能的,因此,实际的目的是最小化的 ∣ A i Y ( Y T Y ) − 1 − X i ∣ |A_{i}Y(Y^{T}Y)^{-1}-X_{i}| ∣Ai​Y(YTY)−1−Xi​∣ ,或者是最小的矩阵平方误差,这也是“最小二乘”的由来。


实际上,在编码中,虽然公式中说明了行向量的计算方法,但是实践中从来不会对矩阵求逆。我们一般会借助QR分解之类的方法,更快更直接的计算。
QR分解是将矩阵分解为一个正交矩阵与上三角矩阵的乘积。用一张图可以形象地表示QR分解:

这其中, 为正交矩阵,,R为上三角矩阵。

详见 https://www.cnblogs.com/AndyJee/p/3846455.html


回归正题:
只要知道一个 Y Y Y,那么我们就能逐行求出 X X X。求出的这个 X X X又可以通过这个公式求出新的 Y Y Y,新的 Y Y Y又可以求出新的 X X X…子子孙孙无穷匮也。这时候,智叟说了一句,愚公你有老婆么?愚公老婆都没有,怎么会有子孙呢?
那么愚公的老婆哪里来呢?即这个 Y Y Y怎么来呢?有小朋友说,我们可以给它new个对象。
嗯,没错,这个 Y Y Y就是人为“瞎编”出来的,并且是随机的。而 X X X是最优化计算出来的,这个 Y Y Y是假的无所谓,我们又可以用计算出来的 X X X计算出新的 Y Y Y。这个过程一直继续, X X X和 Y Y Y都会收敛到一个合适的结果,也就是“交替”一词的来历

ALS算法页可以利用输入数据是稀疏的这一点,可以用简单的线性代数运算最优解,以及数据本身可并行化,这三点解释了Mlib为什么要使用ALS算法, 并且也只有ALS算法作为唯一的一种推荐算法。

One PUNCH Man——交替最小二乘推荐算法相关推荐

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

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

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

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

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

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

  4. 推荐算法的先验算法的连接_数据挖掘专注于先验算法

    推荐算法的先验算法的连接 So here we are diving into the world of data mining this time, let's begin with a small ...

  5. 推荐算法---FM,协同过滤

    文章目录 目录 1.FM算法产生背景 2.FM算法模型 3.FM算法VS其他算法 4.推荐算法总结 目录 1.FM算法产生背景 在传统的线性模型如LR中,每个特征都是独立的,如果需要考虑特征与特征直接 ...

  6. 人工智能AI课 推荐算法详解和实现

    Model-Based 协同过滤算法 随着机器学习技术的逐渐发展与完善,推荐系统也逐渐运用机器学习的思想来进行推荐.将机器学习应用到推荐系统中的方案真是不胜枚举.以下对Model-Based CF算法 ...

  7. 自己动手写一个推荐系统,推荐系统小结,推荐系统:总体介绍、推荐算法、性能比较, 漫谈“推荐系统”, 浅谈矩阵分解在推荐系统中的应用...

    自己动手写一个推荐系统 废话: 最近朋友在学习推荐系统相关,说是实现完整的推荐系统,于是我们三不之一会有一些讨论和推导,想想索性整理出来. 在文中主要以工程中做推荐系统的流程着手,穿插一些经验之谈,并 ...

  8. 02 推荐算法-(01) Model-Based 协同过滤算法

    Model-Based 协同过滤算法 随着机器学习技术的逐渐发展与完善,推荐系统也逐渐运用机器学习的思想来进行推荐.将机器学习应用到推荐系统中的方案真是不胜枚举.以下对Model-Based CF算法 ...

  9. 【推荐系统系列6】ALS推荐算法原理

    ALS算法原理 ALS算法是2008年以来,用的比较多的协同过滤算法.它已经集成到Spark的Mllib库中,使用起来比较方便. 从协同过滤的分类来说,ALS算法属于User-Item CF,也叫做混 ...

最新文章

  1. Spark 把RDD数据保存到hdfs单个文件中,而不是目录
  2. 一道关于 json 和 slice 的题难倒了 80% 的人
  3. matlab提取艾里斑,艾里斑:我不是雀斑
  4. 使用CNN进行情感分类
  5. 类型约束的本质:泛型是不完备类型,只有合乎要求的构造才能正确使用和访问。...
  6. MediaPlayer的错误修复
  7. 如何提升企业的数据挖掘能力
  8. Quartus17.0 + ModelSim - IntelFpga安装及破解
  9. 点击链接时直接在网页中打开word文档
  10. qpython3编辑器手机版下载_QPython3
  11. Hbase Locality
  12. html5 设备管理信息 device
  13. React-mentions 基本使用
  14. 嵌入式三级知识点分类
  15. 一款全新的平面UI套件,专门用于桌面应用程序
  16. 霸占热搜!官方下场发放免单攻略,饿了么营销如何抓住“薅羊毛”心理?
  17. [MicroPython]STM32F407开发板DIY声光控开关
  18. 基恩士读码器HR-101B USB-COM连接读取数据
  19. 【操作系统】第一章 绪论
  20. MySQL建员工表案例

热门文章

  1. 有趣php小程序,5款实用又有趣的微信小程序,每一款都是大家公认的好用!
  2. 细讲C语言结构体(结构体内存对齐你懂了吗?)
  3. java 二维数组排序 sort_js sort 二维数组排序的用法小结
  4. 记账本本 APP 技术支持
  5. QQ文件下载后保存路径
  6. 程序员必读的十本书籍推荐
  7. 含论文基于JAVA零食销售商城【数据库设计、论文、源码、开题报告】
  8. c++析构函数、虚析构函数、纯虚析构函数详解
  9. AutoCADPython 二次开发 栅格图像
  10. python 矩阵操作