http://www.tuicool.com/articles/vUvQVn

时间2009-08-30 15:13:22  不周山原文  http://www.wentrue.net/blog/?p=559

不久前,始于2006年的 netflix prize 名花有主,几年来一直领先的Bellkor队得到了最后的冠军及100万美元的奖金。但就在Bellkor队提交的结果实现跨越性的成绩之后到30天后比赛正式结束,中间还发生了很多风起云涌的趣事。其中就有The Ensemble组加入争夺,该组内有几名中国人。

就在netflix prize结束不久,国内搞个性化推荐的研究者或从业者聚集在一起,在google group上开通了一个名为 resys 的交流组。初期组里的交流非常激烈,不久后就开展了第一次的线下活动,也就是上周,在奇遇花园,由The Ensemble组的成员xlvector主讲参加netflix prize的经历与算法体系。我是一个有一定学术背景,但已经一年来基本脱离这个圈子的人,本着对本行业理论知识的渴求去听,得到的收获可谓颇丰。之前没时间整理总结一下,这回可不能再偷懒了。

先用照片简单介绍一下聚会情况,然后再总结一下算法方面的东西。

奇遇花园当天下午过来参加聚会的人数近30人

xlvector同学在讲参加netflix prize的经历和算法

wangyt同学在讲RBM

会后与clickstone及NP的合影

散会后的讨论依旧很热烈

会上xlvector所用的PPT可以从 这里 看到,这里讲的算法严格地说是从netflix数据集里根据RMSE的目标衍生出来的一个算法体系,实际的商用推荐系统或者说广泛意义上的学术界上的推荐系统,则是另外的一套体系。比如,商用推荐系统,类别比较多,不同的类别的推荐系统可能都不一样,即使同是电影推荐系统,商用推荐系统除了打分因素,还会考虑其它的因素(如语义),作为评判标准的需求方面不单是RMSE,还有多样性,点击率等等。而广泛意义的学术界上的推荐系统,关于推荐质量的评估体系本就不统一,RMSE属于是精确度这一维度中的一种量化指标,其它还有如多样性、可解释性等等难以量化的指标。而工程上的实现还需要考虑计算效率、稀疏性、存储量、分布并行等许多问题。

但由netflix衍生出来的那套算法体系还是有意义的,它毕竟在一个统一的框架里,描绘了在一种确定的量化指标的情况下,怎样才可以把推荐系统里的一些共性的问题解决得最好。

按照报告所讲的内容,这套体系里的算法主要可以分为以下几类,这个我按照出现时间顺序叙述为:KNN和邻域模型;矩阵分解与降维;Boltzmann机和RBM;时间相关的模型。

  • KNN和邻域模型:是很基本很符合人的认识的一种推荐方式,分为user-based和item-based两种。他们的核心都是根据user-item-rating打分记录,计算相似度矩阵,然后进行推荐。user-based是根据打分记录计算出用户之间的相似度矩阵,然后把跟你相似的用户喜欢的而你没收藏过的条目推荐给你。item-based是根据打分记录计算出条目之间的相似度矩阵,然后根据你喜欢的条目,把跟这些条目相关的而你又没收藏过的条目推荐给你。实际使用因为用户相似度矩阵通常要比条目相似度矩阵要大得多,所以item-based的方法使用比较广泛。
  • 矩阵分解与降维:通常是SVD,理论上SVD分解可以把一个user-item-rating的矩阵M分解成M=U*D*V的形式,U是用户特征矩阵,V是条目特征矩阵,D是包含特征值从大到小排序的对角矩阵。只取D中的前K个有效元素,后面的置0,U*D就得到一个降维后的用户特征矩阵,V*D就得到一个降维后的条目特征矩阵,对这两个特征矩阵进行比较,就知道哪些用户跟哪些条目更相近了。SVD有解析上的分解方法,但如果矩阵规模很大,这一步会非常慢,所以netflix prize上使用的都是迭代的方法,每次输入一个user-item-rating记录,用EM算法进行迭代求优,直至求得最优值。这种方法及其升级版本的SVD++算法据xlvector说是单个模型的性能的极限。
  • Boltzmann机和RBM:Boltzmann机很早以前我就知道是把模拟退火算法应用于神经网络训练而生成的一种神经网络模型,也是一种迭代取优的方法,但一直对其原理没有深究。当天wangyt上来给我们讲约束Boltzmann机RBM,我是听得云里雾里,基本没听明白。只听懂了它的性能:它的性能不如SVD++,但在作模型融合时有特别的优势,也许是因为它适用于一些其它算法不适用于的人群。
  • 时间相关模型:就是把时间的因素考虑到模型里面去了,多加了一些变参,模型也变复杂了,没什么太特别的东西。
  • 分类器融合:以上说的都是一个个的分类器,精度到0.90基本到头了,后面的进步就要靠把上面说的各种分类器融合到一个集成分类器里。这个我了解,因为跟我一年毕业的那个博士师兄做的就是分类器融合。在netflix prize里面,到最后都是在拼分类器的融合,谁能找到更多更好的分类器,谁能做出更好的融合算法,谁的预测精度就高。但是我看来,里面用的分类器融合算法比较我那个师兄做的那一大堆森林理论,还是要相对简单一些,当然不是越复杂就越好了。最后做成的集成分类器通常有好几百个,光计算量也够呛的,单个分类器里面不同质的也就上面那几大类,其它的都是参数上的变化。

