Spark ML 协同过滤隐式反馈与类计数数据
Posted
技术标签:
【中文标题】Spark ML 协同过滤隐式反馈与类计数数据【英文标题】:Spark ML collaborative filtering implicit feedback with count-like data 【发布时间】:2017-03-23 13:58:50 【问题描述】:我想通过 pyspark 使用网页访问数据在 spark 2.1.0 上运行 spark.ml.recommendation als。我有包含用户 ID、页面 ID 和计数的***数据。数据由 100000 行组成。以下是我的数据规格:
+-------+------------------+
|summary| user-id|
+-------+------------------+
| count| 100000|
| mean| 24542.75736|
| stddev|21848.264794583836|
| min| 0|
| max| 68488|
+-------+------------------+
+-------+------------------+
|summary| page-id|
+-------+------------------+
| count| 100000|
| mean| 257.55426|
| stddev|265.56649346534084|
| min| 0|
| max| 1317|
+-------+------------------+
+-------+------------------+
|summary| cnt|
+-------+------------------+
| count| 100000|
| mean| 412.4471|
| stddev|4269.7557065972205|
| min| 11.0|
| max| 309268.0|
+-------+------------------+
我已将数据 80/20 分别用于训练和测试,并尝试在我的数据上运行 als,但结果为 NaN。然后我找到了一个解决方法并让它工作。之后,我尝试根据我的数据计算 rmse,结果在 3000-4000 左右,并带有一些参数组合。
我已经阅读了一些书籍、文章并观看了一些视频教程,但其中许多内容与我所看到的基于评级的 movielens 数据集有关,并且对我的问题没有多大帮助。我了解到我的案例被称为 implicit-feedback 并且是我在书中遇到的唯一示例 last.fm 示例。但是我无法得到太多帮助。
所以我的问题是:
1) 如何在一个数据集上处理 als 推荐,该数据集的评级列的范围比 movielens 中范围在 1-5 之间的范围大得多?
我的在 11 到 309628 之间。
2) rmse 是隐式反馈中决定模型好坏的重要指标吗?
3) 在尝试在其上运行 spark-ml als 时处理此类数据的任何其他建议?
【问题讨论】:
【参考方案1】:rmse 是隐式反馈中决定模型是否正常的重要指标吗?
事实并非如此。隐式模型分数在不同的范围内。正如Danilo Ascione 所解释的,推荐的方法是https://***.com/a/41162688。
【讨论】:
感谢您的帮助!【参考方案2】:关于您的 NaN 问题,您是否看过不久前添加到 Spark 的 coldStartStrategy
? (参见https://github.com/apache/spark/pull/17102)
关于您的评估问题,当您发现使用带有隐式反馈的 ALS 时,RMSE 不是一个好的指标。
在您的情况下,排名指标更合适。最常见的两种是:
Mean average precision (MAP for short) Normalized discounted cumulative gain (NDCG)不幸的是,这些不是 Spark 的一部分,因为它们并不真正适合 Evaluator
API,因此您必须自己实现它们。
【讨论】:
感谢您的帮助。是的,我听说过coldStartStrategy,但我无法在spark 2.1.0 中成功使用它。对于评估问题,我会考虑实施排名指标。以上是关于Spark ML 协同过滤隐式反馈与类计数数据的主要内容,如果未能解决你的问题,请参考以下文章