如何用ALS算法实现用户音乐打分预测
如何用ALS算法实现用户音乐打分预测,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
ALS算法介绍
ALS算法是基于模型的推荐算法,基本思想是对稀疏矩阵进行模型分解,评估出缺失项的值,以此来得到一个基本的训练模型。然后依照此模型可以针对新的用户和物品数据进行评估。ALS是采用交替的最小二乘法来算出缺失项的,交替的最小二乘法是在最小二乘法的基础上发展而来的。
从协同过滤的分类来说,ALS算法属于User-Item CF,也叫做混合CF,它同时考虑了User和Item两个方面。
我们通过音乐打分这个案例介绍下交替最小二乘法的原理,首先拿到的原始数据是每个听众对每首歌的评分矩阵A,这个评分可能是非常稀疏的,因为不是每个用户都听过所有的歌,也不是每个用户都会对每首歌评分。
ALS矩阵分解会把矩阵A分解成两个矩阵的相乘,分别是X矩阵和Y矩阵,
矩阵A=矩阵X和矩阵Y的转秩的乘积
x的列表示和Y的横表示可以称之为ALS中的因子,这个因子是有隐含定义的,这里假设有3个因子,分别是性格、教育程度、爱好。A矩阵经过ALS分解出的X、Y矩阵可以分别表示成:
(上图为x矩阵)
(上图为Y矩阵)
数据经过这样的拆解就很容易做用户对音乐的评分预测。比如有听众6,他从没听过"红豆"这首歌,但是我们可以拿到听众6在矩阵分解中X矩阵的向量M,这时候只有把向量M和"红豆"在Y矩阵中的对应向量N相乘,就能预测出听众6对于"红豆"这首歌的评分。
ALS在PAI实验
现在在PAI上面对ALS算法案例进行实验。整体流程只需要包含输入数据源和ALS矩阵分解组件即可。本案例已经集成于PAI-STUDIO首页模板:
创建后如图:
1.数据源
输入数据源包含4个字段
User:用户ID
Item:音乐ID
score:user对item的评分
2.ALS矩阵分解
需要设置3个对应字段,
参数名称 | 参数描述 | 取值范围 | 是否必选,默认值 |
---|---|---|---|
userColName | user列名 | 列的类型必须是bigint,可以不连续编号 | 必选 |
itemColName | item列名 | 列的类型必须是bigint,可以不连续编号 | 必选 |
rateColName | 打分列名 | 列的类型必须是数值类型 | 必选 |
numFactors | 因子数 | 正整数 | 可选,默认值100 |
numIter | 迭代数 | 正整数 | 可选,默认值10 |
lambda | 正则化系数 | 浮点数 | 可选,默认值0.1 |
implicitPref | 是否采用隐式偏好模型 | 布尔型 | 可选,默认值false |
alpha | 隐式偏好系数 | 浮点数,大于0 | 可选,默认值40 |
3.结果分析
本案例中会输出2张表,对应ALS算法介绍中说的X矩阵和Y矩阵。
X矩阵表如图:
Y矩阵表如图:
比如要预测user1对音乐item994556636的评分,只要将下方两个向量相乘即可
User1:[-0.14220297,0.8327106,0.5352268,0.6336995,1.2326205,0.7112976,0.9794858,0.8489773,0.330319,0.7426911]
item994556636:[0.71699333,0.5847747,0.96564907,0.36637592,0.77271074,0.52454436,0.69028413,0.2341857,0.73444265,0.8352135]
看完上述内容,你们掌握如何用ALS算法实现用户音乐打分预测的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!