最后三十天的故事:按照大赛规则,Bellkor提交了过线的结果之后,再过30天,比赛就会结束,所以最后30天里的故事也比较多。如多个组开始组成一个更大的组The ensemble,以便集成更多的分类器,得到更高精度;大组之间的交流与争论;做完正规工作之后还要相应地研究一些“作弊策略”。都是些挺有意思的事情。

最后The ensemble做到了英雄榜上的第一(第一组测试集精度最高)。根据规则,要在两组数据上进行考察,并作加权平均,而这个值Bellkor略胜了一点点,The emsemble只能饮恨。

最后补充几点:

  • xlvector同学认为,没有一个模型是最好的,多个模型的整合才能得到最佳的结果,所以人手也显得很重要。我的认为是,在实际推荐系统中,要得到好的效果,多个不同质(CF?语义?其它因素?)的算法整合也很重要,也就是hybrid recommendation。
  • 算法可能有数据依赖性,在netflix数据集上表示良好的算法与参数,在你的数据集上未必就是最好的。
  • 在netflix prize论坛上找到了两个单分类器的c/c++源代码,可以拿来体验一下。SVD 、 nprize 、 Kadri框架 。

推荐系统resys小组线下活动见闻2009-08-22的更多相关文章

  1. 【广州.NET社区线下活动】云定未来 - Azure Meetup

    第2届 广州.NET线下沙龙 Azure Meetup 4月13日,第2届广州.NET线下沙龙在广州银行大厦7楼中创学院路演大厅成功举办.来自微软MVP.网易的技术专家们带来了干货满满的知识分享,即使 ...

  2. 大湾区联动:广州深圳助力东莞.NET俱乐部首次线下活动

    新年伊始,经过一个寒冬考验后的.NET社区热情不减,长沙.南京.合肥.东莞先后建立以微信为主要平台的线上.NET社区.并相继开始筹划和组织各地区的首次线下活动.东莞作为粤港澳大湾区的腹地,制造业基地, ...

  3. 从CR线下活动学到的:如何组织一个小的线下活动

    作者:朱克锋 邮箱:zhukefeng@iboxpay.com 转载请注明出处:http://blog.csdn.net/linux_zkf 周末在腾讯组织了GR,活动达到了预期的收获,从这次活动我主 ...

  4. Nanjing GDG Meetup 8月线下活动

    致各位亲爱的 Google 技术爱好者 很高兴的通知各位朋友,Nanjing GDG 将在本周六 (08/31) 举办线下活动,讨论 Android 开发实战技巧,热烈欢迎大家报名参加. 时间:  8 ...

  5. 南京.NET线下活动后续—一对一技术交流

    4月1日星期六,发生了几件大事: 1.网民与老板花式斗图,庆祝愚人节. 2.国务院设立雄安新区,定为千年大计 3.纳龙科技的程序猿赴镇江斯诺物联科技进行一对一技术交流. 此次一对一交流活动是3月11日 ...

  6. 你在为谁工作——IT帮深圳分站2019年3月线下活动回顾

    对于工作,在每个人的心中,它所占的份量都是不一样的.有的人活着是为了工作,有的人工作是为了更好的生活. 在3月24日下午,北京.上海与深圳三地我们同步举办了关于工作这个话题的沙龙活动. 我们深圳分站参 ...

  7. IT帮2019年2月线下活动【定义工作,解读自我】之站桩练习

    2019年2月IT帮线下活动[定义工作,解读自我] 昨天的活动收获很大,全面的总结周老师会另写一篇来帮助大家回顾.我想说一下其中最打动我的一句话:“只有你能决定你有多优秀!” “工作中把自己当成企业家 ...

  8. MongoDB深圳用户组线下活动召集

    MongoDB线下用户组是由全世界MongoDB爱好者发起的不定期线下交流活动.目前全球有100多个MongoDB用户组,3万5千多爱好者参与.用户组活动的形式通常会有一到两个MongoDB相关的技术 ...

  9. [2018-11-27]2018年12月1日宁波dotnet社区线下活动

    离上次活动,转眼又过了一个月,幸得各路大神支持,于本周六(12月1日),宁波dotnet社区的线下分享活动又来啦! 活动嘉宾及主题 董斌辉 2015-2019年微软全球最有价值专家(.NET方向) 2 ...

