python计算余弦相似性和汉明距离

想要通过矩阵相乘去计算7个二进制编码相互间的余弦相似性, 我们得先把二进制编码转成数值向量, 针对每个二进制编码, 我们能够把0映射成-1, 把1映射成1, 借此得到一个数值向量, 接着, 我们能够把这些数值向量表示成一个矩阵, 进而进行矩阵相乘去计算余弦相似性。

以下是一个示例代码,使用和NumPy库来执行此操作:

复制代码
import numpy as np
# 7个二进制编码
binary_codes = [
    [0, 1, 0, 1, 1, 0, 0],
    [1, 0, 1, 0, 0, 1, 1],
    [0, 0, 1, 0, 1, 0, 1],
    [1, 1, 1, 0, 0, 1, 0],
    [1, 0, 0, 1, 0, 1, 0],
    [0, 1, 0, 0, 1, 0, 1],
    [1, 1, 0, 1, 1, 0, 1]
]
# 将二进制编码转换为数值向量
vectorized_codes = np.array(binary_codes) * 2 - 1
# 计算余弦相似性
cosine_similarity = np.dot(vectorized_codes, vectorized_codes.T) / np.outer(np.linalg.norm(vectorized_codes, axis=1), np.linalg.norm(vectorized_codes, axis=1))
print(cosine_similarity)

上面所说的代码, 会输出一个矩阵, 这个矩阵是7x7的, 当中的每个元素, 代表着第i个二进制编码跟第j个二进制编码之间的余弦相似性, 值的范围处于-1到1之间, 越朝着1靠近说明相似性越高, 越朝着-1靠近说明相似性越低, 对角线上的元素, 意味着每个编码与自身的相似性, 所以都应当为1。

计算余弦相似性之际, 我们得去比较向量间的夹角, 二进制编码是由0与1构成的序列, 它不含连续的数值信息, 没办法直接计算向量间的夹角,所以, 我们有必要把二进制编码转化成数值向量, 以此来进行余弦相似性的计算。

把二进制编码转成数值向量, 有一种常见办法, 那就是把0映射成-1, 把1映射成1。这么做是为了留存二进制编码的相对性质, 也就是把0还有1分别映射到数值空间里两个相距较远的点。经由这种映射, 我们能够计算向量间的夹角, 并且用余弦相似性当作相似性度量。

请留意, 此方法假定二进制编码里的0与1有着同等的重要程度, 要是对特定问题而言, 0和1带有不一样的含义或者重要性, 或许就得采用别的数值映射方式。

要是打算运用汉明距离去比较二进制编码相互间的相似程度, 能直接对编码之间的汉明距离予以计算。什么是汉明距离呢, 它指的是在长度一模一样的两个二进制编码里, 处于对应位置上不一样的位数。

下来是, 一个示例代码, 其用途是, 用以计算, 7个二进制编码, 相互之间的, 汉明距离。

复制代码
# 7个二进制编码
binary_codes = [
    [0, 1, 0, 1, 1, 0, 0],
    [1, 0, 1, 0, 0, 1, 1],
    [0, 0, 1, 0, 1, 0, 1],
    [1, 1, 1, 0, 0, 1, 0],
    [1, 0, 0, 1, 0, 1, 0],
    [0, 1, 0, 0, 1, 0, 1],
    [1, 1, 0, 1, 1, 0, 1]
]
# 计算汉明距离矩阵
hamming_distance = []
for i in range(len(binary_codes)):
    row = []
    for j in range(len(binary_codes)):
        distance = sum(bit1 != bit2 for bit1, bit2 in zip(binary_codes[i], binary_codes[j]))
        row.append(distance)
    hamming_distance.append(row)
# 输出汉明距离矩阵
for row in hamming_distance:
    print(row)
相关推荐
海绵宝宝转agent7 小时前
learn-claude-code第1-5章开源学习笔记分享
人工智能·笔记·python·学习
小奇不哭7 小时前
ROS2 单节点,RGB-D 深度相机局部路径提取 + B 样条平滑路径 + YOLOv8 障碍物检测 + 深度测距,用于移动机器人视觉局部循迹。
python·yolov8·ros2·cv2·路径探索循迹
小小龙学IT7 小时前
Python scikit-learn 机器学习库深度解析
python·机器学习·scikit-learn
2601_962071578 小时前
类变量和全局变量的查找路径有什么区别?
开发语言·python
卷无止境9 小时前
独立开发者的"富矿地带":哪些垂直领域值得你押注一辈子?
后端·python
Java后端的Ai之路9 小时前
Python进阶探索29_eval内置函数
开发语言·python·探索·eval·内置函数
计算机毕业编程指导师9 小时前
计算机毕设选题推荐:基于Hadoop与Spark的Steam游戏数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·计算机·spark·毕业设计·steam游戏
计算机毕业编程指导师9 小时前
【计算机毕设选题推荐】基于Hadoop+Spark的白鹿抖音评论大数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·hadoop·python·计算机·spark·毕业设计·抖音评论
Zootopia6269 小时前
飞行力学知识梳理1|飞行性能与稳定性
人工智能·python·算法·机器学习·无人机·学习方法·信息与通信
Y3815326629 小时前
搜索 API 延迟优化:并发数、超时与超时的真实代价
python·搜索引擎