最基本的问题,以用户电影评分为例,也就是这个用户-电影矩阵.

表中是用户多电影的评分,但评分有缺失,因为用户不可能对所有电影作出评价.

那么推荐问题就是给用户合理推荐一个没看过的电影,合理是指,预测用户应该对这部电影评分较高.然后这个问题就变成了矩阵补全,也就是填充表中的问号.

低秩矩阵分解

矩阵的补全有无数种可能,所以如果不对用户-电影矩阵(记为Y)的性质作出一定假设,那这个恢复问题就不可能完成.所以首先作出的假设是Y是低秩的.如果Y是低秩的,那么Y就能够由两个较小的矩阵线性组合而来.即:

假设Y矩阵维度\(n_m \times n_u\),即有\(n_m\)部电影和\(n_u\)个用户,P的维度是\(n_m \times K\), Q的维度是\(n_u \times K\),K是特征的维度,也就是Y的秩.上式如果画出来就是这样.

这表示了一个电影对应一个K维特征,一个用户对应了K个参数,反映出有用户对电影的K维特征的喜好程度.然后每个评分都可以看做是用户参数和电影特征的点积.试想如果我们得到了P和Q两个矩阵,我们就能对Y矩阵中的缺失值进行预测.

以上问题可以用梯度下降来求解,因为我们可以构造误差函数,并能计算偏导.

这个误差函数的意义是对于Y矩阵中存在的值,用P和Q乘积计算出预测值,让它们之间误差最小.当然,还加入了针对P和Q的L2正则项.这个误差函数对P和Q中每一项的偏导如下:

然后迭代求解即可.

协同过滤

这个算法本质上和低秩矩阵分解一样,但它里面的K维特征具有现实意义.一个电影的K维特征,就是它对应于K种电影风格的分量,比如只有两种风格的时候:

设一个电影的k维特征向量为\(x = [x_1, x_2,…, x_k]\),那么就应该存在一个用户参数向量\(\theta = [\theta_1,\theta_1,…,\theta_k,]\).这实际上和矩阵分解里的P和Q意义相同.

但实际情况是,这个电影特征无法得到,还是要通过迭代算出来.针对电影特征和用户参数,对应了两个代价函数.

再分别求导,用梯度下降迭代至收敛即可.

核范数矩阵补全

这个方法的来源是一帮搞图像的科学家.图像恢复里经常有这种问题,比如图像被随机采样,试图从随机采样的图像恢复出原图.

首先它将问题定义为,认为用户-电影矩阵是由一个完全矩阵A下采样而来,而且还加上了噪音.L就是那个下采样变换.

然后问题的解就是要求秩最小,如下:

但直接去优化秩太困难了,于是换成了核范数,核范数就是矩阵的奇异值之和.

总结

这三种方法很类似,就是做出了Y矩阵低秩的假设.

前几天看了一篇文章推荐系统的那点事,觉得这些算法其实没多大用,虽然解决的是推荐系统的基本问题,但现实情况不是这么简单.

