Spark ML协同过滤具有类似计数数据的隐式反馈

时间:2017-03-23 13:58:50

标签: apache-spark pyspark recommendation-engine apache-spark-ml collaborative-filtering

我想使用网页访问数据在 spark 2.1.0 上使用 pyspark 运行 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 附近,并带有一些参数组合。

我已经阅读了一些书籍和文章,而且我已经看过一些关于此的视频教程,但很多内容都与电影版数据集相关,这是基于评级的,因为我看到并且不提供太多对于我的问题。我已经了解到我的案例被称为隐式反馈,并且只有我在书上遇到last.fm示例的示例。但是我无法得到很多帮助。

所以我的问题是:

1)如何处理数据集上的als建议,该数据集的评级栏的范围比影片范围更广,范围在1-5之间?

我的是11到309628之间。

2)在决定模型是否正常的隐式反馈中,rmse是一个重要指标吗?

3)在尝试运行spark-ml als时处理此类数据的任何其他建议?

2 个答案:

答案 0 :(得分:0)

  

是关于决定模型是否正确的隐式反馈的一个重要指标?

不是。隐式模型得分有不同的规模。正如Danilo Ascione所解释的那样,推荐的方法是https://stackoverflow.com/a/41162688

答案 1 :(得分:0)

关于你的NaN问题,您是否看过不久前添加到Spark的coldStartStrategy? (cf https://github.com/apache/spark/pull/17102

关于您的评估问题,当您发现使用带有隐式反馈的ALS时,RMSE不是一个好的指标。

在您的情况下,排名指标更合适。最常见的两个是:

不幸的是,这些不是Spark的一部分,因为它们并不适合Evaluator API,因此您必须自己实施它们。