推荐阅读时间:10min~12min 主题:使用矩阵分解预测用户行为
简单回归下矩阵分解,矩阵分解要做的事情就是将用户评分矩阵分解为两个矩阵,一个矩阵表示用户偏好的隐因子向量,另一个矩阵表示物品主题的隐因子向量。矩阵分解的关键就是求解分解的两个矩阵。普通的矩阵分解只能解决用户的显式反馈,简单来说就是用户评分数据,但现实中推荐系统更多的是预测用户行为,如何使用矩阵分解来预测用户行为呢?
矩阵分解针对每一个用户和物品生成一个隐因子向量。
然后最小化以下损失函数来求解:
交替最小二乘的核心是交替,矩阵分解需要找到两个矩阵 P 和 Q,让它们相乘后约等于原矩阵 R:
由于 P 和 Q 都是未知的,如果知道其中一个,求解另一个会非常方便,比如如果知道了 Q,那么 P 就可以这样算:
反之知道了 P 再求 Q 也一样。
整个过程如下:
如何将矩阵分解从解决评分预测问题转向解决预测行为上来呢?通过使用加权交替最小二乘法(weighted alternating least squares)可以解决这个问题。
这种方法认为如果用户与物品之间没有隐式反馈,则认为评分为0,如果有至少一次隐式反馈,则认为评分是1,反馈的次数可以用于衡量权重(置信度)。这样目标函数为下面的公式:
其中,Cui 为权重。
其中,阿尔法是一个超参数,需要自己调整,C 表示实际的次数。
在预测用户行为(隐式反馈)时,大部分只有用户正向选择行为的记录(正样本),这类问题即为One Class 问题,即单类问题。例如我们用0-1矩阵来表示这类问题,1的解释即为用户喜欢该物品,但是0却有两种原因来解释:一是用户没有看到该物品,但是用户喜欢;二是用户已经浏览过了但是不感兴趣。
要解决这个问题就是如何填充这些缺失值,也就是如何收集负样本,在使用加权交替最小二乘法时,将所有的没有隐式反馈的情况(缺失值)都认为是0,这样做有很大的问题,前面已经说过了,设置为0也分为两种情况:一种是用户没有看到该物品,另一种是用户看到了但是不感兴趣。所以全部设为0是有问题的,此外,如果全部设为0,那矩阵分解也就没有意义了,因为矩阵分解要做的事情就是填充这些缺失值。
那么该如何合理填充这些缺失值呢?有以下几种方法:
很明显,第二种和第三种相对靠谱点。
通常矩阵分解只能用来解决用户的显示反馈问题(评分问题),针对想要解决用户的隐式反馈,可以通过使用加权交替最小二乘法来解决。在解决隐式反馈问题时,会同时引入一个新的问题:One Class。解决 One Class 的关键就是如何采集负样本。
往期精彩回顾
作者:1or0,脑洞大开(www.naodongopen.com)签约作者,专注于机器学习研究。