推荐系统resys小组线下活动见闻2009-08-22
http://www.tuicool.com/articles/vUvQVn
不久前,始于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只能饮恨。
最后补充几点:
推荐系统resys小组线下活动见闻2009-08-22的更多相关文章
- 【广州.NET社区线下活动】云定未来 - Azure Meetup
第2届 广州.NET线下沙龙 Azure Meetup 4月13日,第2届广州.NET线下沙龙在广州银行大厦7楼中创学院路演大厅成功举办.来自微软MVP.网易的技术专家们带来了干货满满的知识分享,即使 ...
- 大湾区联动:广州深圳助力东莞.NET俱乐部首次线下活动
新年伊始,经过一个寒冬考验后的.NET社区热情不减,长沙.南京.合肥.东莞先后建立以微信为主要平台的线上.NET社区.并相继开始筹划和组织各地区的首次线下活动.东莞作为粤港澳大湾区的腹地,制造业基地, ...
- 从CR线下活动学到的:如何组织一个小的线下活动
作者:朱克锋 邮箱:zhukefeng@iboxpay.com 转载请注明出处:http://blog.csdn.net/linux_zkf 周末在腾讯组织了GR,活动达到了预期的收获,从这次活动我主 ...
- Nanjing GDG Meetup 8月线下活动
致各位亲爱的 Google 技术爱好者 很高兴的通知各位朋友,Nanjing GDG 将在本周六 (08/31) 举办线下活动,讨论 Android 开发实战技巧,热烈欢迎大家报名参加. 时间: 8 ...
- 南京.NET线下活动后续—一对一技术交流
4月1日星期六,发生了几件大事: 1.网民与老板花式斗图,庆祝愚人节. 2.国务院设立雄安新区,定为千年大计 3.纳龙科技的程序猿赴镇江斯诺物联科技进行一对一技术交流. 此次一对一交流活动是3月11日 ...
- 你在为谁工作——IT帮深圳分站2019年3月线下活动回顾
对于工作,在每个人的心中,它所占的份量都是不一样的.有的人活着是为了工作,有的人工作是为了更好的生活. 在3月24日下午,北京.上海与深圳三地我们同步举办了关于工作这个话题的沙龙活动. 我们深圳分站参 ...
- IT帮2019年2月线下活动【定义工作,解读自我】之站桩练习
2019年2月IT帮线下活动[定义工作,解读自我] 昨天的活动收获很大,全面的总结周老师会另写一篇来帮助大家回顾.我想说一下其中最打动我的一句话:“只有你能决定你有多优秀!” “工作中把自己当成企业家 ...
- MongoDB深圳用户组线下活动召集
MongoDB线下用户组是由全世界MongoDB爱好者发起的不定期线下交流活动.目前全球有100多个MongoDB用户组,3万5千多爱好者参与.用户组活动的形式通常会有一到两个MongoDB相关的技术 ...
- [2018-11-27]2018年12月1日宁波dotnet社区线下活动
离上次活动,转眼又过了一个月,幸得各路大神支持,于本周六(12月1日),宁波dotnet社区的线下分享活动又来啦! 活动嘉宾及主题 董斌辉 2015-2019年微软全球最有价值专家(.NET方向) 2 ...
随机推荐
- 喵哈哈村的魔法考试 Round #6 (Div.3) 题解
有任何问题 直接联系QQ:475517977 喵哈哈村的代码传说 第一章 冒泡排序 第一题就是排序嘛,在ACM/OI竞赛中,我只推崇一种排序方法,就是直接调用algorithm里面的sort函数. # ...
- Mac安装jdk1.6
需到apple官网下载 下载地址:https://support.apple.com/kb/DL1572?viewlocale=en_US&locale=en_US 相关介绍: http:// ...
- JTAG – A technical overview and Timing
This document provides you with interesting background information about the technology that underpi ...
- lodoop打印控件详解
注意:使用此打印控件需要引入(在我上传的Demo中都有): install_lodop32.exe install_lodop64.exe LodopFuncs.js jquery-1.10.0.mi ...
- [置顶] 从零开始学C++之STL(二):实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)
首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下: C++ Code 1 2 template < class _Ty, ...
- 在ASP.NET MVC控制器中获取链接中的路由数据
在ASP.NET MVC中,在链接中附加路由数据有2种方式.一种是把路由数据放在匿名对象中传递: <a href="@Url.Action("GetRouteData&quo ...
- 用drawRect以及CAReplicatorLayer绘制动态水波纹
用drawRect以及CAReplicatorLayer绘制动态水波纹 大大简化了写水波纹效果的难度,你可以根据示例自己组装水波纹效果,本设计是几个工具组合在一起完成的效果, DrawRectObje ...
- Curl操作Elasticsearch的常用方法
Elasticsearch对于文档操作,提供了以下几种API,本文就说明如何使用curl方式来调用这些API. API种类 单文档操作API 1.* Index API 索引文档 * 为文档创建索引 ...
- TensorFlow训练神经网络cost一直为0
问题描述 这几天在用TensorFlow搭建一个神经网络来做一个binary classifier,搭建一个典型的神经网络的基本思路是: 定义神经网络的layers(层)以及初始化每一层的参数 然后迭 ...
- [转]vi 常用命令行
From : http://www.cnblogs.com/sunormoon/archive/2012/02/10/2345326.html vi 常用命令行 1.vi 模式 a) 一般模式: v ...