我正在使用 spark.ml
中的 ALS 模型来创建推荐系统
对某些项目集合使用隐式反馈。我注意到了
模型的输出预测远低于 1,并且通常在 [0,0.1] 区间内。因此,使用 MAE 或 MSE 不会产生任何影响
在这种情况下有意义。
因此我使用areaUnderROC(AUC)来衡量性能。我通过使用 Spark 的 BinaryClassificationEvaluator
来做到这一点,并且确实得到了接近 0.8 的结果。但是,我无法清楚地理解这是如何可能的,因为大多数值的范围在 [0,0.1] 内。
据我了解,在某一点之后,评估者将考虑所有预测都属于 0 类。这本质上意味着 AUC 将等于负样本的百分比?
一般来说,如果您需要测试模型与逻辑回归相比的性能,您会如何处理如此低的值?
我按如下方式训练模型:
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)
最佳答案
@shuaiyuancn 对 BinaryClassificationEvaluator
的解释并不完全正确。如果您没有二元评级并且适当的阈值不正确,显然可以使用这种评估器。
因此,当您的系统考虑二元评级(点击或不点击、喜欢或不喜欢)时,您可以将推荐系统视为二元分类。
在这种情况下,推荐器定义了一个逻辑模型,我们假设用户 u 给项目 v 的评分 (-1,1) 是在逻辑响应模型上生成的:
其中scoreuv是u给v的分数。
有关 Logistic 模型的更多信息,您可以引用 Hastie 等人。 (2009) - 第 4.4 节
也就是说,推荐系统也可以被视为多类分类问题。这始终取决于您的数据和手头的问题,但它也可以遵循某种回归模型。
有时,我选择使用 RegressionMetrics 来评估我的推荐系统,甚至认为教科书建议使用类似 RankingMetrics 的评估来计算指标,例如 K 或 MAP 的平均精度,等等。这始终取决于手头的任务和数据。没有通用的方法。
尽管如此,我强烈建议您阅读Evaluation Metrics官方文档。它将帮助您更好地了解您正在尝试衡量的目标以及您想要实现的目标。
引用文献
- Statistical Methods for Recommender Systems - Deepak K. Agarwal、Bee-Chung Chen。
- 统计学习的要素 - Hastie 等人
- Spark 官方文档 - Evaluation Metrics .
编辑:我遇到了 this answer今天。这是 Python 中二进制 ALS 的示例实现。我强烈建议你看一下。
关于apache-spark - Spark : Measuring performance of ALS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38010393/