协同过滤-ALS算法原理

协同过滤-ALS算法原理
一、ALS推荐算法的原理

1.1 矩阵分解
ALS推荐算法是基于矩阵分解的一种方法。先看矩阵分解的含义。

推荐所使用的数据可以抽象成一个[m,n]的矩阵R,R的每一行代表m个用户对所有歌曲的评分,n列代表每个歌曲的对应的得分。从我实际使用情况来讲,R是个“拉长”的矩阵,用户很少,歌曲很多。而且R是个稀疏矩阵,一个用户只是对所有歌曲中的一小部分听过,有评分。通过矩阵分解方法,我可以把这个低秩的矩阵,分解成两个小矩阵的点乘。公式如下:
在这里插入图片描述
举例如下:
评分举例如下
协同过滤-ALS算法原理_第1张图片
我把矩阵分解之后,就变成了下面两个小矩阵。

(用户的特征)
协同过滤-ALS算法原理_第2张图片
(歌曲的特征)

协同过滤-ALS算法原理_第3张图片
分解之后的矩阵,每个用户数据由原来的7维的向量,变成了4维的向量。这种求出的向量作为用户的特征,用在推荐上,被成为隐藏特征或者隐藏因子。

为什么进行矩阵分解呢?因为推荐使用的矩阵不仅是稀疏的而且往往是低秩的。矩阵分解相当于进行了特征提取或者数据的降维。
为了求出两个分解后的矩阵,我可以产生两个维度一样的随机矩阵U和V,点乘之后得到同样m行n列的矩阵R1. 这一步我已经得到两个[m,n]的矩阵,其中一个是反映用户的真实喜好的数据,矩阵R。另一份只是一个近似数据,矩阵R1.我可以找到一个公式来衡量,两个同阶的矩阵的相似程度:
在这里插入图片描述
这个函数是算法的损失函数。我的目的就是让这个函数的值最小化,使得我构造的矩阵能够最接近原始矩阵。到这一步,我的问题已经变成了一个工程优化问题,而求这个函数最小化的方法,前人已经为了我造了很多很多,比如ALS算法,梯度下降法,遗传算法,进化算法等等。

1.2 ALS算法

ALS是交替最小二乘法。先看下最小二乘法的含义。

假如有一些实验数据,格式是(x1,y1),(x1,y1),(x1,y1)…,
在这里插入图片描述
然后需要求一条直线使得,这条直线能够大致经过这些点。那么求这个直线的方法就是最小二乘法,背后的数学方法就是二元函数求极值的方法。把一个变量固定,然后对另一个变量求导数后,求得极值。然后再固定另一个变量,再求得极值。我仿照最小二乘法,首先固定用户矩阵,求歌曲矩阵的极值。然后固定歌曲矩阵,求得用户矩阵的极值。交替使用这两种方法,可以得到损失函数的最小值。

二、ALS推荐算法的应用

1、接收给用户歌曲推荐的请求。

2、获取用户的历史记录(包括用户听歌历史、收藏的歌曲、分享的歌曲)。

3、根据历史记录中的歌曲获取相似歌曲。

4、权重排序。

5、返回结果。

当然,实际运用时我还没有能力像这篇博客的作者一样完整、准确地写出ALS的算法,而是调用Spark的库。而且还要考虑长尾效应、无效歌曲、无效用户等问题。但是原理我还是要搞懂的。

你可能感兴趣的:(推荐系统)