美文网首页
(9)推荐算法

(9)推荐算法

作者: 顽皮的石头7788121 | 来源:发表于2019-03-07 18:50 被阅读0次

    (1)ALS交替最小二乘算法

                ALS指使用交替最小二乘法求解的协同过滤算法。通过观察到的所有用户给产品打分,来推断每个用户的喜好并向用户推荐合适的产品。

                具体推荐是 通过用户评分矩阵来实现的,用户评分矩阵每一行代表一个用户,每一列代表一个产品,每一个元素代表一个用户对某一种产品的打分。用户评分矩阵通过用户特征矩阵和物品特征矩阵得到。A= U*V。通过U和V来近似A。这样算法的自由度就从O(mn)变为了O((m+n)k)

                算法的目标使得U*A尽可能近似A。则算法的优化目标就是||A-UV||_{F}^2-》min\sum_{i,(i,j)\in R}  (a_{ij}-u_{i} v_{j}  ).F 代表Frobenius范数。

                最小化每一个元素和 重构之间的误差平方和。该优化问题就是采用ALS来实现。

                ALS的目标函数不是凸的,而且变量相互耦合。如果固定用户特征矩阵U或者产品特征矩阵V就可以使问题变得简单。原问题就转换为凸函数且可拆分。就可以使用最小二乘法求解。

                这里的交替最小二乘法就是先随机生成U,然后固定U去求解V;在固定V去求解U,这样一直交替下去,直到收敛。但由于问题本质上是非凸的,因此ALS不保证最终可以得到全局最优解。在实际使用中,ALS对初始点不是很敏感,是不是全局最优解影响不大。

                在使用MLlib中,算法最重要的是通过合理的数据分区和RDD缓存来减少数据交换,并设计良好的数据结构来进行结构优化,优化内存使用。

                在实际训练时候,类方法为ALS。输入数据为一个三元元组{用户id,物品id,评分}

                val model = ALS.train(data,rank,numIterations,lambda);其中rank代表特征数量,numIterations代表迭代次数;lambda代表正则化因子,0.01;

                预测时 val predictions = model.predict(userProducts).map{

                            case Rating(user,product,rate)=>  #这里的rate 只有一个值 原始值

                            ((user,product),rate)  #这里的rate有两个值 原始值和预测值

                }

                而userProduct为随机生成的(用户id,产品id)

    (2)协同过滤推荐算法

                协同过滤算法是通过分析用户兴趣,在用户群中找到指定用户的相似用户,综合这些相似用户对某一物品的评价,形成指定用户对某一物品的预测。

                首先是收集用户偏好。通常通过评分,投票,转发,保存书签,购买,点击流以及页面停留时间等。然后将这些行为分组加权减噪和归一化。然后通过计算相似度对用户分组。相似度可以通过欧式距离、皮尔逊相关系数、Jacccard距离(文档类数据)等得到。

                而推荐部分也可以基于两个角度,根据用户分组和物品分组。

    相关文章

      网友评论

          本文标题:(9)推荐算法

          本文链接:https://www.haomeiwen.com/subject/ysicpqtx.html