推荐算法

推荐算法学习笔记(一)——推荐算法(Recommended Al

2018-03-12  本文已影响0人  肥了个大西瓜

1 个性化推荐

1.1 基于用户推荐(Demographic-based Recommendation)

  1. 获取用户的注册信息。
  2. 根据用户的注册信息对用户分类。
  3. 给用户推荐她所属分类中用户喜欢的物品。

1.2 基于内容推荐(Content-based Recommendation)

根据用户过去的浏览记录,向用户推荐用户没有接触过的推荐项。

一般是基于关键词进行推荐,比如看了《权力的游戏1》就给你推荐后面的剧集,但是可能推荐重复,因为关键词相同。

1.6.1 基于领域的方法(neighborhood-based)

1.6.1.2 基于用户的协同推荐(UserCF)

 性能:适用于用户较少的场合,如果用户很多,计算用户相似度矩阵代价很大。
 领域:时效性较强,社会性较强,用户个性化不太明显的领域。
 实时性:用户有新行为,不一定造成推荐结果的立即变化。
 冷启动:在新用户对很少的物品产生行为后,不能立即对他进行个性化推荐,因为用户相似度表是每隔一段时间离线计算的。
  新物品上线后一段时间,一旦有用户对物品产生行为,就可以将新物品推荐给和对它产生行为的用户兴趣相似的其他用户。
 推荐理由:很难提供令用户信服的推荐解释。

1.6.1.2 基于内容的协同推荐(ItemCF)

 1. 计算物品的相似度。
 2. 根据物品的相似度和用户的历史行为给用户生成推荐列表。

 性能:适用于物品数明显小于用户数的场合,如果物品很多(网页),计算物品相似度矩阵代价很大。
 领域:长尾物品丰富,用户个性化需求强烈的领域。
 实时性:用户有新行为,一定会导致推荐结果的实时变化。
 冷启动:新用户只要对一个物品产生行为,就可以给他推荐和该物品相关的其他物品。但没有办法在不离线更新物品相似度表的情况下将新物品推荐给用户。
 推荐理由:利用用户的历史行为给用户做推荐解释,可以令用户比较信服。

1.6.2 基于模型的协同过滤(ItemCF)

  1. 关联算法
  2. 聚类算法
  3. 分类算法
  4. 回归算法
  5. 矩阵分解
  6. 神经网络
  7. 基于图的随机游走算法(random walk on graph)
  8. 隐语义模型

1.6.2.1用关联算法做协同过滤

找出用户购买的所有物品数据里频繁出现的项集活序列,来做频繁集挖掘,找到满足支持度阈值的关联物品的频繁N项集或者序列。如果用户购买了N项集或者序列里的部分物品,那么我们可以将频繁项集或者序列里的其他物品按照一定的评分准则推荐给用户,这个评分准则可以包括支持度、置信度和提升度等。

Apriori
FP Tree
PrefixSpan

1.6.2.2 用聚类算法做协同过滤

按照物品基于一定的距离度量来进行聚类。如果基于用户聚类,则可以将用户按照一定距离度量方式分成不同的目标人群,将同样目标人群评分高的物品推荐给目标用户。基于物品聚类的话,则是将用户评分高物品的相似同类物品推荐给用户。
- ###### 常用算法:
K-Means
BIRCH
DBSCAN
谱聚类

    #### 1.6.2.3 用分类算法做协同过滤
    - ###### 思想:
        如果我们根据用户评分的高低,将分数分成几段的话,则这个问题变成分类问题。比如最直接的,设置一份评分阈值,评分高于阈值的就是推荐,评分低于阈值就是不推荐,我们将问题变成了一个二分类问题。虽然分类问题的算法多如牛毛,但是目前使用最广泛的是逻辑回归。为啥是逻辑回归而不是看起来更加高大上的比如支持向量机呢?因为逻辑回归的解释性比较强,每个物品是否推荐我们都有一个明确的概率放在这,同时可以对数据的特征做工程化,得到调优的目的。目前逻辑回归做协同过滤在BAT等大厂已经非常成熟了。
    - ###### 常用算法:
        1.[逻辑回归](http://www.cnblogs.com/pinard/p/6029432.html)
        2.[朴素贝叶斯](http://www.cnblogs.com/pinard/p/6069267.html)

    #### 1.6.2.4 用回归算法做协调过滤
    - ###### 思想:
      用回归算法做协同过滤比分类算法看起来更加的自然。我们的评分可以是一个连续的值而不是离散的值,通过回归模型我们可以得到目标用户对某商品的预测打分。
    - ###### 常用算法:
      [线性回归](http://www.cnblogs.com/pinard/p/6004041.html)
      [决策树](http://www.cnblogs.com/pinard/p/6053344.html)
      [支持向量机,线性支持回归](http://www.cnblogs.com/pinard/p/6113120.html)

    #### 1.6.2.5 用矩阵分解做协同过滤
       用矩阵分解做协同过滤是目前使用也很广泛的一种方法。由于传统的奇异值分解SVD要求矩阵不能有缺失数据,必须是稠密的,而我们的用户物品评分矩阵是一个很典型的稀疏矩阵,直接使用传统的SVD到协同过滤是比较复杂的。
目前主流的矩阵分解推荐算法主要是SVD的一些变种,比如FunkSVD,BiasSVD和SVD++。这些算法和传统SVD的最大区别是不再要求将矩阵分解为UΣVT的形式,而变是两个低秩矩阵PTQ的乘积形式。对于矩阵分解的推荐算法,后续我会专门开篇来讲。

    #### 1.6.2.6 用神经网络做协调过滤
      用神经网络乃至深度学习做协同过滤应该是以后的一个趋势。目前比较主流的用两层神经网络来做推荐算法的是限制玻尔兹曼机(RBM)。在目前的Netflix算法比赛中, RBM算法的表现很牛。当然如果用深层的神经网络来做协同过滤应该会更好,大厂商用深度学习的方法来做协同过滤应该是将来的一个趋势。后续我会专门开篇来讲讲RBM。

     #### 1.6.2.7 用图模型做协同过滤
     - ###### 思想:
    用图模型做协同过滤,则将用户之间的相似度放到了一个图模型里面去考虑,常用的算法是SimRank系列算法和马尔科夫模型算法。对于SimRank系列算法,它的基本思想是被相似对象引用的两个对象也具有相似性。算法思想有点类似于大名鼎鼎的PageRank。而马尔科夫模型算法当然是基于马尔科夫链了,它的基本思想是基于传导性来找出普通距离度量算法难以找出的相似性。后续我会专门开篇来讲讲SimRank系列算法。 
    - ###### 推荐步骤:
      1. 将用户和对应行为用图模型表示出来。
      2. 在图模型中,从某用户的对应节点开始进行随机游走,最终得出物品的权重,进行推荐。

1.6.2.7 隐语义方法

  通过潜在特征联系用户和物品。
  隐语义模型主要是基于NLP的,涉及到对用户行为的语义分析来做评分推荐,主要方法有隐性语义分析LSA和隐含狄利克雷分布LDA,这些等讲NLP的再专门讲。

 1. 基于用户的行为统计,按用户兴趣给物品分类。
 2. 确定用户对哪些类别的物品感兴趣,以及感兴趣的程度。
 3. 确定不同类别物品的权重,选择性推荐给用户。

 1. pLSA
 2. LDA
 3. 隐含类别模型( latent class model )
 4. 隐含主题模型( latent topic model )
 5. 隐含矩阵分解( matrix factorization )

1.7 混合推荐算法

综合利用协同过滤推荐算法和基于内容的推荐算法各自的优点同时抵消各自的缺点。

2 非个性化推荐

2.1 基于规则的推荐

2.2 基于人口统计信息的推荐



3 冷启动(Cold Start)问题





reference:

协同过滤推荐算法总结

上一篇 下一篇

猜你喜欢

热点阅读