计算物品的相似度矩阵

2023-11-03

计算物品的相似度矩阵

例如现在有A、B、C、D四个用户,分别对a、b、c、d、e五个物品表达了自己喜好程度(通过评分高低来表现自己的偏好程度高低),计算物品之间的相似度矩阵
在这里插入图片描述

算法
1、建立用户物品倒排表
A a b d
B a c e
C b e
D b d e

2、构建同现矩阵
同现矩阵表示同时喜欢两个物品的用户数,根据用户物品倒排表计算出来

同现矩阵表示同时喜欢两个物品的用户数,根据用户物品倒排表计算出来
3、统计每个物品有行为的用户数
在这里插入图片描述
在这里插入图片描述
4、计算物品之间的相似度,得到物品之间的相似度矩阵
在这里插入图片描述
分母 是喜欢物品i的用户数;
分子 是同时喜欢物品i和物品j的用户数。
在这里插入图片描述
代码

class ItemCF:
    def __init__(self):
        self.user_score_dict = self.initUserScore()
        self.items_sim = self.ItemSimilarity()
    # 初始化用户评分数据
    def initUserScore(self):
        user_score_dict = {
            "A": {"a": 3.0, "b": 4.0, "c": 0.0, "d": 3.5, "e": 0.0},
            "B": {"a": 4.0, "b": 0.0, "c": 4.5, "d": 0.0, "e": 3.5},
            "C": {"a": 0.0, "b": 3.5, "c": 0.0, "d": 0.0, "e": 3.0},
            "D": {"a": 0.0, "b": 4.0, "c": 0.0, "d": 3.5, "e": 3.0},
        }
        return user_score_dict

    #  计算item之间的相似度
    def ItemSimilarity(self):
        itemSim = dict()
        # 得到每个物品有多少用户产生过行为
        item_user_count = dict()
        # 同现矩阵
        count = dict()
        for user, item in self.user_score_dict.items():
            for i in item.keys():
                item_user_count.setdefault(i, 0)
                if self.user_score_dict[user][i] > 0.0:
                    item_user_count[i] += 1
                for j in item.keys():
                    count.setdefault(i, {}).setdefault(j, 0)
                    if (
                        self.user_score_dict[user][i] > 0.0
                        and self.user_score_dict[user][j] > 0.0
                        and i != j
                    ):
                        count[i][j] += 1
         # 共现矩阵 -> 相似度矩阵
        for i, related_items in count.items():
            itemSim.setdefault(i, dict())
            for j, cuv in related_items.items():
                itemSim[i].setdefault(j, 0)
                itemSim[i][j] = cuv / item_user_count[i]
        return itemSim

if __name__ == "__main__":
    m=ItemCF()
print(m.ItemSimilarity())

运行结果
在这里插入图片描述
参考书本
项 亮编著,陈 义 ,王 益审校.北京:人民邮电出版社,2016:6

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算物品的相似度矩阵 的相关文章

