专栏首页AI科技时讯推荐系列(四):矩阵分解|Matrix Factorization

推荐系列(四):矩阵分解|Matrix Factorization

矩阵分解|Matrix Factorization

在上节讲过,用户和item之间的关系可以用一个关系矩阵表示,而矩阵分解式一个简单的嵌入模型。假设一个用户反馈矩阵:

其中m表示用户的数量,n表示item的数量

  • 用户嵌入矩阵
  • 商品嵌入矩阵

嵌入矩阵可以看作是两个矩阵的点积

矩阵分解一般是用近似的方法表示,而不是使用整个矩阵表示,整个矩阵的元素个数是O(nm)个元素,而嵌入矩阵的元素个数是O((m+n)d),其中d的维数一般远小于m和n的维度。因此,嵌入矩阵能够表示数据的潜在结构,这表明观察到的结果接近于低维子空间,类似于降维。在上述例子中,由于维度太低,以至于这个优点被忽略不计。然而,在现实的推荐系统中,使用矩阵分解的效果可以比学习完整矩阵会更加高效。

选择目标函数

一个常用的目标函数是欧式距离,这里以此为例。为此,最小化所有观察到的item对的误差平方和:

在上述目标函数中,只对观察到的item对(i,j)求和,即用户反馈矩阵中的非零值。然而,只对观察到值进行处理并不是一个好的想法 ,因为矩阵中的所有元素都会对模型产生影响,如果只用观察到的值进行仿真模拟,则该模型无法得出有效的推荐且泛化能力差。一句话总结:在推荐系统中,正样本数据集和负样本数据集都是有用的。

因此会有另外的求和方法,如下所示:

将为观察到的item对的值设置为0, 并对矩阵中所有的值求和,因此求和公式从之前的只对观察到的item对求和之外,还需要对未观察到的item对,求和公式如下所示:

上述问题可以使用奇异值分解(Singular Value Decomposition , SVD)处理,然而SVD不是一个很好的解决方法,这是由于其在实际应用中,矩阵A可能是非常稀疏的,比如在视频或新闻APP中,热门的item可能被更多的用户浏览,导致矩阵很稀疏。稀疏矩阵会导致SVD的求解结果近似为0,导致泛化能力很差。

相反,加权矩阵分解 将目标分解为两个总和:

  • 观察到的条目的总和;
  • 未观察到的条目的总和;

注意,在实际应用中,还需要仔细权衡观察到的item对。例如,热门item或频繁使用(例如,重度用户)可能会主导目标函数。因此,我们可以通过对训练样例进行加权重来考虑item频率来校正模型效果。换句话说,可以通过以下方式替换目标函数:

最小化目标函数

最小化目标函数的常用算法包括:

  • 随机梯度下降(SGD) 是使损失函数最小化的通用方法。
  • 加权交替最小二乘(WALS)专门针对这一特定目标。

目标函数对于U和V都是二次的,其中,随机梯度下降算法是比较常用的模型训练方法,这里不做过多的介绍,而WALS通过随机初始化嵌入,然后交替进行以下工作:

  • 固定U,对V求解
  • 固定V, 对U求解

关于WALS的详细介绍可以看该图:

SGD vs. WALS

SGD和WALS各有自身的优点有缺点:

SGD

  • 非常灵活 :可以使用其他损失函数
  • 可以并行化
  • 收敛较慢
  • 更难处理未观察到的item

WALS

  • 依赖于均方误差
  • 可以并行化
  • 收敛速度比SGD快
  • 更容易处理未观察到的item

本文分享自微信公众号 - AI科技时讯(aiblog_research),作者:海棠

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 被神话的大数据——从大数据(big data)到深度数据(deep data)思维转变

    自从阿法狗战胜人类顶级棋手之后,深度学习、人工智能变得再一次火热起来。有些人认为,深度学习的再一次兴起是源于硬件的提升、数据量的增多以及高效...

    用户3578099
  • 深度学习任务面临非平衡数据问题?试试这个简单方法

    对于数据科学或机器学习研究者而言,当解决任何机器学习问题时,可能面临的最大问题之一就是训练数据不平衡的问题。本文将尝试使用图像分类问题来揭示训练数据中不平衡类别...

    用户3578099
  • 想成为数据科学家?先做到这6点吧!

    世界变化很快,各行各业在大环境的变化也发生着非常大的改动。传统的行业比如会计师、审计师、同声翻译、点餐员等许多职业逐渐被机器所替代。根据相关报道,...

    用户3578099
  • 刚从GitHub克隆下来的项目,微信开发者工具就提示有文件修改的解决方法

    不同操作系统使用的换行符是不一样的。Unix/Linux使用的是LF,Mac后期也采用了LF,但Windows一直使用CRLF【回车(CR, ASCII 13,...

    德顺
  • MyBatis操作Oracle批量插入 ORA-00933: SQL 命令未正确结束

    最近在使用MyBatis操作Oracle数据库的时候,进行批量插入数据,思路是封装一个List集合通过Myabtis

    Arebirth
  • 在ASP.NET MVC中如何应用多个相同类型的ValidationAttribute?

    ASP.NET MVC采用System.ComponentModel.DataAnnotations提供的元数据验证机制对Model实施验证,我们可以在Mode...

    蒋金楠
  • 「小程序JAVA实战」小程序视图之细说列表渲染(14)

    IT故事会
  • 黑科技 | 将重要蛋白送入太空培育,或将找到无解的帕金森病病因

    镁客网
  • Selenium处理下拉列表

    在执行Selenium自动浏览器测试时,很多时候需要处理下拉菜单。下拉菜单通常用于表单中,在节省空间和防止用户在表单中选择错误的选项时非常有用。因此在测试任何网...

    八音弦
  • Bootstrap学习(1.1)A:navbar导航简单理解

    因为自己前端不熟悉,特别是Bootstrap,也只是学习阶段 自己调试,简单记录一些过程

    dodo_lihao

扫码关注云+社区

领取腾讯云代金券