slope one算法在Netflix Prize上的表现

January 6th, 2009 | by 超群.com | 知识共享署名-非商业性使用-相同方式共享,转载请保留链接。

本博客所有原创文章采用知识共享署名-非商业性使用-相同方式共享,转载请保留链接http://chaoqun.17348.com/2009/01/slope-one-on-netflix-prize/

前段时间做了个slope one算法在Netflix Pirze上的测试,关于slope one算法可以参考我之前写的文章:Slope one:简单高效的推荐算法,Netflix Prize是DVD在线租赁商Netflix于2006年10月2日发起一项竞赛:任何组织或个人只要能够提交比它现有电影推荐系统Cinematch效果好10%的新方法,就可以获得100万美元的奖金。竞赛最多持续到2011年10月2日。同时,NetflixPrize还提供每年5万美元的年度进步奖。为什么是五万美元的年度进步奖呢?因为100万美元大奖存银行,每年的利息是5万美元,看来老外是挺有意思的。

Netflix Pirze采用RMSE作为评测的标准,RMSE中文的意思是均方根误差,计算的公式: 

其中Ot是原始数据,Ft是预测数据,n是样本数。

目前最好的成绩是有BellKor in BigChaos创造的0.8598(2009.01.05数据),比官方数据提高9.63%,这样可以推算出官方的数据应该是0.9492左右,BellKor in BigChaos也是2008年度进步奖的获得者,他们更新数据的频率很高,如不出意外,最后的大奖应该是他们的。

目前的方向大多是SVD奇异值分解,可以参见BellKor in BigChaos他们的文章http://www.netflixprize.com/community/viewtopic.php?id=1193,这里有一个开源的项目nprize,也是一个SVD处理Netflix Prize的模型,大部分代码是Python的(国外很多用Python做数据挖掘和自然语言处理的案例),成绩到了0.9046,折算比官方数据要高4.70%,如果你想拿SVD热热手,可以看看这个开源项目,过些日子我会写一些SVD应用在推荐系统方面的文章,着急的可以阅读吴军的文章数学之美 系列十八 - 矩阵运算和文本处理中的分类问题

由于对slope one算法比较熟悉,决定看看slope one算法在netflix pirze上的表现如何,netflix prize训练数据太大,大概有1亿多条的打分记录,OpenSlopeOne在运行效率方面不是很好,OpenSlopeOne处理几百万上千万的打分数据还是非常不错的,更多的话需要更多的机器水平扩展,如果有好的Mysql DBA可以尝试优化一下mysql server的参数,估计效果会很好,当然也需要有好的机器配合,我这里是用Python写的一个程序,多进程+多线程+手工Map-Reduce,需要源代码的话可以找我拿。

跑出来的结果不是很好,我的得分是0.9829,比官方数据差0.0337,大概差3.55%,分析原因可能是用户打分的数据普遍偏高,人们大多给自己喜欢的电影打分,对于不喜欢的数据打分就少很多了,下面是打分数据的分布情况:

mysql> select rating,count(*) as times from nf_log group by rating;
+--------+----------+
| rating | times    |
+--------+----------+
|      1 |  4617904 |
|      2 | 10131945 |
|      3 | 28810978 |
|      4 | 33750581 |
|      5 | 23167830 |
+--------+----------+

一目了然,用户对不喜欢的电影打分甚少,而且用户的平均打分达到了3.6043,所以最后算出来的打分值普遍偏高,RMSE的表现当然差了,Slope one算法里面有个BI-POLAR SLOPE ONE来应对这种问题,有兴趣的可以尝试一下。

尽管得分情况不是很好,我用probe的数据测试看,slope one算法对用户喜欢的电影预测还是很好的,不擅长的是对用户不喜欢的电影的预测,对用户打分为1的预测普遍在3以上,拖累了它的表现。

我们一般要做的是对用户喜欢的东西进行推荐,slope one还是一个很不错的选择。

Tags: , , ,

  1. 4 Responses to “slope one算法在Netflix Prize上的表现”

  2. By 超群.com on Jan 12, 2009 | Reply

    今天偶然发现一篇论文http://lamda.nju.edu.cn/liyf/dm08/MG0833077.pdf,里面有slope one算法的比较,貌似结果不错,看来和数据集还是有一定的关系。

  3. By 超群.com on Jan 18, 2009 | Reply

    这里有一篇介绍netflix prize各种算法的表现情况,可以看看去。http://eecs.wsu.edu/~vjakkula/MLProject.pdf

  4. By ruby on Sep 13, 2009 | Reply

    请问netflix的那2G数据放到mapreduce上多少台的集群,要算多久呢? 我感觉这个算法用在增量上还是不错的,但是netflix的数据量, 要算好几个小时.

  5. By 超群.com on Sep 14, 2009 | Reply

    几个小时算是不错的了,我算了好多天….

Post a Comment