Machine learning 为什么ALS.trainImplicit能更好地预测显性评分?

Machine learning 为什么ALS.trainImplicit能更好地预测显性评分?,machine-learning,apache-spark-mllib,recommendation-engine,collaborative-filtering,Machine Learning,Apache Spark Mllib,Recommendation Engine,Collaborative Filtering,编辑:我尝试了一个独立的Spark应用程序(而不是PredictionIO),我的观察结果是一样的。因此,这不是一个预测问题,但仍然令人困惑 我正在使用PredictionIO 0.9.6和协同过滤模板。我的数据集中的评分是1到10之间的数字。当我第一次使用模板中的默认值训练模型时(使用ALS.train),预测非常糟糕,至少在主观上是如此。分数高达60.0分左右,但这些建议似乎完全是随机的 有人建议ALS.trainImplicit做得更好,所以我相应地更改了src/main/scala/A

编辑:我尝试了一个独立的Spark应用程序(而不是PredictionIO),我的观察结果是一样的。因此,这不是一个预测问题,但仍然令人困惑


我正在使用PredictionIO 0.9.6和协同过滤模板。我的数据集中的评分是1到10之间的数字。当我第一次使用模板中的默认值训练模型时(使用
ALS.train
),预测非常糟糕,至少在主观上是如此。分数高达60.0分左右,但这些建议似乎完全是随机的

有人建议
ALS.trainImplicit
做得更好,所以我相应地更改了
src/main/scala/ALSAlgorithm.scala

val m = ALS.trainImplicit(  // instead of ALS.train
  ratings = mllibRatings,
  rank = ap.rank,
  iterations = ap.numIterations,
  lambda = ap.lambda,
  blocks = -1,
  alpha = 1.0,  // also added this line
  seed = seed)
现在的分数要低得多(低于1.0),但推荐的分数与个人评分一致。好得多,但也令人困惑。PredictionIO通过以下方式定义显式和隐式之间的差异:

明确偏好(也称为“明确反馈”),例如 用户对项目的“评分”。内隐偏好(也指 作为“隐性反馈”),例如“查看”和“购买”历史记录

以及:

默认情况下,推荐模板使用
ALS.train()


文档是否有误?我仍然认为明确的反馈适合我的用例。也许我需要使用
ALS.train
调整模板,以获得有用的建议?还是我只是误解了什么?

很大程度上取决于你是如何收集数据的。通常,看似明确的评级实际上可能是隐含的。例如,假设您提供了允许用户对他们以前购买/使用过的项目进行评分的选项。这意味着,他们花时间评估特定项目的事实本身就意味着该项目具有高质量。因此,质量差的物品根本不被评级,因为人们甚至懒得使用它们。这样,即使数据集是显式的,也可以得到更好的结果,因为如果你认为结果是隐式的。同样,根据数据的获取方式,这一点也有很大差异。

您的评级来自哪里?它们是经过计算的,还是您明确要求用户对项目进行1到10之间的评分?如果是这样,那么您确实在使用显式feedback@alex9311事实上,用户对项目的评分从1分到10分。我有几百万的收视率。在现实生活中,坏产品的评论比好产品多。因为你可以接受好的产品,但不能接受坏的。