【问题标题】:Spark: Measuring performance of ALSSpark:测量 ALS 的性能
【发布时间】:2016-06-24 09:47:10
【问题描述】:

我正在使用来自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)

【问题讨论】:

    标签: apache-spark machine-learning pyspark


    【解决方案1】:

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

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

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

    其中scoreuv是u给v的分数。

    有关 Logistic 模型的更多信息,您可以参考 Hastie 等人。 (2009) - 第 4.4 节

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

    有时,我选择使用 RegressionMetrics 评估我的推荐系统,甚至认为教科书推荐使用类似 RankingMetrics 的评估来计算指标,例如 K 或 MAP 的平均精度等。它始终取决于任务和数据在眼前。没有通用的方法。

    不过,我强烈建议您阅读Evaluation Metrics 官方文档。它将帮助您更好地了解您要衡量的目标以及您要达到的目标。

    参考文献

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

    【讨论】:

      【解决方案2】:

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

      您仍然从 BinaryClassificationEvaluator 获得结果的原因是结果数据框中有一个 prediction 列,然后用于计算 ROC。这个数字对你的情况没有任何意义,不要把它作为你模型性能的衡量标准。

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

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

      【讨论】:

      • 在这种情况下,这基本上意味着 ALS 无法捕获数据中的任何模式。我希望得到 [0, 1] 范围内的结果,但是我只得到非常低的值
      • 没有意义的是经过训练的模型,而不是指标:)
      • 是的,你是对的。我不想引起任何误解。由于模型的结果,我选择使用不同的指标,是的,它们似乎没有多大意义。
      猜你喜欢
      • 2018-08-07
      • 2019-02-24
      • 2017-01-19
      • 2017-11-03
      • 2019-12-24
      • 1970-01-01
      • 2016-09-19
      • 2016-02-21
      • 1970-01-01
      相关资源
      最近更新 更多