Collaborative filtering, 即协同过滤,是一种新颖的技术。最早于1989年就提出来了,直到21世纪才得到产业性的应用。应用上的代表在国外有Amazon.com,Last.fm,Digg等等。

     最近由于毕业论文的原因,开始研究这个题目,看了一个多星期的论文与相关资料之后,决定写篇总结来总结一下最近这段时间资料收集的成果。
 在微软1998年的那篇关于协同过滤的论文[1]中,将协同过滤分成了两个流派,一个是Memory-Based,一个是Model-Based。关于Memory-Based的算法,就是利用用户在系统中的操作记录来生成相关的推荐结果的一种方法,主要也分成两种方法,一种是User-Based,即是利用用户与用户之间的相似性,生成最近的邻居,当需要推荐的时候,从最近的邻居中得到推荐得分最高的几篇文章,用作推荐;另外一种是Item-Based,即是基于item之间的关系,针对item来作推荐,Amazon.com即是使用这种方法,使用一种基本的方法来得到不俗的效果。而实验结果也表明,Item-Based的做法比User-Based更有效[2]。而对于Model-Based的算法,即是使用机器学习中的一些建模算法,在线下对于模型进行预计算,在线上能够快速得出结果。主要使用的算法有 Bayesian belief nets , clustering , latent semantic , 最近几年又出现了使用SVM 等的CF算法。最近几年又提出一种新的分类,content-based,即是对于item的内容进行分析,从而进行推荐。而现阶段,比较优秀的一些应用算法,则是将以上几种方法,混合使用。比较说Google News[3],在它的系统中,使用了一种将Memory-Based与Model-Based两种方法混合的算法来处理。在Google的那篇论文里面,它提到了如何构建一个大型的推荐系统,其中Google的一些高效的基础架构如:BigTable,MapReduce等得到很好的应用。
     在这篇总结中,主要论及最基本的Memory-Based算法。对于Memory-Based算法,主要有两个步骤,第一个是计算相似性,另外一个是进行推荐。
 
     对于第一步,主要是于线下计算item-item或者user-user之间的相似性,主要使用的算法有Correlation-Based,如Pearson correlation [4], Jaccard coefficient[5]等,与Vector Cosine-Based Similarity , 和在实验中被验证具有最好效果的Regression 。 第二步,则是生成相关的推荐项目的过程。主要是根据上一步得出的最近邻,从其中得出最相关的Top-N个推荐的项目作为结果。这种方法被沿用多年,大多数的推荐系统都是使用这种方法构建的。
 
而对于大多数的项目而言,推荐系统都不可避免地面临以下几个问题[6]:
 
1.数据过度松散,当应用变得庞大,数据集开始增大的时候,就会出现这个问题了。可能大量的用户只是评价了一小部分的项目,而大多数的项目是没有进行评分的。 这个时候就会出现数据过度松散的问题。
2.同义项目问题,对于同义的项目,在系统中可能具有不同的标识符,对于这些项目之间的相关性就会被忽略。
3.垃圾攻击,对于一些利用系统进行恶意传播的用户,可能会制造一些虚假的评价,造成系统推荐的不正确行为。
4.冷启动问题,对于新使用系统的用户,系统中并没有相关的操作记录,没法生成相关的推荐。
总体而言,现在的推荐系统还是面临不少的问题。而在产业界的成功也会促使这项技术会继续发展。
 
收集到一些相关资料:
书籍:
[1]《Programming Collaborative Intelligence》,中文译名为《集体智慧编程》。是一本理论与实践的好书,手把手教你如何写一个推荐系统,不过其中的算法比较简单,但是对于入门是一本好书。
[2]《AlgorithmsIntelligentWeb》,也是非常浅显,重于实践的书,其中第二单,讲解了一个简单的推荐系统的搭建,并提供了源码,供学习。
组织:
[1]Resys Group,国内一个关于推荐引擎的小组,其中不乏牛人,定期也会举办活动。
[2]GroupLens,老字号的推荐引擎研究小组,它们的主页上有很多的资讯,推荐。
博客:
[1]Beyond.Search, Resys Group的创始人之一,里面有不少不错的博文,可以获得大量关于推荐系统发展的资讯。
[2]Daniel Lemire's blog ,一个研究人员的博客,推荐。
开源软件库:
[1] Taste,已经整合到Apache里的Mahout里面了,一个非常经典的推荐系统库。
 
参考文献:
【1】John S. Breese ,David Heckerman , Carl Kadie.Empirical Analysis of Predictive Algorithms for Collabrative Filtering 
【2】 Badrul Sarwar , George Karypis , Joseph Konstan , John Riedi.Item-Based Collaborative Filtering Recommendation Algorithm
【3】Abhinandan Das , Mayur Datar , Ashutosh Garg.Google News Personalization : Scalable Online Collaborative Filtering ,  
【4】Paul Resnick , Neophytos lacovou , Mitesh Suchak , Peter Bergstrom , John Riedl .GroupLens: An Open Architecture For Collaborative Filtering of Netnews 
【5】A.Broder..On the resemblance and containment of documents 
【6】XiaoYuan Su , Taghi M.Khoshgoftaar.A Survey of Collaborative Filtering Techiniques , 
 