随机推荐

  • vscode 更新报错,中止以后软件打不开的修复方式

    前言 今天打开 vscode 正准备敲代码的时候 发现 vscode 提示升级 于是想也不想的点了升级 当然 你也可以在这里手动检查程序是否升级了 然后悲剧就发生了 升级到一半的时候 提示进行不下去了 问我是否要重试 或者终止 当时没截图
  • Qt天气预报

    目录 环境 weather pro main cpp weather h weather cpp weatherdata h 今天 未来6天数据体 weathertool h 获取城市编码工具类 ui weather h UI设计器生成的头
  • 【批处理DOS-CMD命令-汇总和小结】-利用cmd命令生成随机数、生成指定范围的随机数

    零 转载链接 bat脚本的基本命令语法 整合侠 博客园 一 cmd命令的随机数取值范围 RANDOM 系统变量只能返回 0 到 32767 之间的任意十进制数字 2的15次方等于32768 上面的0 32767实际就是15位二进制数的范围
  • git----pathspec ‘ ‘ did not match any file(s) known to git

    一 问题描述 场景 在前辈刚刚提交了自己的分支之后 我想切换过去 却发生了如下错误 在这之前你得确认你本地的代码提交且push 如果你的分支上没有代码改动的话 按如下操作解决 二 问题解决 首先查看分支情况 如果没有你想切换的分支名字 先获
  • OLED拼接屏,从选购到安装,手把手教您

    OLED拼接屏是一种高端的显示屏 它由多个OLED屏幕拼接而成 可以实现更大尺寸的显示效果 在使用OLED拼接屏时 需要注意一些细节 下面是OLED拼接屏的教程 1 选择合适的OLED屏幕 在选择OLED屏幕时 需要考虑屏幕的尺寸 分辨率
  • 嘉立创元器件及封装导入AD20

    第一步 建一个集成库 在集成库里添加原理图库和PCB元件库 第二步 在嘉立创软件或者网页里找到你要导入AD的元件 第三歩 将元件的原理图和封装分别以AD的格式导出 第四步 将导出的原理图和封装导入AD 第五步 将原理图生成原理图库 复制后粘
  • android studio第三方框架总结

    第三方框架gradle添加 UI Material design和Support library控件 compile com android support appcompat v7 25 3 1 compile com android s
  • 搭建一个Fabric网络

    生成相关证书文件 首先Fabric提供了一些工具用于生成所需的文件 cryptogen模块会根据提供的配置文件生成后续模块运行过程中需要的证书和数据文件 cryptogen常用命令 generate用于根据配置文件生成证书 showtemp
  • DS18B20使用说明

    DS18B20 温湿度监测模块 芯片介绍 基础介绍 引脚介绍 DS18B20是单总线协议的典型代表 同时也是单总线协议最广泛的应用场景 是常用的数字温度传感器 其输出的是数字信号 具有体积小 硬件开销低 抗干扰能力强 精度高的特点 DS18
  • 动态SQL,模糊查询,关联查询

    一 和 的区别 相同点 这两个都是占位符 用来指定传入sql的参数 不同点 这个是预编译的 不会发生sql注入 如果需要使用拼接的话可以使用sql的内置函数contact 这个是将其中的变量通过字符串拼接的方式插入到sql语句中的 容易发生
  • CodeSmith 使用教程(10): CodeTemplateInfo 对象

    通过CodeTemplateInfo对象可以获取代码模板文件本身的一些信息 比如文件名 源语言 编码方法 其支持的属性有 属性名 描述 CodeBehind 该模板的Code behind的文件名或者模板不使用CodeBehind时为空字符
  • Gromacs初探

    1 Gromacs是用来干什么的 分子动力学模拟是分子模拟中最接近实验条件的模拟方法 能够从原子层面给出体系的微观演化过程 直观地展示实验现象发生的机理与规律 gromacs就是一个用于分子动力学模拟的程序 2 Gromacs的步骤 以T4
  • 项目部署K8s中excel导出模板名乱码

    问题描述 线下环境测试问题 部署到k8s上时 导出报表1时 导出时用的时报表2的模板 进入镜像中查询template下的导出模板 发现模板名都是问号 乱码 而且数量少了一个 可能由于这两个模板的名字都是5个汉字 导致tomcat解析时变成了
  • 还在select 1 union select 2 union……?

    要目录干啥 用Union吧 太长 用values吧 神奇 引申Values用法 用Union吧 太长 有时候 要临时建个短列表 2047以内的纯数字还不错 有个表 也够用 select number from master spt valu
  • 人脸识别、无人驾驶背后:是谁在造人工大脑?

    NEW 关注剁手日记视频号 最新视频 OPPO下一代屏下镜头技术 这可能才是你想要的全面屏 来源 科技新知 文 樟稻 编辑 伊页 转瞬之间 ILSVRC比赛 又称ImageNet比赛 已经停办了四年 作为机器视觉领域最受追捧也是最具权威的学
  • 【马士兵】Python基础--07(列表)

    Python基础 07 文章目录 Python基础 07 列表的添加操作 列表中的删除操作 列表元素的修改操作 对列表的排序操作 列表生成式 列表的添加操作 列表的添加元素有四种方法 列表的添加操作不改变列表的id值 所以相当于没有新的列表
  • python 点云处理 使用plyfile库写.ply文件

    点云处理时 关使用python读写 ply文件的博客并不多 而且要么是从ply文件头部开始写起 要么是csdn收费的 所以这里写一个博客记录下 1 读ply文件 这个很简单 具体可以看官方文档 代码 首先安装plyfile库 pip ins
  • 关于Oracle sql查询未走索引的问题(第二次查询比第一次查询更慢)

    这段时间发现查询一个大表很慢 这个表数据量大概有3亿多 第一次查询发现返回数据很快 即正常使用索引 紧接着 再次执行这语句时 发现查询很慢 很久才返回数据 按照oracle正常sql查询来说 第二次查询应该是比第一次更快才对 所以这想象没有
  • 深入浅出谈数据挖掘

    作 者 段勇 一 数据挖掘的本质 一般来说 比较狭义的观点认为数据挖掘区别于常规数据分析的关键点在于 数据挖掘主要侧重解决四类问题 分类 聚类 关联 预测 关于这四类问题后文会详细阐述 而常规数据分析则侧重于解决除此之外的其他数据分析问题
  • 计算物品的相似度矩阵

    计算物品的相似度矩阵 例如现在有A B C D四个用户 分别对a b c d e五个物品表达了自己喜好程度 通过评分高低来表现自己的偏好程度高低 计算物品之间的相似度矩阵 算法 1 建立用户物品倒排表 A a b d B a c e C b