zoukankan      html  css  js  c++  java
  • 协同过滤 学习笔记

    http://zsp.iteye.com/blog/244245


    先推荐一本书,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/


  • 相关阅读:
    nested exception is java.lang.IllegalStateException: No persistence units parsed from {classpath*:META-INF/persistence.xml}
    Thrift Expected protocol id ffffff82 but got 0
    idea
    Activity工作流入门之HelloWorld
    Thrift 入门之helloWorld
    Thrift入门之mac下的安装流程
    netty的解码器与粘包和拆包
    java反射(一)
    使用Spring报错:No default constructor found;
    jpa关联映射(一)
  • 原文地址:https://www.cnblogs.com/lexus/p/2189932.html
Copyright © 2011-2022 走看看