`
zuroc
  • 浏览: 1290419 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

协同过滤 学习笔记

阅读更多

先推荐一本书,csdn上可以下载完美的pdf
Programming Collective Intelligence (
http://www.douban.com/subject/2209702/?from=mb-62346329
)

协同过滤的缺点是

热点相关内容 往往变成了 其他同期出现的热点内容 .

先划分类别(比如SVD),再计算相关,效果往往更好.

1. CF算法(Collaborative Filtering)

http://en.wikipedia.org/wiki/Collaborative_filtering
转载:
协同过滤技术可以分为三类:
基于用户(User-based)的协同过滤
基于项目(Item-based)的协同过滤
基于模型(Model- based)的协同过滤


User-based
http://www.guwendong.cn/post/2006/user_based_collaborative_filtering.html
转载:
步骤一,收集可以代表用户兴趣的信息。
步骤二,最近邻搜索
步骤三,生成推荐结果。

Item-based
http://www.guwendong.cn/post/2006/item_based_collaborative_filtering.html

转载:
Item-based 方法需要同样的三个步骤:
1)得到User-item的评分数据;
2)针对项的最近邻搜索,即对项进行相似度计算
3)产生推荐

相对于 User-based 方法,Item-based 方法最大的改进是提高了协同过滤方法的扩展性及性能。

从上一篇中可以看到,在 User-based 方法中,随着用户数量的不断增多,在大数量级的用户范围内进行“最近邻搜索”会成为整个算法的瓶颈。

Item-based 方法通过计算项之间的相似性来代替用户之间的相似性。对于项来讲,它们之间的相似性要稳定很多,因此可以离线完成工作量最大的相似性计算步骤,从而大大降低了在线计算量,提高推荐效率。

在 Item-based 方法中,要对 A 和 B 进行项相似性计算,通常分为两步:
1)找出同时对 A 和 B 打过分的组合;
2)对这些组合进行相似度计算,常用的算法包括:
皮尔森相关系数(Person Correlation Coefficient)
余弦相似性(Cosine-based Similarity)
调整余弦相似性(Adjusted Cosine Similarity)



http://www.cnblogs.com/kuber/archive/2008/06/10/1216846.html
Slope One :简单高效的协同过滤算法(Collaborative Filtering)

转载:
Slope One;和其它类似算法相比, 它的最大优点在于算法很简单, 易于实现, 执行效率高, 同时推荐的准确性相对很高;

基本概念

Slope One的基本概念很简单, 例子1, 用户X, Y和A都对Item1打了分. 同时用户X,Y还对Item2打了分, 用户A对Item2可能会打多少分呢?
User Rating to Item 1 Rating to Item 2
X 5 3
Y 4 3
A 4 ?

根据SlopeOne算法, 应该是:4 - ((5-3) + (4-2))/2 = 2.5.

解释一下. 用户X对Item1的rating是5, 对Item2的rating是3, 那么他可能认为Item2应该比Item1少两分. 同时用户Y认为Item2应该比Item1少1分. 据此我们知道所有对Item1和Item2都打了分的用户认为Item2会比Item1平均少1.5分. 所以我们有理由推荐用户A可能会对Item2打(4-1.5)=2.5分;

加权算法

接下来我们看看加权算法(Weighted Slope One). 如果有100个用户对Item1和Item2都打过分, 有1000个用户对Item3和Item2也打过分. 显然这两个rating差的权重是不一样的. 因此我们的计算方法是

(100*(Rating 1 to 2) + 1000(Rating 3 to 2)) / (100 + 1000)

上面讨论的是用户只对项目的喜好程度打分.还有一种情况下用户也可以对项目的厌恶程度打分. 这时可以使用双极SlopeOne算法(BI-Polar SlopeOne).

参考资料
论文 http://www.daniel-lemire.com/fr/abstracts/SDM2005.html
How to implement Slope One in Python
http://www.serpentine.com/blog/2006/12/12/collaborative-filtering-made-easy/


相关Python库
http://exogen.case.edu/projects/consensus/

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics