推荐系统入门笔记二 : 推荐算法

一. 协同过滤推荐算法(基于邻域的算法)

1. 算法分类

  1. 基于用户的协同算法:
    跟你喜好相似的人喜欢的东西你也很有可能喜欢
  2. 基于物品的协同算法:
    跟你喜欢的东西相似的东西你也很有可能喜欢

1.1 实现协同过滤推荐有以下几个步骤:

  1. 找出最相似的人或物品:Top-N 相似的人或物品
    通过计算两两的相似度来进行排序,即可找出TOP-N相似的人或物品
  2. 根据相似的人或物品产生推荐结果
    利用TOP-N结果生成初始推荐结果,然后过滤掉用户已经有过记录的物品或明确表示不感兴趣的物品

1.2 基于用户的协同算法

基于用户的协同过滤算法是推荐系统中最古老的算法

1.2.1 基础算法

当一个用户A需要个性化推荐时,可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的、而用户A没有听说过的物品推荐给A。这种方法称为基于用户的协同过滤算法。
用户的协同过滤算法主要包括两个步骤:

  1. 找到和目标用户兴趣相似的用户集合
  2. 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户

步骤(1)的关键就是计算两个用户的兴趣相似度,协同过滤算法主要利用行为的相似度计算兴趣的相似度 ,给定用户u和用户v,令N(u)表示用户u曾经有过正反馈的物品集合,令N(v) 为用户v曾经有过正反馈的物品集合。那么,我们可以通过如下的Jaccard公式简单地计算u和v的兴趣相似度:
$$W_{uv}=\frac{|N(_u)\cup N(_v)|}{|N(_u)\cap N(_v)|}$$
或者通过余弦相似度计算:
$$ W_{uv}=\frac{|N(u)\cap N(_v)|}{\sqrt{|N(_u)||N(_v)}}$$
计算案例:
推荐系统入门笔记二 : 推荐算法_第1张图片

  1. Jaccard 公式计算:
    $$\frac{|\{a,b,d\}\cap\{a,c\}}{|\{a,b,d\}\cup\{a,c\}|}$$
    结果:
    $$\frac{\{a\}}{\{a,b,c,d\}}=\frac{1}{4}$$
  2. 余弦相似度计算:
    $$\frac{|\{a,b,d\}\cap\{a,c\}|}{\sqrt{|\{a,b,d\}||\{a,c\}|}}=\frac{1}{\sqrt{6}}$$
    同理:
    $$W_{AC}=\frac{|\{a,b,d\}\cap\{b,e\}|}{\sqrt{|\{a,b,d\}||\{b,e\}|}}=\frac{1}{\sqrt6}$$
    $$W_{AD}=\frac{|\{a,b,d\}\cap\{c,d,e\}|}{\sqrt{|\{a,b,d\}||\{c,d,e\}|}}=\frac{1}{3}$$
1.2.1 算法实现
  1. jaccard 算法:

    def jaccard(train):
     W=dict()
     # 计算两两用户之间的相似度
     for u in train:
          for v in train:
                 # 如果是同一个用户跳过
                 if u==v:
                     continue
                 # 两个用户点击物品的交集   
                 cap=train[u]&train[v]
                 # 两个用户点击物品的并集   
                 cup=train[u]|train[v]
                 # 两个用户的相似度
                 W[u,v]=len(cap)/len(cup)
     return W      

你可能感兴趣的:(推荐系统推荐算法协同过滤)