协同过滤之ALS算法

ALS 是交替最小二乘 (alternating least squares)的简称。在机器学习的上下文中,ALS 特指使用交替最小二乘求解的一个协同推荐算法。它通过观察到的所有用户给产品的打分,来推断每个用户的喜好并向用户推荐适合的产品。从协同过滤的分类来说,ALS算法属于User-Item CF,也叫做混合CF。它同时考虑了User和Item两个方面。用户和商品的关系,可以抽象为如下的三元组: <User,Item,Rating>
其中,Rating是用户对商品的评分,表征用户对该商品的喜好程度
假设我们有一批用户数据,其中包含m个User和n个Item,则我们定义Rating矩阵Rm×n,其中的元素rui表示第u个User对第i个Item的评分。

在实际使用中,由于n和m的数量都十分巨大,因此R矩阵的规模很容易就会突破1亿项。这时候,传统的矩阵分解方法对于这么大的数据量已经是很难处理了。

另一方面,一个用户也不可能给所有商品评分,因此,R矩阵注定是个稀疏矩阵。矩阵中所缺失的评分,又叫做missing item。

举个例子,我们考虑下面这个包含用户打分的打分矩阵:

这个矩阵的每一行代表一个用户 (u1,u2,...,u7) 、每一列代表一个产品 (v1,v2,,v9) 。用户的打分在 [1,9] 之间。我们只显示观察到的打分。那么问题来了:用户 u5 给产品 v4 的打分大概会是多少?如果我们不添加任何条件的话,打分之间是相互独立的,我们没有任何依据来推断 u5 v4 的打分。所以在这个打分矩阵的基础上,我们需要提出一个限制其自由度的合理假设,使得我们可以通过观察已有打分猜测未知打分。

ALS 的核心就是下面这个假设:打分矩阵是近似低秩的。换句话说,一个的打分矩阵 Am×n 可以用两个小矩阵乘积来近似:

Am×nUm×kVTn×k

一般情况下,k的值远小于n和m的值,从而达到了数据降维的目的。
这样我们就把整个系统的自由度从 O(mn) 一下降到了 O((m+n)k) 。当然,我们也可以随便提一个假设把自由度直接降到1。

我们接下来就聊聊为什么 ALS 的低秩假设是合理的。世上万千事物,人们的喜好各不相同。但描述一个人的喜好经常是在一个抽象的低维空间上进行的,并不需要把其喜欢的事物一一列出。举个例子,我喜欢看略带黑色幽默的警匪电影,那么大家根据这个描述就知道我大概会喜欢昆汀的《低俗小说》、《落水狗》和韦家辉的《一个字头的诞生》。这些电影都符合我对自己喜好的描述,也就是说他们在这个抽象的低维空间的投影和我的喜好相似。再抽象一些,把人们的喜好和电影的特征都投到这个低维空间,一个人的喜好映射到了一个低维向量 ui ,一个电影的特征变成了纬度相同的向量 vj ,那么这个人和这个电影的相似度就可以表述成这两个向量之间的内积 uivTj 。 我们把打分理解成相似度,那么打分矩阵A就可以由用户喜好矩阵和产品特征矩阵的乘积来近似了。

我们大致解释了 ALS 低秩假设的合理性,接下来的问题是怎么选这个抽象的低维空间。这个低维空间要能够有效的区分事物,如果我说我喜欢看 16:9 宽屏的彩色立体声电影,那一定是我真心不想透露我的喜好。但 ALS 是很难从实质上理解“黑色幽默”和“彩色”的区别是什么的,它需要一个更明确的可以量化的目标,这就是重构误差。既然我们的假设是打分矩阵A可以通过来 Um×k Vn×k 近似,那么一个最直接的可以量化的目标就是通过U,V重构A所产生的误差。在 ALS 里,我们使用 Frobenius范数 ||AUVT||2F 来量化重构误差,就是每个元素的重构误差的平方和。这里存在一个问题,我们只观察到部分打分,A 中的大量未知元正是我们想推断的,所以这个重构误差是包含未知数的。解决方案很简单很暴力:就只看对已知打分的重构误差吧。所以 ALS 的优化目标是:

(i,j)R(aijuivTj)2

这里 R 指观察到的 (User, Item)集。

我们把一个协同推荐的问题通过低秩假设成功转变成了一个优化问题。下面要讨论的内容很显然:这个优化问题怎么解?其实答案已经在 ALS 的名字里给出——交替最小二乘。ALS 的目标函数不是凸的,而且变量互相耦合在一起,所以它并不算好解。但如果我们把用户特征矩阵 U 和产品特征矩阵 V 固定其一,这个问题立刻变成了一个凸的而且可拆分的问题。比如我们固定 U ,那么目标函数就可以写成 j(i,j)R(aijuivTj)2 。其中关于每个产品特征的部分 vj 是独立的,也就是说固定U求我们只需要最小化 (i,j)R(aijuivTj)2 就好了,这个问题就是经典的最小二乘问题。所谓“交替”,就是指我们先随机生成然后固定它求解,再固定求解,这样交替进行下去。因为每步迭代都会降低重构误差,并且误差是有下界的,所以 ALS 一定会收敛。但由于问题是非凸的,ALS 并不保证会收敛到全局最优解。但在实际应用中,ALS 对初始点不是很敏感,是不是全局最优解造成的影响并不大。

隐式反馈

用户给商品评分是个非常简单粗暴的用户行为。在实际的电商网站中,还有大量的用户行为,同样能够间接反映用户的喜好,比如用户的购买记录、搜索关键字,甚至是鼠标的移动。我们将这些间接用户行为称之为隐式反馈(implicit feedback),以区别于评分这样的显式反馈(explicit feedback)。

隐式反馈有以下几个特点:

1.没有负面反馈(negative feedback)。用户一般会直接忽略不喜欢的商品,而不是给予负面评价。

2.隐式反馈包含大量噪声。比如,电视机在某一时间播放某一节目,然而用户已经睡着了,或者忘了换台。

3.显式反馈表现的是用户的喜好(preference),而隐式反馈表现的是用户的信任(confidence)。比如用户最喜欢的一般是电影,但观看时间最长的却是连续剧。大米购买的比较频繁,量也大,但未必是用户最想吃的食物。

4.隐式反馈非常难以量化。

参考:
http://blog.csdn.net/u010670689/article/details/73611884
http://www.dataguru.cn/article-7049-1.html

你可能感兴趣的:(机器学习)