随机推荐

  1. 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem D. Distance 迪杰斯特拉

    Problem D. Distance 题目连接: http://codeforces.com/gym/100714 Description In a large city a cellular ne ...

  2. ARM JTAG 20P to Cortex JTAG 10P

  3. Javascript Array和String的互转换。

    Array类可以如下定义: var aValues = new Array(); 如果预先知道数组的长度,可以用参数传递长度 var aValues = new Array(20); -------- ...

  4. Java Web乱码分析及解决方式(一)——GET请求乱码

    引言:     在进行Web開始时.乱码是我们最常常遇到也是最主要的问题.有经验的程序员非常easy能解决,刚開始学习的人则easy被泥潭困住. 并且非常多时候.我们即使攻克了乱码问题也是不明就里.往 ...

  5. SATA工作模式咋选?揭秘AHCI和IDE区别(全文)

    第1页:AHCI模式与Win7.SSD的不解之缘     AHCI这个注定和SATA接口结下不解之缘的接口模式,它担负着淘汰IDE模式的重任,从诞生开始就充满争议,它经历了整整7年时间.它伴随着SSD ...

  6. Swift iOS 文件操作:沙盒(SandBox)、程序包(NSBundle)

    1.沙盒机制介绍 iOS 中的沙盒机制(SandBox)是一种安全体系.每个 iOS 应用程序都有一个单独的文件系统(存储空间),而且只能在对应的文件系统中进行操作,此区域被称为沙盒.所有的非代码文件 ...

  7. 用C扩展Python2

    参考 python扩展实现方法--python与c混和编程 编写Python扩展(Extending Python with C or C++) https://docs.python.org/2.7 ...

  8. Quartz.NET简介

    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为运行十个,百个, ...

  9. 读取 android sys/下的信息

    读取 android sys/下的信息 https://github.com/ruw/Internet-Services-projects/tree/master/OffloadPredictor/l ...

  10. 批量生成protoBuf到cs文件

    color 0A && echo off rem protoc程序名set "PROTOC_EXE=protoc.exe"rem .proto文件名::set &q ...