2020-12-14

协同过滤算法是一种推荐系统,通过寻找用户间的相似性来推荐物品。算法主要包括找到兴趣相似的用户、计算用户相似度以及推荐物品。常用相似度计算方法如余弦相似度,通过建立物品-用户倒排表简化计算。最终根据相似度预测目标用户对未体验物品的兴趣程度,进行推荐。
摘要由CSDN通过智能技术生成

协同过滤算法

所谓协同过滤算法,简单来说就是寻找臭味相投的人。
例如:
A喜欢电影a,b,c
B喜欢电影a,c,f
C喜欢电影b,e,h
D喜欢电影e,f,h
根据每个人的爱好的相通点,A喜欢a,c,B也喜欢,那么是否可以推测A喜欢的电影b,B也喜欢,B喜欢的f,A也喜欢。这时我们可以把b推荐给B,把f推荐给A,就跟平时淘宝上买东西一样,买完一样东西后淘宝会给你推送一个“购买此物品的人同时还购买了啥”,就是一个运用协同过滤算法的推荐系统。

原理

根据上述基本原理,我们可以将基于用户的协同过滤推荐算法拆分为两个步骤:

  1. 找到与目标用户兴趣相似的用户集合

  2. 找到这个集合中用户喜欢的、并且目标用户没有听说过的物品推荐给目标用户

发现兴趣用户

通常用 Jaccard 公式或者余弦相似度计算两个用户之间的相似度。设 N(u) 为用户 u 喜欢的物品集合,N(v) 为用户 v 喜欢的物品集合,那么 u 和 v 的相似度是多少呢:

  Jaccard 公式:

在这里插入图片描述
余弦相似度:
在这里插入图片描述
这公式简单点说就是:交集元素的数目/俩集合元素的数量和。例如:
A,B之间,A:a,b,c 。B:a,c,f。那么明显
N(U(A)∩U(B))=N({a,c})=2,N(A)=3,N(B)=3,则余弦相似度WAB=2/3。
假设目前共有4个用户: A、B、C、D;共有5个物品:a、b、c、d、e。用户与物品的关系(用户喜欢物品)如下图所示
在这里插入图片描述
如何一下子计算所有用户之间的相似度呢?为计算方便,通常首先需要建立“物品—用户”的倒排表,如下图所示
在这里插入图片描述
然后对于每个物品,喜欢他的用户,两两之间相同物品加1。例如喜欢物品 a 的用户有 A 和 B,那么在矩阵中他们两两加1。即求A,B,C,D之间俩俩相交元素的个数,如下图所示:
在这里插入图片描述
计算用户两两之间的相似度,上面的矩阵仅仅代表的是公式的分子部分。以余弦相似度为例,对上图进行进一步计算:
在这里插入图片描述

上代码:

dic={
   'A':('a','b','d'),'B':('a','c'),'C':('b','e'),'D':('c','d','e')}
def xtgl():
    dicc={
   }
    d= {
   }
    for k,v in dic.items():
        for i in v:
            if(i not in d.keys()):
                d[i]=set()  //将字典的值设为集合,装入元素
            d[i].add(k)
    for k,item1 in d.items():
        for i in item1:
            for j in item1:
                if<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值