Spark:测量ALS的性能

时间:2016-06-24 09:47:11

标签: apache-spark machine-learning pyspark

我正在使用spark.ml的ALS模型来创建推荐系统 对某些项目集合使用隐式反馈。我注意到了 模型的输出预测远低于1,它们通常在[0,0.1]的区间内。因此,使用MAE或MSE不会产生任何影响 在这种情况下感觉。

因此我使用areaUnderROC(AUC)来衡量性能。我通过使用spark BinaryClassificationEvaluator来做到这一点,我确实得到了接近0.8的东西。但是,我无法清楚地理解这是如何可能的,因为大多数值的范围都在[0,0.1]。

根据我的理解,评估员将在一定程度上考虑所有预测都属于0级。这基本上意味着AUC将等于负样本的百分比?

一般来说,如果你需要测试你的模型的性能而不是让我们说Logistic回归,你会如何对待这么低的值?

我按如下方式训练模型:

rank = 25
alpha = 1.0
numIterations = 10
als = ALS(rank=rank, maxIter=numIterations, alpha=alpha, userCol="id", itemCol="itemid", ratingCol="response", implicitPrefs=True, nonnegative=True)
als.setRegParam(0.01)
model = als.fit(train)

2 个答案:

答案 0 :(得分:3)

@shuaiyuancn对BinaryClassificationEvaluator的解释并不完全正确。如果您没有二进制评级并且正确的阈值不正确,显然会使用这种评估器。

因此,当您的系统考虑二进制评级(点击或不点,喜欢或不喜欢)时,您可以将推荐系统视为二进制分类。

在这种情况下,推荐者定义了逻辑模型,其中我们假设用户u给出项目v的评级(-1,1)是在逻辑响应模型上生成的:

y_{uv} \sim Bernoulli((1 + exp[-score_{uv}])^1)

其中得分 uv 是u给v的分数。

有关Logistic模型的更多信息,请参阅Hastie等。 (2009年) - 第4.4节

这就是说,推荐系统也可以被认为是多类别的分类问题。这总是取决于您的数据和手头的问题,但它也可以遵循某种回归模型。

有时候,我选择使用RegressionMetrics来评估我的推荐系统,即使是教科书推荐使用RankingMetrics - 就像评估一样计算指标,例如K或MAP的平均精度等等。它总是取决于手头的任务和数据。没有一般的配方。

尽管如此,我强烈建议您阅读Evaluation Metrics官方文档。它将帮助您更好地了解您要尝试衡量的内容。

<强>参考

编辑:我今天遇到了this answer。这是python中二进制ALS的一个示例实现。我强烈建议你看看它。

答案 1 :(得分:2)

在推荐人上使用BinaryClassificationEvaluator是错误的。通常,推荐者从集合中选择一个或几个项目作为预测。但BinaryClassificationEvaluator仅处理两个标签,因此二进制

您仍然可以从BinaryClassificationEvaluator获得结果的原因是您的结果数据框中有一个prediction列,然后用于计算ROC。在您的情况下,这个数字并不意味着什么,不要将其作为模型性能的衡量标准。

  

我注意到模型的输出预测远低于1,它们通常在[0,0.1]的区间内。因此,在这种情况下使用MAE或MSE没有任何意义。

为什么MSE没有任何意义?您正在通过查看预测评级与真实评级的差异(误差)来评估您的模型。 [0, 0.1]仅表示您的模型预测评级在该范围内。