杰卡德相似度(Jaccard)详解及在UserCF中的应用

这篇具有很好参考价值的文章主要介绍了杰卡德相似度(Jaccard)详解及在UserCF中的应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、杰卡德相似度(Jaccard)

这个是衡量两个集合的相似度一种指标。 两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示

杰卡德相似度(Jaccard)详解及在UserCF中的应用

另一种表示的方法:

杰卡德相似度(Jaccard)详解及在UserCF中的应用

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)详解及在UserCF中的应用

杰卡德相似度(Jaccard)详解及在UserCF中的应用

jaccard系数衡量文本相似性

虽然jaccard主要是在维度分析这样的稀疏向量中作用比较大,但是在文本相似度计算时也可用jaccard。

用在文本相似度上,就是将字符串A, B分别进行分词,用交集中的词语数和并集中的词语数求比值。

A = [今天,天气,真好]

B = [今天,天气,不错]

杰卡德相似度(Jaccard)详解及在UserCF中的应用

转换为01向量

杰卡德相似度(Jaccard)详解及在UserCF中的应用

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

杰卡德相似度(Jaccard)详解及在UserCF中的应用

杰卡德相似度(Jaccard)详解及在UserCF中的应用

# 计算所有数据两两之间的杰卡德相似系数

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

杰卡德相似度(Jaccard)详解及在UserCF中的应用

#为每个用户找到最相似的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] = top2

print("每个用户最相似的两个用户")
topN_users

杰卡德相似度(Jaccard)详解及在UserCF中的应用

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中的应用

与传统相似性度量方法相比,杰卡德方法完善了余弦相似性只考虑用户评分而忽略了其他信息量的弊端,特别适合于应用到稀疏度过高的数据文章来源地址https://www.toymoban.com/news/detail-413525.html

到了这里,关于杰卡德相似度(Jaccard)详解及在UserCF中的应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【npm】常用的NPM命令及在开发过程中的应用

    NPM(Node Package Manager)是JavaScript的包管理工具,也是世界上最大的软件注册表。它允许开发者共享和重用代码,并便于管理各种Node.js的包依赖。本文将介绍一些常用的NPM命令,并探讨它们在不同开发场景中的具体应用。 npm init 和 npm init -y 当开始一个新项目时,我们通常首先

    2024年04月22日
    浏览(35)
  • CMIP6数据处理及在气候变化、水文、生态等领域中的实践技术应用

    查看原文 最新CMIP6数据处理及在气候变化、水文、生态等领域中的实践技术应用 气候变化对农业、生态系统、社会经济以及人类的生存与发展具有深远影响,是当前全球关注的核心议题之一。IPCC(Intergovernmental Panel on Climate Change,政府间气候变化专门委员会)的第六次评估报

    2024年02月15日
    浏览(40)
  • 计算机视觉中的多样性: 相似性度量的实践与应用

    计算机视觉(Computer Vision)是人工智能领域的一个重要分支,主要关注于从图像和视频中抽取和理解有意义的信息。在计算机视觉任务中,相似性度量是一个重要的概念,它用于衡量两个特征向量之间的相似程度。随着计算机视觉技术的不断发展,我们需要更加准确、高效地衡

    2024年02月20日
    浏览(42)
  • 图像检索技术研究:深度度量与深度散列在相似性学习中的应用比较与实践 - 使用Python与Jupyter环境

    引言 在计算机视觉领域,图像检索是一个长期存在并持续受到研究者关注的重要话题。随着大数据时代的到来,如何高效、准确地从海量数据中检索到相似的图像成为一个巨大的挑战。传统的检索方法在大数据环境下表现不佳,而深度学习技术的崛起为图像检索带来了新的机

    2024年02月12日
    浏览(43)
  • 【Git常用命令及在IDEA中的使用】

    Git 是一个分布式版本控制工具,通常用来对软件开发过程中的源代码文件进行管理。通过Git 仓库来存储和管理这些文件,Git 仓库分为两种: 本地仓库:开发人员自己电脑上的 Git 仓库 远程仓库:远程服务器上的 Git 仓库 commit:提交将本地文件和版本信息保存到本地仓库 push:推送

    2024年02月10日
    浏览(32)
  • 人员定位系统的功能及在不同领域的应用

    人员定位系统是实时定位系统(RTLS)的一种,是用于跟踪人员位置的软硬件一体化系统。它使用无线通信技术和传感器来获取位置数据,并将其发送到监控中心或移动设备。它在多个领域使用,包括工业、医疗保健、军事、物流等。下面我们将讨论人员定位系统的功能及在不

    2024年02月07日
    浏览(54)
  • websocket封装及在父组件中的详细用法实例

    //————————————————websocket组件—————————————— template   div/div /template script setup lang=\\\"ts\\\" name=\\\"websocket-tool\\\" const emit = defineEmits([\\\"getWSmsg\\\"]); const props = defineProps({   uri: {     type: String,   }, }); const state = reactive({   webSocket: ref(), // webSocket实例   l

    2024年02月03日
    浏览(37)
  • 结构体对齐原理及在STM32中的设计原则和实现

    在嵌入式系统开发中,结构体作为一种常见的数据组织方式,在内存中的布局方式对于程序性能和内存占用具有重要影响。本文将深入探讨单片机C语言中的结构体对齐原理、重要性以及不同的对齐方式,并通过示例演示结构体对齐如何影响内存占用、访问性能以及传输与存储

    2024年02月10日
    浏览(36)
  • Node.js安装教程及在vscode中的配置(超详细)

    超详细的Node. js安装教程及在vscode中的配置 如果教程中出现了错误或者有其他问题,欢迎指正,我会积极改正的,希望能帮到你们。 一、Node . js 下载安装教程 1、下载安装 进入nodejs官网,下载18.15.0长期维护版。 下载网址链接:Node.js (nodejs.org)​​​​​​   2、下载后双击

    2024年02月03日
    浏览(53)
  • LLM技术发展及在垂直领域中如何应用-经验学习大全

    语言建模(LM)是提高机器语言智能的主要方法之一。一般来说,LM旨在对词序列的生成概率进行建模,以预测未来tokens的概率。语言建模的研究在文献中受到了广泛关注,可以分为四个主要发展阶段: 统计语言模型(SLM) : 起源于 20世纪90年代。其基本思想是基于马尔可夫假

    2024年02月15日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包