前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >矩阵分解如何解决隐式反馈(预测用户行为)

矩阵分解如何解决隐式反馈(预测用户行为)

作者头像
abs_zero
发布2018-07-25 09:52:58
2.5K0
发布2018-07-25 09:52:58
举报
文章被收录于专栏:AI派

推荐阅读时间:10min~12min 主题:使用矩阵分解预测用户行为

简单回归下矩阵分解,矩阵分解要做的事情就是将用户评分矩阵分解为两个矩阵,一个矩阵表示用户偏好的隐因子向量,另一个矩阵表示物品主题的隐因子向量。矩阵分解的关键就是求解分解的两个矩阵。普通的矩阵分解只能解决用户的显式反馈,简单来说就是用户评分数据,但现实中推荐系统更多的是预测用户行为,如何使用矩阵分解来预测用户行为呢?

矩阵分解回顾

矩阵分解针对每一个用户和物品生成一个隐因子向量。

然后最小化以下损失函数来求解:

交替最小二乘原理 (ALS)

交替最小二乘的核心是交替,矩阵分解需要找到两个矩阵 P 和 Q,让它们相乘后约等于原矩阵 R:

由于 P 和 Q 都是未知的,如果知道其中一个,求解另一个会非常方便,比如如果知道了 Q,那么 P 就可以这样算:

反之知道了 P 再求 Q 也一样。

整个过程如下:

  1. 初始化随机矩阵 Q 里面的元素值;
  2. 把 Q 矩阵当做已知的,直接用线性代数的方法求得矩阵 P;
  3. 得到了矩阵 P 后,把 P 当做已知的,按照相同的方式求解矩阵 Q;
  4. 上面两个过程交替进行,一直到误差可以接受为止。

隐式反馈

如何将矩阵分解从解决评分预测问题转向解决预测行为上来呢?通过使用加权交替最小二乘法(weighted alternating least squares)可以解决这个问题。

这种方法认为如果用户与物品之间没有隐式反馈,则认为评分为0,如果有至少一次隐式反馈,则认为评分是1,反馈的次数可以用于衡量权重(置信度)。这样目标函数为下面的公式:

其中,Cui 为权重。

其中,阿尔法是一个超参数,需要自己调整,C 表示实际的次数。

One Class 问题

在预测用户行为(隐式反馈)时,大部分只有用户正向选择行为的记录(正样本),这类问题即为One Class 问题,即单类问题。例如我们用0-1矩阵来表示这类问题,1的解释即为用户喜欢该物品,但是0却有两种原因来解释:一是用户没有看到该物品,但是用户喜欢;二是用户已经浏览过了但是不感兴趣。

要解决这个问题就是如何填充这些缺失值,也就是如何收集负样本,在使用加权交替最小二乘法时,将所有的没有隐式反馈的情况(缺失值)都认为是0,这样做有很大的问题,前面已经说过了,设置为0也分为两种情况:一种是用户没有看到该物品,另一种是用户看到了但是不感兴趣。所以全部设为0是有问题的,此外,如果全部设为0,那矩阵分解也就没有意义了,因为矩阵分解要做的事情就是填充这些缺失值。

那么该如何合理填充这些缺失值呢?有以下几种方法:

  1. 均匀采样,即把所有的缺失数据看作负样本,以相同的概率进行抽样。
  2. 偏重用户采样,即活跃度用户的负样本要多一点,对活跃用户来说,他没有产生行为的物品将会以更高的概率选作负样本。
  3. 偏重物品采样,即热门物品的负样本要多一点,对热门物品来说,曝光机会多,如果用户对它没有行为,则高概率是负样本。

很明显,第二种和第三种相对靠谱点。

总结

通常矩阵分解只能用来解决用户的显示反馈问题(评分问题),针对想要解决用户的隐式反馈,可以通过使用加权交替最小二乘法来解决。在解决隐式反馈问题时,会同时引入一个新的问题:One Class。解决 One Class 的关键就是如何采集负样本。

往期精彩回顾

BAT机器学习/深度学习面试300题

Numpy 精品系列教程汇总(你值得拥有)

一文读懂二元分类模型评估指标

矩阵分解之SVD和SVD++

作者:1or0,脑洞大开(www.naodongopen.com)签约作者,专注于机器学习研究。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI派 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 矩阵分解回顾
  • 交替最小二乘原理 (ALS)
  • 隐式反馈
  • One Class 问题
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档