精华内容
下载资源
问答
  • 协同过滤

    2021-01-24 13:48:09
    协同过滤 什么是协同过滤 协同过滤推荐(Collaborative Filtering recommendation)是在信息过滤和信息系 统中正迅速成为一项很受欢迎的技术。与传统的基于内容过滤直接分析内容进行 推荐不同,协同过滤分析用户兴趣...

    协同过滤

    什么是协同过滤

    协同过滤推荐(Collaborative Filtering recommendation)是在信息过滤和信息系 统中正迅速成为一项很受欢迎的技术。与传统的基于内容过滤直接分析内容进行 推荐不同,协同过滤分析用户兴趣,在用户群中找到指定用户的相似(兴趣)用 户,综合这些相似用户对某一信息的评价,形成系统对该指定用户对此信息的喜 好程度预测。
    协同过滤是迄今为止最成功的推荐系统技术,被应用在很多成功的推荐系统中。 电子商务推荐系统可根据其他用户的评论信息,采用协同过滤技术给目标用户推 荐商品。

    协同过滤算法

    协同过滤算法主要分为基于启发式基于模型式两种。
    其中,基于启发的协同过滤算法,又可以分为基于用户的协同过滤算法 (User-Based)基于项目的协同过滤算法(Item-Based)
     启发式协同过滤算法主要包含 3 个步骤:
    1)收集用户偏好信息
    2)寻找相似的商品或者用户
    3)产生推荐

    一、基于用户的协同过滤算法

    基于用户的协同过滤算法主要分为两步:
    (1)找到与目标用户兴趣相似的用户集合
    (2)找到这个集合中用户喜欢的、并且目标用户没有听说过的物品推荐给目标用户

    1.相似度的计算方法

    皮尔逊相关系数:
    在这里插入图片描述
    其中,i 表示项,例如商品;Iu 表示用户 u 评价的项集;Iv 表示用户 v 评价的项 集;ru,i 表示用户 u 对项 i 的评分;rv,i 表示用户 v 对项 i 的评分;表示用户 u 的平均评分;表示用户 v 的平均评分。
    余弦相似度
    在这里插入图片描述

    2.计算用户 u 对未评分商品的预测分值

    首先根据上一步中 的相似度计算,寻找用户 u 的邻居集 N∈U,其中 N 表示邻居集,U 表示用户集。 然后,结合用户评分数据集,预测用户 u 对项 i 的评分,计算公式如下所示:
    在这里插入图片描述
    s(u,u’)表示用户 u 和用户 u’的相似度。

    3.通过例子理解

    假设有如下电子商务评分数据集,预测用户 C 对商品 4 的评分。
    在这里插入图片描述
    表中?表示评分未知。根据基于用户的协同过滤算法步骤,计算用户 C 对商品 4 的评分,其步骤如下所示。
    (1)寻找用户 C 的邻居 从数据集中可以发现,只有用户 A 和用户 D 对商品 4 评过分,因此候选邻居只 有 2 个,分别为用户 A 和用户 D。用户 A 的平均评分为 4,用户 C 的平均评分为 3.667,用户 D 的平均评分为3

    在这里插入图片描述
    根据皮尔逊相关系数公式: 红色区域计算 C 用户与 A 用户,用户 C 和用户 A 的相似度为:

    在这里插入图片描述
    蓝色区域计算 C 用户与 D 用户的相似度为:
    在这里插入图片描述
    (2)预测用户 C 对商品 4 的评分 根据上述评分预测公式,计算用户 C 对商品 4 的评分,如下所示:
    在这里插入图片描述

    二、基于项目的协同过滤

    基于物品的协同过滤算法主要分为两步:
    (1)计算物品之间的相似度,通过共现矩阵实现
    (2)根据物品的相似度和用户的历史行为给用户生成推荐列表

    1.相似度计算方法

    在这里插入图片描述分母|N(i)]|是喜欢物品 i 的用户数,|N(i)∩N(j)|是同时喜欢物品 i 和 j 的用户
    计算物品相似度首先建立用户-物品倒排表,根据矩阵计算每两个物品之间的相似度 wij。W[i][j]记录了同时喜欢物品i和物品j的用户数。
    在这里插入图片描述
    得到物品之间的相似度后,可以根据如下公式计算用户 u 对于物品 j 的兴趣
    在这里插入图片描述
    N(u)是用户喜欢的物品的集合,S(j,K)是和物品 j 最相似的 K 个物品的集合, wji 是物品 j 和 i 的相似度,rui 是用户 u 对物品 i 的兴趣。 i 的相似度,rui 是用户 u 对物品 i 的兴趣。(对于隐反馈数据集, 如果用户 u 对物品 i 有过行为,即可令 rui=1。)该公式的含义是,和用户历史 上感兴趣的物品越相似的物品,越有可能在用户的推荐列表中获得比较高的排名。
    该公式的实现代码如下所示:
    def Recommendation(train, user_id, W, K):
    rank = dict()
    ru = train[user_id]
    for i,pi in ru.items():
    for j, wj in sorted(W[i].items(), key=itemgetter(1), reverse=True)[0:K]:
    if j in ru:
    continue
    rank[j] += pi * wj
    return rank

    2.通过例子理解:

    现有用户的访问的记录如下图所示:
    在这里插入图片描述
    他的共现矩阵为:
    在这里插入图片描述
    通过公式计算相似度:
    在这里插入图片描述
    以此类推得到相似度的共现矩阵
    在这里插入图片描述
    此时若有新用户 E,访问的 a,b,d 三个物品,那么可以看做向量 P:
    在这里插入图片描述
    在这里插入图片描述

    T为物品的共现矩阵,P为新用户对已有产品的向量,得到的 P`为新用户对每个产品的兴趣度。
    此时得到了对于用户 E,c 和 e 两个物品的兴趣度是相同的。
    理解公式 i∈N(u)∩S(j,K)
    对于用户 E,已经访问了 a,b,d,那么,N(u)={a,b,d};还有两个未访问物品 c,e, 那么 j={c,e}; 当 j=c 时,对于和物品 j 最相似的 K 个物品的集合为{a,d,e},那么 S(j,K)={a,d,e}; 得出N(u)∩S(j,K)={a,d},如下图所示:
    在这里插入图片描述
    再来看矩阵相乘中的 c 行,乘以 P,实际上就是上述 N(u)∩S(j,K)={a,d}的相似度求和
    在这里插入图片描述
    同理,当 j=e 时,对于和物品 j 最相似的 K 个物品的集合为{b,c,d},那么 S(j,K)={b,c,d};得出 N(u)∩S(j,K)={b,d};如下图所示:
    在这里插入图片描述
    再来看矩阵相乘中的 e 行,乘以 P,实际上就是上述 N(u)∩S(j,K)={b,d}的相似度求和。
    在这里插入图片描述

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,752
精华内容 3,100
关键字:

协同过滤