低秩矩阵补全算法matlab实现,推荐系统中的矩阵补全算法相关推荐

  1. matlab mex 矩阵,如何从mex函数访问matlab结构字段中的矩阵?

    如何从mex函数访问matlab结构字段中的矩阵? 我试图弄清楚如何从mex函数访问存储在matlab结构中的字段中的矩阵. 那真是漫长的缠绕...让我解释一下: 我有一个定义如下的matlab结构: ...

  2. 推荐系统中的矩阵分解技术

    推荐系统中的矩阵分解技术 本文翻译自Koren Y, Bell R, Volinsky C. Matrix Factorization Techniques for Recommender Syste ...

  3. 推荐系统中的EE问题——Bandit算法

    文章目录 先验知识 朴素Bandit算法 Epsilon-Greedy算法 汤普森采样 UCB算法 LinUCB Exploration and Exploitation(EE问题,探索与开发)是推荐 ...

  4. Python+Django+Mysql开发在线购物推荐网 协同过滤推荐算法在购物网站中的运用 个性化推荐算法开发 基于用户、物品的协同过滤推荐算法 机器学习、分布式大数据、人工智能开发

    Python+Django+Mysql开发在线购物推荐网 协同过滤推荐算法在购物网站中的运用 个性化推荐算法开发 基于用户.物品的协同过滤推荐算法 机器学习.分布式大数据.人工智能开发 ShopRec ...

  5. 在线音乐推荐网 Python+Django+Mysql开发技术 基于用户、物品的协同过滤推荐算法 个性化音乐推荐系统 音乐网站+协同过滤推荐算法 机器学习、分布式大数据、人工智能开发

    在线音乐推荐网 Python+Django+Mysql开发技术 基于用户.物品的协同过滤推荐算法 个性化音乐推荐系统 音乐网站+协同过滤推荐算法 机器学习.分布式大数据.人工智能开发 MusicRec ...

  6. simca算法 matlab,SIMCA分类法中主成分分析算法探究.doc

    SIMCA分类法中主成分分析算法探究 SIMCA分类法中主成分分析算法探究 摘要:模式识别是研究用计算机模拟人的识别能力,对不同类型形式的数据进行描述.分类.识别等有关的理论和方法.SIMCA方法是基 ...

  7. java matlab 矩阵_如何在MATLAB中将函数应用于矩阵的每一行/列?

    你可能想要更模糊的Matlab函数bsxfun . 从Matlab文档中,bsxfun "applies the element-by-element binary operation sp ...

  8. MATLAB中出现 索引超出矩阵维度,程序用matlab运行显示索引超出矩阵维度,请问怎么...

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:程序用matlab运行显示索引超出矩阵维度,请问怎么改?回答:用size函数可以求矩阵维数,用reshape可以改变数据维数. 如: ...

  9. burg算法matlab求功率谱,基于AR模型的Burg算法功率谱估计.doc

    基于AR模型的Burg算法功率谱估计 三种功率谱估计方法性能研究 1.前言: 我们已经知道一个随机信号本身的傅里叶变换并不存在,因此无法像确定性信号一样用数字表达式来精确表达它,而只能用各种统计平均量 ...

最新文章

  1. Log4j每天、每小时、每分钟定时生成日志文件
  2. 把2018年所有踩过的坑都记在这里。
  3. linux7 开ftp,linux centos 7 开启 ftp
  4. MYSQL百万级数据,如何优化
  5. Java volatile关键字原理解剖
  6. 循环自增_大学C语言—循环结构及应用
  7. 别光啃书了,这才是最前沿的机器学习(ML)技术路线!
  8. 基于JAVA+SpringMVC+Mybatis+MYSQL的家乡美管理系统
  9. 吴恩达机器学习学习笔记第八章:正则化
  10. unity Scene窗口的任意比例放大和缩小
  11. YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5的发展(1)
  12. 企鹅号重磅宣布平台三大升级 推出全新TOP计划助力内容精品化
  13. 大白菜超级U盘启动盘制作
  14. JAVA调用SO库的示意图
  15. 7个实用的Python自动化测试框架
  16. FastDDS Getting Started (1) 运行HelloWorldExample并创建Fast DDS publisher
  17. C++数据结构——小明的通讯录(哈希表线性探测法)
  18. 【Math ML】Lagrange Multipliers 拉格朗日乘数
  19. 基于css简易实现头像更换动画效果
  20. cuda10.2安装失败方案汇总

热门文章

  1. 需要符合互联网时代需求的《飞秋》
  2. Transact-SQL数据类型(文本/图形/日期和时间/货币/特定类型)
  3. 最美的十大精典爱情句子
  4. 在Visual C++中用ADO进行数据库编程(中)
  5. android tcp ip modem ppp gprs,为什么GPRS调制解调器提供嵌入式TCP/IP协议栈
  6. max无法创建新的堆栈防护页面_交互设计师,新媒体艺术家们请注意:2019MaxMSP必读书单来袭!...
  7. Science | 从结构生物学的角度理解人类mRNA剪接体分支位点的识别
  8. 文章用图的修改和排版 (一)
  9. html中隐式转换成数字,关于 JS 类型隐式转换的完整总结
  10. linux打开pythonshall,linux系统shell脚本后台运行python程序