机器学习系列19-矩阵分解&推荐系统初步

Matrix Factorization

如果本文对你有帮助,请给我的github打个star叭,上面附有全系列目录和内容!
注:更多优质内容欢迎关注我的微信公众号“Sakura的知识库”:
在这里插入图片描述

本文介绍矩阵分解思想及其在推荐系统上的应用,分析用户背后的隐藏属性并预测其行为

Introduction

接下来介绍矩阵分解的思想:有时候存在两种object,它们之间会受到某种共同潜在因素(latent factor)的操控,如果我们找出这些潜在因素,就可以对用户的行为进行预测,这也是推荐系统常用的方法之一

假设我们现在去调查每个人购买的公仔数目,ABCDE代表5个人,每个人或者每个公仔实际上都是有着傲娇的属性或天然呆的属性

我们可以用vector去描述人和公仔的属性,如果某个人的属性和某个公仔的属性是match的,即他们背后的vector很像(内积值很大),这个人就会偏向于拥有更多这种类型的公仔

matrix expression

但是,我们没有办法直接观察某个人背后这些潜在的属性,也不会有人在意一个肥宅心里想的是什么,我们同样也没有办法直接得到动漫人物背后的属性;我们目前有的,只是动漫人物和人之间的关系,即每个人已购买的公仔数目,我们要通过这个关系去推测出动漫人物与人背后的潜在因素(latent factor)

我们可以把每个人的属性用vector r A r^A rA r B r^B rB r C r^C rC r D r^D rD r E r^E rE来表示,而动漫人物的属性则用vector r 1 r^1 r1 r 2 r^2 r2 r 3 r^3 r3 r 4 r^4 r4来表示,购买的公仔数目可以被看成是matrix X X X,对 X X X来说,行数为人数,列数为动漫角色的数目

做一个假设:matrix X X X里的每个element,都是属于人的vector和属于动漫角色的vector的内积

比如, r A ⋅ r 1 ≈ 5 r^A\cdot r^1≈5 rAr15,表示 r A r^A rA r 1 r^1 r1的属性比较贴近

接下来就用下图所示的矩阵相乘的方式来表示这样的关系,其中 K K K为latent factor的数量,这是未知的,需要你自己去调整选择

我们要找一组 r A r^A rA~ r E r^E rE r 1 r^1 r1~ r 4 r^4 r4,使得右侧两个矩阵相乘的结果与左侧的matrix X X X越接近越好,可以使用SVD的方法求解

prediction

但有时候,部分的information可能是会missing的,这时候就难以用SVD精确描述,但我们可以使用梯度下降的方法求解,loss function如下:
L = ∑ ( i , j ) ( r i ⋅ r j − n i j ) 2 L=\sum\limits_{(i,j)}(r^i\cdot r^j-n_{ij})^2 L=(i,j)(rirjnij)2
其中 r i r^i ri值的是人背后的latent factor, r j r^j rj指的是动漫角色背后的latent factor,我们要让这两个vector的内积与实际购买该公仔的数量 n i j n_{ij} nij越接近越好,这个方法的关键之处在于,计算上式时,可以跳过missing的数据,最终通过gradient descent求得 r i r^i ri r j r^j rj的值

假设latent factor的数目等于2,则人的属性 r i r^i ri和动漫角色的属性 r j r^j rj都是2维的vector,这里实际进行计算后,把属性中较大值标注出来,可以发现:

  • 人:A、B属于同一组属性,C、D、E属于同一组属性

  • 动漫角色:1、2属于同一组属性,3、4属于同一组属性

  • 结合动漫角色,可以分析出动漫角色的第一个维度是天然呆属性,第二个维度是傲娇属性

  • 接下来就可以预测未知的值,只需要将人和动漫角色的vector做内积即可

这也是推荐系统的常用方法

more about matrix factorization

实际上除了人和动漫角色的属性之外,可能还存在其他因素操控购买数量这一数值,因此我们可以将式子更精确地改写为:
r A ⋅ r 1 + b A + b 1 ≈ 5 r^A\cdot r^1+b_A+b_1≈5 rAr1+bA+b15
其中 b A b_A bA表示A这个人本身有多喜欢买公仔, b 1 b_1 b1则表示这个动漫角色本身有多让人想要购买,这些内容是跟属性vector无关的,此时loss function被改写为:
L = ∑ ( i , j ) ( r i ⋅ r j + b i + b j − n i j ) 2 L=\sum\limits_{(i,j)}(r^i\cdot r^j+b_i+b_j-n_{ij})^2 L=(i,j)(rirj+bi+bjnij)2
当然你也可以加上一些regularization去对结果做约束

有关Matrix Factorization和推荐系统更多内容的介绍,可以参考paper(公众号回复“推荐系统”获取pdf ):Matrix Factorization Techniques For Recommender Systems

for Topic Analysis

如果把matrix factorization的方法用在topic analysis上,就叫做LSA(Latent semantic analysis),潜在语义分析

我们只需要把动漫人物换成文章,人换成词汇,表中的值从购买数量换成词频即可,我们可以用词汇的重要性给词频加权,在各种文章中出现次数越多的词汇越不重要,出现次数越少则越重要

这个场景下找出的latent factor可能会是主题(topic),比如某个词汇或某个文档有多少比例是偏向于财经主题、政治主题…

“GitAds”/

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值