杰卡德相似度(Jaccard)详解及在UserCF中的应用
1、杰卡德相似度(Jaccard)
这个是衡量两个集合
的相似度一种指标。 两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示
另一种表示的方法:
jaccard系数衡量维度相似性
jaccard系数很适合用来分析多个维度间的相似性,也多被用于推荐系统中用来给用户推荐相似的产品或业务。
举个例子,要计算某网站的两个用户的相似性,可以从性别、地区、年龄、浏览时间等等维度进行分析,我们把这些维度再进行细化:
男性、女性、小于18岁、18岁-40岁、40岁以上、浏览时间为早上、浏览时间为中午、浏览时间为下午
将以上维度作为一个集合,对两个用户A 和B ,将符合以上维度的指标值置为1,其他置为0。
假设用户A = [男性=1, 女性=0, 小于18岁=0, 18岁-40岁=1, 40岁以上=0, 浏览时间为早上=0, 浏览时间为中午=0, 浏览时间为下午=1]
假设用户B = [男性=1, 女性=0, 小于18岁=1, 18岁-40岁=0, 40岁以上=0, 浏览时间为早上=0, 浏览时间为中午=0, 浏览时间为下午=1]
即他们只有年龄不同,则根据计算公式,得到的jaccard系数值为:
jaccard系数衡量文本相似性
虽然jaccard主要是在维度分析这样的稀疏向量中作用比较大,但是在文本相似度计算时也可用jaccard。
用在文本相似度上,就是将字符串A, B分别进行分词,用交集中的词语数和并集中的词语数求比值。
A = [今天,天气,真好]
B = [今天,天气,不错]
转换为01向量
jaccard相似度在UserCF中应用示例
import numpy as np
import pandas as pd#构建用户购买记录数据集(1买了,0没买)
users = ["User1","User2","User3","User4","User5",]
items = ["ItemA","ItemB","ItemC","ItemD","ItemE"]
datasets = [[1,0,1,1,0],[1,0,0,1,1],[1,0,1,0,0],[0,1,0,1,1],[1,1,1,0,1]
]
df = pd.DataFrame(datasets,columns=items,index=users)df
# 计算所有数据两两之间的杰卡德相似系数from sklearn.metrics.pairwise import pairwise_distances# 计算用户的相似度 ( 相似度 = 1 - 杰卡德距离 )
user_similar = 1 - pairwise_distances(df.values,metric='jaccard')
user_similar = pd.DataFrame(user_similar,columns=users,index=users)
print("用户之间的相似度")
user_similar
#为每个用户找到最相似的K个用户(k=2)
topN_users = {}
for i in user_similar.index:_df = user_similar.loc[i].drop(i)#取出第i个用户的那一行,删除自身(自己与自己的相似度为1)_df_sorted = _df.sort_values(ascending = False) #降序排列top2 = list(_df_sorted.index[:2])#找到前两个topN_users[i] = top2print("每个用户最相似的两个用户")
topN_users
rs_users = {}
for user,sim_users in topN_users.items():rs_user = set()# 每个用户都有一个推荐结果for sim_user in sim_users:#和该用户相似的用户都买过什么,放在一起,set去重rs_user = rs_user.union(set(df.loc[sim_user].replace(0,np.nan).dropna().index))rs_user -= set(df.loc[user].replace(0,np.nan).dropna().index)#除去自己买了的rs_users[user] = rs_user
print("基于用户推荐")
rs_users
与传统相似性度量方法相比,杰卡德方法完善了余弦相似性只考虑用户评分而忽略了其他信息量的弊端,特别适合于应用到稀疏度过高的数据
杰卡德相似度(Jaccard)详解及在UserCF中的应用相关推荐
- 杰卡德相似度(Jaccard similarity)
杰卡德相似度(Jaccard similarity) 先总体上从ChatGPT上了解个大概 科普 杰卡德相似度 概述 主要应用场景 Python代码实现: 先总体上从ChatGPT上了解个大概 杰卡德 ...
- 文本相似度算法Jaccard相似度(杰卡德相似度)java实现
文本相似度算法 杰卡德相似度,指的是文本A与文本B中交集的字数除以并集的字数,公式非常简单: java代码 import java.util.HashSet; import java.util.Sca ...
- 机器学习中的数学——距离定义(十三):杰卡德距离(Jaccard Distance)和杰卡德相似系数(Jaccard Similarity Coefficient)
分类目录:<机器学习中的数学>总目录 相关文章: · 距离定义:基础知识 · 距离定义(一):欧几里得距离(Euclidean Distance) · 距离定义(二):曼哈顿距离(Manh ...
- 图算法—杰卡德相似度
图算法-杰卡德相似度 1.图算法 图是一种表示两两对象之间的抽象数据结构,使用顶点与边进行表示,图计算就是在基于图数据上进行有目的性和针对性的计算过程,指解决一系列问题和发现潜在的数据价值,而图算法是 ...
- 【转】自然语言处理:文本相似度计算(欧氏距离、余弦相似度、编辑距离、杰卡德相似度)
文本相似度,顾名思义是指两个文本(文章)之间的相似度,在搜索引擎.推荐系统.论文鉴定.机器翻译.自动应答.命名实体识别.拼写纠错等领域有广泛的应用. 与之相对应的,还有一个概念--文本距离--指的是两 ...
- 自然语言处理:文本相似度计算(欧氏距离、余弦相似度、编辑距离、杰卡德相似度)
文本相似度,顾名思义是指两个文本(文章)之间的相似度,在搜索引擎.推荐系统.论文鉴定.机器翻译.自动应答.命名实体识别.拼写纠错等领域有广泛的应用. 与之相对应的,还有一个概念--文本距离--指的是两 ...
- python英语字典程序修改_详解如何修改python中字典的键和值
我们知道python中字典是无序的,它们都是通过hash去对应的.一般的如果我们需要修改字典的值,只需要直接覆盖即可,而修改字典的键,则需要使用字典自带的pop函数,示例如下: t = {} t['a ...
- 详解Linux2.6内核中基于platform机制的驱动模型
原文地址:详解Linux2.6内核中基于platform机制的驱动模型 作者:nacichan [摘要]本文以Linux 2.6.25 内核为例,分析了基于platform总线的驱动模型.首先介绍了P ...
- 详解Java多线程编程中LockSupport类的线程阻塞用法
转载自 详解Java多线程编程中LockSupport类的线程阻塞用法 LockSupport类是Java6(JSR166-JUC)引入的一个类,提供了基本的线程同步原语.LockSupport实际 ...
最新文章
- Android游戏开发基础part2--Canvas画布
- 宏基因组蚂蚁森林合种——胡杨专车
- Liunx中进程和计划任务管理
- 程序填充(指针):3数排序_排序算法之快速排序,它为什么这么快?
- 人工智能的本源与展望:从亚里士多德到平行智能
- java string范围_java,String
- Java实现进制转换方法汇总
- 路在何方 路在脚下 -- !!
- 深圳市社会医疗保险门诊大病管理办法
- vPro里面的v代表什么意思?
- java开发设置用户头像_如何修改 WordPress 的用户默认头像?
- 思科-实验10:路由器接口 PPP 协议封装和 PAP、CHAP 验证配置
- SDN软件定义网络 学习笔记(4)--数据平面
- SmartUpload综合
- 一分钟学会自定义右上角显示数字的ImageView
- 如何做一个“实用”的图像数据集
- css强制换行和禁止换行
- 3D打印机开源项目遭克隆或成开源拐点
- win11更新后任务栏空白电脑卡死怎么办?
- mysql修改EST时区,mysql时间修改