Collaborative filtering的更多相关文章

  1. 协同滤波 Collaborative filtering 《推荐系统实践》 第二章

    利用用户行为数据 简介: 用户在网站上最简单存在形式就是日志. 原始日志(raw log)------>会话日志(session log)-->展示日志或点击日志 用户行一般分为两种: 1 ...

  2. mahout算法源码分析之Collaborative Filtering with ALS-WR (四)评价和推荐

    Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 首先来总结一下 mahout算法源码分析之Collaborative Filtering with AL ...

  3. mahout算法源码分析之Collaborative Filtering with ALS-WR拓展篇

    Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 额,好吧,心头的一块石头总算是放下了.关于Collaborative Filtering with AL ...

  4. mahout算法源码分析之Collaborative Filtering with ALS-WR 并行思路

    Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. mahout算法源码分析之Collaborative Filtering with ALS-WR 这个算 ...

  5. 基于物品的协同过滤推荐算法——读“Item-Based Collaborative Filtering Recommendation Algorithms” .

    ligh@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.3 基于物品的协同过滤推荐算法--读"Item-Based ...

  6. 【RS】Sparse Probabilistic Matrix Factorization by Laplace Distribution for Collaborative Filtering - 基于拉普拉斯分布的稀疏概率矩阵分解协同过滤

    [论文标题]Sparse Probabilistic Matrix Factorization by Laplace Distribution for Collaborative Filtering  ...

  7. 【RS】Factorization Meets the Neighborhood: a Multifaceted Collaborative Filtering Model - 当因式分解遇上邻域:多层面协同过滤模型

    [论文标题]Factorization Meets the Neighborhood: a Multifaceted Collaborative Filtering Model   (35th-ICM ...

  8. 亚马逊 协同过滤算法 Collaborative filtering

    这节课时郭强的三维课.他讲的是MAYA和max .自己对这个也不怎么的感兴趣.而且这个课感觉属于数字媒体.自己对游戏,动画,这些东西一点都不兴趣,比如大一的时候刚开学的时候,张瑞的数字媒体的导论课.还 ...

  9. collaborative filtering协同过滤

    每次我想看电影的时候,都会去问我的朋友,小健.一般他推荐的电影,我都比较喜欢.显然不是所有人都有小健这样的能力.因为我碰巧和小健有类似的品味. 这个生活中的经验,实际上有着广泛的用途. 当系统需要为某 ...

随机推荐

  1. 翻译「C++ Rvalue References Explained」C++右值引用详解 Part4:强制Move语义

    本文为第四部分,目录请参阅概述部分:http://www.cnblogs.com/harrywong/p/4220233.html. 强制Move语义 众所周知,正如C++标准的第一修正案所陈述:“委 ...

  2. 三方框架之masonry

    这个详细的介绍:http://www.cocoachina.com/ios/20141219/10702.html Masonry 源码:https://github.com/Masonry/Maso ...

  3. Oracle之别名小结

    今天在写一个简单的SQL语句并执行时抛出了如下图所示的一个错误提示信息! 恩,此异常信息很明显,在SQL语句中标示符的长度过长了,简短一些就应该没问题了,我查看了一下我的SQL语句发现是我的查询字段的 ...

  4. 学习练习 java20160507作业

    第一题 求水仙花的个数: //求水仙花数 int zongshu = 0; for(int i =100; i<=999;i++) { int bai = i/100; //求百位上面的数字 i ...

  5. My Rules of Information

    http://www.infotoday.com/searcher/jan02/block.htm I often suggested to students that information is ...

  6. Windows10系统如何安装Microsoft Visual Studio 2015及最小子数组和求解

    一.Windows10系统如何安装Microsoft Visual Studio 2015. 1.首先到Visual Studio官方网站(https://www.visualstudio.com/v ...

  7. 完成《Java编程入门》初稿

    Java编程入门 现在的运维工程师不但要懂得集合网络.系统管理而且要和开发人员一起调试系统,社会上也需要"复合性"的运维人员,所以需要做运维的也要懂一些开发,知道软件系统接口的调试 ...

  8. [转载]word尾注插入参考文献——前人经验+自己总结

    1. 以尾注的方式插入第一个参考文献. 将光标定位于word文档中将要插入参考文献的位置,按“插入/引用/脚注和尾注”.出现一菜单,选择“尾注”,“文档结尾”,编号格式为“1,2,3”.按“插入”按钮 ...

  9. github的入门使用

    原文 http://www.eoeandroid.com/thread-274556-1-1.html [初识Github]首先让我们大家一起喊一句“Hello Github”.YEAH!就是这样. ...

  10. 2.3搭建Android应用程序开发环境

    1.安装Android SDK (1)首选下载Android SDK: (2)下载完成之后,在Ubuntu系统下进行解压: (3)解压完成之后,配置环境变量: ①用vim打开/etc/profile文 ...