读书笔记《集体智慧编程》Chapter 2 : Make Recommendations

简介:
本章概要
本章主要介绍了两种协同过滤(Collaborative Filtering)算法,用于个性化推荐:
  • 基于用户的协同过滤(User-Based Collaborative Filtering,又称 K-Nearest Neighbor Collaborative Filtering)
  • 基于条目的协同过滤(Item-Based Collaborative Filtering)
本章还介绍两种向量相似性算法:
  • 欧氏距离(Euclidean Distance)
  • 皮尔斯稀疏(Pearson Coefficient)
 
协同过滤
协同过滤是在一大群用户中寻找一些与你的用户相似的用户,然后将这些找到的用户使用过但是你没有使用过的物品(如电影,书籍,商品)推荐给你的用户,因为你与这些用户具有类似的爱好。
 
相似度算法
欧氏距离是平面几何距离的n维扩展,值越大,越不相似,为了使得当距离越大时,越相似,需要对其欧氏距离转换,转换方式如下:
euc-dist(x,y)  ===>    1/(1+euc-dist(x,y))
皮尔斯系数可以描述两个向量的相关性,表示的两个向量在二维坐标上分布为一条直线的程度,值在-1~1之间,越大,越相关。皮尔斯稀疏可以修复分数通胀(grade inflation)问题,举个例子,A,B两个用户具有集齐相似的兴趣,只是A打分相对较严格,一般比平均分低一分,但是A与B的pearson系数却可以完美的为1.这种特性根据你的应用而定,可能会需要,至少在电影推荐的例子上是需要的,但是其他例子里面可能不需要.
 
User-Based Collaborative Filtering (or the K -Nearest Neighbor Collaborative Filtering)
计算你其他人所有人相似度,取前k个。
在k个人中,取出我没有看过的电影,然后根据相似度与对应用户对电影的打分成绩,作加权平均值,分值越大,代表我可能越有兴趣额。
这是一个通用算法,可以讲商品,替换电影打分,那么就可以推断我可能感兴趣的商品。返回来也可以,可以根据商品推断潜在购买者。抽象为下面的关系:
  • 用户:影评 --> 推荐电影
  • 影评:用户 --> 预测其他用户影评(没多大意义)
  • 用户:商品 --> 推荐商品
  • 商品:用户 --> 潜在购买用户    商品之间的关系相对stable,相比于人之间的关系
 
 
Item-Based Collaborative Filtering(基于条目的系统过滤)
基于用户的协同过滤最大的问题在于性能,计算量太大,当用户陡增时无法做到实时推荐。因为每次推荐都要计算k个最近的用户,开销很大。
 
基本条目过滤的思路:计算出条目之间的相似性(相对稳定,可以在空闲时间计算),然后将根据用户用过的条目和该条目对应用户没有用过的条目,计算加权平均值,推荐给用户。
最大的好处是条目之间的关系相对稳定,可以提前计算。而且条目计算的结果可以优化,只计算每个条目最相似的k个条目,k << n(总体条目数)。
相比于基于用户的协同顾虑,它更适合于稀疏矩阵。
基于条目的协同过滤,可以参见论文《 Item-Based Collaborative Filtering Recommendation Algorithms
更具此问题,基于条目的协同过滤比基于用户的系统过滤更准确。
 
声明:如有转载本博文章,请注明出处。您的支持是我的动力!文章部分内容来自互联网,本人不负任何法律责任。
本文转自bourneli博客园博客,原文链接:http://www.cnblogs.com/bourneli/archive/2012/11/11/2765325.html ,如需转载请自行联系原作者
相关文章
|
12月前
|
存储 程序员 C++
《高质量C/C++编程》读书笔记三
《高质量C/C++编程》读书笔记三
60 0
|
12月前
|
前端开发 Java 程序员
《高质量C/C++编程》读书笔记一
《高质量C/C++编程》读书笔记一
49 0
|
12月前
|
存储 人工智能 算法
C++ Primer Plus 第6版 读书笔记(7)第 7 章 函数——C++的编程模块
乐趣在于发现。仔细研究,读者将在函数中找到乐趣。C++自带了一个包含函数的大型库(标准 ANSI 库加上多个 C++类),但真正的编程乐趣在于编写自己的函数;另一方面,要提高编程效率,本章和第 8 章介绍如何定义函数、给函数传递信息以及从函数那里获得信息。
130 0
|
存储 编解码 JSON
Python编程从入门到实践-读书笔记(下)
基础知识重点摘录 字符串 在Python中,用引号括起的都是字符串,其中的引号可以是单引号,也可以是双引号。这种灵活性让你能够在字符串中包含引号和撇号:
|
存储 JSON 测试技术
Python编程从入门到实践-读书笔记(上)
基础知识重点摘录 字符串 在Python中,用引号括起的都是字符串,其中的引号可以是单引号,也可以是双引号。这种灵活性让你能够在字符串中包含引号和撇号:
|
6月前
|
存储 安全 编译器
[笔记]读书笔记 C++设计新思维《一》基于策略的类设计(下)
[笔记]读书笔记 C++设计新思维《一》基于策略的类设计(下)
|
6月前
|
存储 算法 Java
[笔记]读书笔记 C++设计新思维《二》技术(Techniques)(二)
[笔记]读书笔记 C++设计新思维《二》技术(Techniques)(二)
|
6月前
|
存储 编译器 程序员
C++ Primer Plus 第6版 读书笔记(10) 第十章 类与对象
C++ Primer Plus 第6版 读书笔记(10) 第十章 类与对象
37 0