我正在使用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)
答案 0 :(得分:3)
@shuaiyuancn对BinaryClassificationEvaluator
的解释并不完全正确。如果您没有二进制评级并且正确的阈值不正确,显然会使用这种评估器。
因此,当您的系统考虑二进制评级(点击或不点,喜欢或不喜欢)时,您可以将推荐系统视为二进制分类。
在这种情况下,推荐者定义了逻辑模型,其中我们假设用户u给出项目v的评级(-1,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]
仅表示您的模型预测评级在该范围内。