推荐系统中矩阵分解算法-funkSVD和ALS

矩阵分解funkSVD:该矩阵分解不像是线代中的,他属于伪分解。其主要思想是,用两个m*k和k*n的矩阵代替m*n的矩阵。

推荐系统中矩阵分解算法-funkSVD和ALS_第1张图片
图片发自App


因为在推荐系统中,矩阵十分稀疏,分解后的矩阵一般是密集的,且可以通过行列相乘来得到空缺的值。

推荐系统中矩阵分解算法-funkSVD和ALS_第2张图片
图片发自App

(其预测的是第u个用户对第i个商品的评分)

其通过机器学习最小化损失函数来得到矩阵,

推荐系统中矩阵分解算法-funkSVD和ALS_第3张图片
图片发自App
通过线性的平方损失降低模型误差,通过正则减少拟合。

其学习方式有两种,一种是随机梯度下降,一种是交替最小二乘。

第一种不说,随处可见。第二种是通过

推荐系统中矩阵分解算法-funkSVD和ALS_第4张图片
图片发自App

该式子实现的。

我们先随机化一个Q,因为R是那个稀疏矩阵已知,所以能得到P,我们再反过来用PR求Q。直到模型的误差低于一个阈值。

上面的svd是对于评分的算法,还有svd++等对用户,物品做了偏移项。


隐式矩阵分解(最常见)ALS

我们一般的推荐问题不是通过评分推荐,因为评分的产生十分的困难,一般用户没有这个习惯。我们与其预测评分,不如去预测用户行为。如果我们给用户一个页面有十个商品,我们预测到用户会点击哪一个,这不就说明用户喜欢这个。而且基于用户的信息很多。

我们的矩阵由1,0和空缺组成,1表示该用户点击过该商品(即表示用户对它有想法),0表示用户对它没有想法(怎么是没想法呢,我们定义用户知道他却不想了解他。即我们在所有没有点击该商品的用户中抽样,该商品越火热抽取的人越多。因为热门的东西大家应该都知道,而你却没点击他,说明他不感兴趣)

我们要将该矩阵分解。

我们的损失函数是

推荐系统中矩阵分解算法-funkSVD和ALS_第5张图片
图片发自App
对比svd我们多的参数
推荐系统中矩阵分解算法-funkSVD和ALS_第6张图片
图片发自App
Rui指的是用户频率,它简单的把没有点击作为负样本比较不合适。

Cui是置信度,比如我点击10次当时比只点击一次的喜欢置信度高。

对于学习方法,我们使用加权交替最小二乘法

推荐系统中矩阵分解算法-funkSVD和ALS_第7张图片
图片发自App


推荐系统中矩阵分解算法-funkSVD和ALS_第8张图片
图片发自App

初始化Y,我们计算出x,再通过

推荐系统中矩阵分解算法-funkSVD和ALS_第9张图片
图片发自App

计算出y。再反复交替,直到小于阈值。

该算法目前在spark上有实现。且sparkml将其作为唯一的推荐系统算法。

你可能感兴趣的:(推荐系统中矩阵分解算法-funkSVD和ALS)