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

44次阅读

共计 1264 个字符,预计需要花费 4 分钟才能阅读完成。

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

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. 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      

正文完
 0