Apache Spark ALS协同过滤结果.它们没有意义

Mac*_*ner 5 machine-learning collaborative-filtering matrix-factorization apache-spark

我想尝试Spark使用MLlib进行协同过滤,如本教程中所述:https://databricks-training.s3.amazonaws.com/movie-recommendation-with-mllib.html 该算法基于"协作过滤"一文对于隐式反馈数据集",进行矩阵分解.

使用1000万个Movielens数据集,一切都正常运行.数据集分为80%培训10%测试和10%验证.

  • RMSE基线:1.060505464225402
  • RMSE(train)= 0.7697248827452756
  • 对于训练的模型,RMSE(验证)= 0.8057135933012889,等级= 24,λ= 0.1,迭代次数= 10.
  • 最佳模型将基线提高了23.94%.

虽然具有不同的训练参数,但这些值与教程类似.

我尝试了几次运行算法,总是得到对我没有任何意义的建议.即使只评价儿童电影,我也会得到以下结果:

对于评级:

  • 个人评价:玩具总动员(1995)评级:4.0
  • 个人评价:Jungle Book,The(1994)评级:5.0
  • 个人评价:Lion King,The(1994)评级:5.0
  • 个人评价:Mary Poppins(1964)评级:4.0
  • 个人评价:爱丽丝梦游仙境(1951)评级:5.0

结果:

推荐给你的电影:

  1. Oharu的生活,(Saikaku ichidai onna)(1952)
  2. 更多(1998)
  3. 谁在那边唱歌?(又名谁在那里唱歌)(Ko to tamo peva)(1980)
  4. 星期日和西布莱(Dimanches de Ville d'Avray,Les)(1962)
  5. 蓝光,(Das Blaue Licht)(1932)
  6. Harvey Milk的时代,(1984)
  7. 请投票给我(2007)
  8. 种植树木的人,(Homme qui plantait des arbres,L')(1987)
  9. Shawshank Redemption,The(1994)
  10. 只有昨天(Omohide poro poro)(1991)

除了昨天以外似乎没有任何意义.

如果有人知道如何解释这些结果或获得更好的结果,我将非常感谢您分享您的知识.

最好的祝福

编辑:

如我所建议的那样,我训练了另

  • 基线错误:1.0587417035872992
  • RMSE(火车)= 0.7679883378412548
  • 对于以rank = 100,lambda = 0.1和numIter = 10训练的模型,RMSE(验证)= 0.8070339258049574.

不同的个人评分:

  • 个人评价:星球大战:第六集 - 绝地归来(1983)评级:5.0
  • 个人评价:Mission:Impossible(1996)评级:4.0
  • 个人评价:Die Hard:复仇(1995)评级:4.0
  • 个人评价:Batman Forever(1995)评级:5.0
  • 个人评价:黑人男子(1997)评级:4.0
  • 个人评价:终结者2:审判日(1991)评级:4.0
  • 个人评价:Top Gun(1986)评级:4.0
  • 个人评价:星球大战:第五集 - 帝国反击战(1980)评级:3.0
  • 个人评价:Alien(1979)评级:4.0

推荐的电影是:

推荐给你的电影:

  1. 卡门(1983)
  2. 沉默之光(Stellet licht)(2007)
  3. 耶稣(1979)
  4. Oharu的生活,(Saikaku ichidai onna)(1952)
  5. 美国之心(2003)
  6. 为圣经告诉我(2007)
  7. 更多(1998)
  8. Leigh Bowery传奇,(2002)
  9. 葬礼,(Ososhiki)(1984)
  10. Longshots,The(2008)

没有一个有用的结果.

EDIT2:使用隐式反馈方法,我得到了更好的结果!使用与上述相同的动作片,建议如下:

推荐给你的电影:

  1. 星球大战:第四集 - 新希望(又名星球大战)(1977)
  2. 终结者,(1984)
  3. 迷失方舟的攻略(印第安纳琼斯和迷失方舟的攻略)(1981)
  4. 死硬(1988)
  5. 教父,(1972)
  6. 外星人(1986)
  7. 摇滚,(1996)
  8. 独立日(又名ID4)(1996)
  9. 星际迷航II:可汗之怒(1982)
  10. GoldenEye(1995)

这更符合我的预期!问题是为什么显式版本是如此糟糕

Sea*_*wen 3

请注意,您正在运行的代码不使用隐式反馈,并且不完全是您引用的算法。只要确保您没有使用ALS.trainImplicit. 您可能需要不同的 lambda 和秩。对于该数据集,RMSE 为 0.88 是“OK”;我不清楚该示例的值是最优的还是只是玩具测试产生的值。您仍然在这里使用不同的值。也许它还不是最佳的。

它甚至可能是自此以来修复的 ALS 实现中的错误之类的东西。如果可以的话,尝试与 ALS 的另一个实现进行比较。

我总是试图抵制合理化建议,因为即使是随机建议,我们的大脑也不可避免地会找到一些解释。但是,嘿,我可以说你在这里看不到动作片、恐怖片、犯罪剧、惊悚片。我发现儿童电影与艺术电影的品味密切相关,因为早在 MovieLens 上填写自己的品味并给儿童电影评分的人实际上并不是孩子,而是父母,也许还有足够老的软件工程师类型有孩子的人确实倾向于看这类外国电影。