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 协同过滤隐式反馈与类计数数据的主要内容,如果未能解决你的问题,请参考以下文章

协同过滤算法

协同过滤 spark python

隐性反馈行为数据的协同过滤推荐算法

利用用户行为数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客

协同过滤

创建项目并初始化业务数据——基于Spark平台的协同过滤实时电影推荐系统项目系列博客