矩阵分解funkSVD:该矩阵分解不像是线代中的,他属于伪分解。其主要思想是,用两个m*k和k*n的矩阵代替m*n的矩阵。
推荐系统中矩阵分解算法-funkSVD和ALS因为在推荐系统中,矩阵十分稀疏,分解后的矩阵一般是密集的,且可以通过行列相乘来得到空缺的值。
推荐系统中矩阵分解算法-funkSVD和ALS(其预测的是第u个用户对第i个商品的评分)
其通过机器学习最小化损失函数来得到矩阵,
推荐系统中矩阵分解算法-funkSVD和ALS 通过线性的平方损失降低模型误差,通过正则减少拟合。其学习方式有两种,一种是随机梯度下降,一种是交替最小二乘。
第一种不说,随处可见。第二种是通过
推荐系统中矩阵分解算法-funkSVD和ALS该式子实现的。
我们先随机化一个Q,因为R是那个稀疏矩阵已知,所以能得到P,我们再反过来用PR求Q。直到模型的误差低于一个阈值。
上面的svd是对于评分的算法,还有svd++等对用户,物品做了偏移项。
隐式矩阵分解(最常见)ALS
我们一般的推荐问题不是通过评分推荐,因为评分的产生十分的困难,一般用户没有这个习惯。我们与其预测评分,不如去预测用户行为。如果我们给用户一个页面有十个商品,我们预测到用户会点击哪一个,这不就说明用户喜欢这个。而且基于用户的信息很多。
我们的矩阵由1,0和空缺组成,1表示该用户点击过该商品(即表示用户对它有想法),0表示用户对它没有想法(怎么是没想法呢,我们定义用户知道他却不想了解他。即我们在所有没有点击该商品的用户中抽样,该商品越火热抽取的人越多。因为热门的东西大家应该都知道,而你却没点击他,说明他不感兴趣)
我们要将该矩阵分解。
我们的损失函数是
推荐系统中矩阵分解算法-funkSVD和ALS 对比svd我们多的参数 推荐系统中矩阵分解算法-funkSVD和ALS Rui指的是用户频率,它简单的把没有点击作为负样本比较不合适。Cui是置信度,比如我点击10次当时比只点击一次的喜欢置信度高。
对于学习方法,我们使用加权交替最小二乘法
推荐系统中矩阵分解算法-funkSVD和ALS 推荐系统中矩阵分解算法-funkSVD和ALS初始化Y,我们计算出x,再通过
推荐系统中矩阵分解算法-funkSVD和ALS计算出y。再反复交替,直到小于阈值。
该算法目前在spark上有实现。且sparkml将其作为唯一的推荐系统算法。
网友评论