Skip to content

Losstie/RecommendAlgorithn

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RecommendAlgorithn

推荐系统算法实现

推荐算法概述

参考:

推荐算法概括来讲可分为五种:

  • 基于内容的推荐
  • 协调过滤推荐
  • 混合推荐
  • 基于规则的推荐
  • 基于人口统计信息的推荐

1)基于内容的推荐: 这一类依赖于NLP的一些知识,通过挖掘文本的TF-IDF特征向量,来得到用户的偏好,进而做推荐。这类推荐算法可以找到用户独特的小众喜好,而且还有较好的解释性。

2)协调过滤推荐:协调过滤是推荐算法中目前最主流的种类,花样繁多,在工业界已经有了很多广泛的应用。它的优点是不需要太多特定领域的知识,可以通过基于统计的机器学习算法来得到较好的推荐效果。最大的优点是工程上容易实现,可以方便应用到产品中。目前绝大多数实际应用的推荐算法都是协同过滤推荐算法。

3)混合推荐:类似我们机器学习中的集成学习,博采众长,通过多个推荐算法的结合,得到一个更好的推荐算法,起到三个臭皮匠顶一个诸葛亮的作用。比如通过建立多个推荐算法的模型,最后用投票法决定最终的推荐结果。混合推荐理论上不会比单一任何一种推荐算法差,但是使用混合推荐,算法复杂度就提高了,在实际应用中有使用,但是并没有单一的协调过滤推荐算法,比如逻辑回归之类的二分类推荐算法广泛。

4)基于规则的推荐:这类算法常见的比如基于最多用户点击,最多用户浏览等,属于大众型的推荐方法,在目前的大数据时代并不主流。可用该方法用于“冷启动”,比如基于维度统计给新用户推荐物品。

5)基于人口统计信息的推荐:基于人口统计学的推荐机制(Demographic-based Recommendation)是一种最易于实现的推荐方法,它只是简单的根据系统用户的基本信息发现用户的相关程度,然后将相似用户喜爱的其他物品推荐给当前用户,目前在大型系统中已经较少使用。

本仓库主要实现协调过滤推荐及基于内容的推荐、混合推荐算法

协调过滤推荐

协调过滤推荐算法可分为两类:

  • memory-based methods(基于内存的协调过滤)
    • 基于用户的协调过滤(user-based CF)
    • 基于项目的协调过滤(item-based CF )
  • model-based methods (基于模型的协调过滤)

Memory-based methods

  1. User-based CF:当一个用户 A 需要个性化推荐时,可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的、而用户 A 没有听说过的物品推荐给 A 。这种方法称为基于用户的协同过滤算法。
  2. Item-based CF: 不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。该算法认为,物品 A 和物品 B 具有很大的相似度是因为喜欢物品 A 的用户大都也喜欢物品B 。

Model-based methods

基于模型的协同过滤作为目前最主流的协同过滤类型,相关算法繁多。主要思想概括为:我们的问题是这样的m个物品,m个用户的数据,只有部分用户和部分数据之间是有评分数据的,其它部分评分是空白,此时我们要用已有的部分稀疏数据来预测那些空白的物品和数据之间的评分关系,找到最高评分的物品推荐给用户。

主流的方法可以分为:

  • 用关联算法做协同过滤
  • 用聚类算法做协同过滤
  • 用分类算法做协同过滤
  • 用回归算法做协同过滤
  • 用矩阵分解做协同过滤
  • 用神经网络做协同过滤
  • 用图模型做协同过滤

推荐算法实现

1. 协同过滤推荐算法

1.1 Memory-based method

1.1.1 基于用户的协同过滤算法
1.1.2 基于物品的协同过滤算法

1.2 Model-based method

1.2.1 基于矩阵分解的协同过滤
1.2.1.1 LFM
1.2.1.2 分解机(Factorization Machine)
1.2.2 关联算法做协调过滤推荐
1.2.3 神经网络做协调过滤推荐
1.2.4 回归算法做协调过滤推荐

About

Recommended system algorithm implementation

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published