3 显性反馈和隐性反馈
基于矩阵分解的协同过滤的标准方法将用户项矩阵中的条目视为由用户给予该项的明确偏好,例如,给予电影评级的用户。
在许多真实世界的用例中,通常只能访问隐式反馈(例如查看,点击,购买,喜欢,共享等)。
用于spark.ml处理这些数据的方法取自隐式反馈数据集的协作过滤。
本质上,这种方法不是直接对收视率矩阵进行建模,而是将数据视为代表实力的数字观察用户操作(例如点击次数或某人观看电影的累计持续时间)。然后,这些数字与观察到的用户偏好的信心水平相关,而不是给予项目的明确评分。该模型然后试图找出可用于预测用户对物品的预期偏好的潜在因素。
在推荐系统中用户和物品的交互数据分为显性反馈和隐性反馈数据。
在ALS中这两种情况也是被考虑了进来的,分别可以训练如下两种模型:
- 显性反馈模型
val model1 = ALS.train(ratings, rank, numIterations, lambda)
- 隐性反馈模型
val model2 = ALS.trainImplicit(ratings, rank, numIterations, lambda, alpha)
3.1 参数:
numBlocks是为了并行化计算而将用户和项目划分到的块的数量(默认为10)。 rank是模型中潜在因素的数量(默认为10)。 maxIter是要运行的最大迭代次数(默认为10)。 regParam指定ALS中的正则化参数(默认为1.0)。 implicitPrefs指定是使用显式反馈 ALS变体还是使用 隐式反馈数据(默认为false使用显式反馈的手段)。 alpha是一个适用于ALS的隐式反馈变量的参数,该变量管理偏好观察值的 基线置信度(默认值为1.0) nonnegative指定是否对最小二乘使用非负约束(默认为false)。
注意: ALS的基于DataFrame的API目前仅支持用户和项目ID的整数。用户和项目ID列支持其他数字类型,但ID必须在整数值范围内。
从上面可以看到,隐式模型多了一个置信参数,这就涉及到ALS中对于隐式反馈模型的处理方式了——有的文章称为“加权的正则化矩阵分解”,它的损失函数如下:
我们知道,在隐反馈模型中是没有评分的,所以在式子中rui被pui所取代,pui是偏好的表示,仅仅表示用户和物品之间有没有交互,而不表示评分高低或者喜好程度。比如用户和物品之间有交互就让pui等于1,没有就等于0。函数中还有一个cui的项,它用来表示用户偏爱某个商品的置信程度,比如交互次数多的权重就会增加。如果我们用dui来表示交互次数的话,那么就可以把置信程度表示成如下公式:
这里的alpha就是上面提到的置信参数,也是这个模型的超参数之一,需要用交叉验证来得到。
参考
1.《spark机器学习》
2.《spark高级数据分析》
3.Intro to Implicit Matrix Factorization: Classic ALS with Sketchfab Models
https://www.cnblogs.com/mooba/p/6539142.html
————————————————
版权声明:本文为CSDN博主「JavaEdge.」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_33589510/article/details/89888383