当前位置: 首页 > news >正文

计算样本之间的相似度

文章目录

  • 前言
  • 一、距离度量
    • 1.1 欧几里得距离(Euclidean Distance)
    • 1.2 曼哈顿距离(Manhattan Distance)
    • 1.3 切比雪夫距离(Chebyshev Distance)
    • 1.4 闵可夫斯基距离(Minkowski Distance)
    • 1.5 余弦距离(Cosine Distance)
    • 代码演示
    • 总结
  • 二、相似度度量
    • 2.1 余弦相似度(Cosine Similarity)
    • 2.2 皮尔逊相关系数(Pearson Correlation Coefficient)
    • 2.3 杰卡德相似系数(Jaccard Similarity Coefficient)
    • 2.4 汉明距离(Hamming Distance)
    • 2.5 相关距离(Correlation Distance)
    • 代码演示
    • 总结


前言

计算样本之间的相似度通常可以通过计算样本之间的距离来实现,尽管这不是唯一的方法。距离度量和相似度度量是两个相关但不同的概念。距离度量通常用于表示样本之间的不相似程度,而相似度度量则用于表示样本之间的相似程度

一、距离度量

1.1 欧几里得距离(Euclidean Distance)

欧氏距离是两个点在 n 维空间中直线距离的度量。它是最常见的距离度量方法之一,用于计算两个向量之间的距离。

1.2 曼哈顿距离(Manhattan Distance)

曼哈顿距离,又称为城市街区距离,是指两个点在 n 维空间中各个坐标轴上的距离之和。

1.3 切比雪夫距离(Chebyshev Distance)

切比雪夫距离,又称为棋盘距离,是指两个点在 n 维空间中各个坐标轴上的最大距离。

1.4 闵可夫斯基距离(Minkowski Distance)

闵可夫斯基距离是欧氏距离和曼哈顿距离的广义形式,通过调整参数 𝑝,可以得到不同的距离度量。在这里插入图片描述

1.5 余弦距离(Cosine Distance)

通过计算两个样本点之间夹角的余弦值的补值来衡量相似度。

代码演示

import numpy as np
from sklearn.metrics.pairwise import euclidean_distances, manhattan_distances
from scipy.spatial.distance import chebyshev, minkowski, cosine# 示例向量
vector1 = np.array([1.2, 2.3, 3.4, 4.5])
vector2 = np.array([4.1, 5.2, 6.3, 7.4])# 欧几里得距离
euclidean_dist = euclidean_distances([vector1], [vector2])
print(f'Euclidean Distance: {euclidean_dist[0][0]}')# 曼哈顿距离
manhattan_dist = manhattan_distances([vector1], [vector2])
print(f'Manhattan Distance: {manhattan_dist[0][0]}')# 切比雪夫距离
chebyshev_dist = chebyshev(vector1, vector2)
print(f'Chebyshev Distance: {chebyshev_dist}')# 闵可夫斯基距离(p=3)
minkowski_dist = minkowski(vector1, vector2, p=3)
print(f'Minkowski Distance (p=3): {minkowski_dist}')# 余弦相似度
cosine_dist = cosine(vector1, vector2)
print(f'Cosine Distance: {cosine_dist}')

总结

在距离度量的五种方法中,欧几里得距离(Euclidean Distance)、曼哈顿距离(Manhattan Distance)、余弦距离 是最常用的三种。
欧几里得距离:适用于低维和中维数据,广泛用于各种机器学习算法。(低维通常在1-10维之间,中维在10—100之间)
曼哈顿距离:适用于高维数据,尤其是特征独立时。(高维>100维)
余弦距离:适用于高维稀疏数据,特别是文本数据和推荐系统。

二、相似度度量

2.1 余弦相似度(Cosine Similarity)

衡量两个向量的方向相似度,而不关注它们的大小。

2.2 皮尔逊相关系数(Pearson Correlation Coefficient)

衡量两个变量之间的线性相关性。

2.3 杰卡德相似系数(Jaccard Similarity Coefficient)

衡量两个集合的交集与并集的比值,常用于文本或集合相似度。

2.4 汉明距离(Hamming Distance)

计算两个样本在相同位置上不同元素的数量,常用于二进制数据。

2.5 相关距离(Correlation Distance)

计算两个变量之间的相关性,反映了两个向量在统计上的相似程度,是皮尔逊相关系数的补数。

代码演示

import numpy as np
from sklearn.metrics.pairwise import cosine_similarity
from scipy.spatial.distance import correlation, jaccard, hamming
from scipy.stats import pearsonr# 示例向量
vector1 = np.array([1.2, 2.3, 3.4, 4.5])
vector2 = np.array([4.1, 5.2, 6.3, 7.4])# 1. 余弦相似度(Cosine Similarity)
cosine_sim = cosine_similarity([vector1], [vector2])
print(f'Cosine Similarity: {cosine_sim[0][0]}')# 2. 皮尔逊相关系数(Pearson Correlation Coefficient)
pearson_corr, _ = pearsonr(vector1, vector2)
print(f'Pearson Correlation Coefficient: {pearson_corr}')# 3. 杰卡德相似系数(Jaccard Similarity Coefficient)
# 将向量转为布尔型(示例中使用大于2的值作为示例)
vector1_bool = vector1 > 2
vector2_bool = vector2 > 2
jaccard_sim = 1 - jaccard(vector1_bool, vector2_bool)
print(f'Jaccard Similarity Coefficient: {jaccard_sim}')# 4. 汉明距离(Hamming Distance)
# 这里的计算汉明距离先计算不相似度,再计算相似度
hamming_dist = hamming(vector1_bool, vector2_bool)
print(f'Hamming Distance: {hamming_dist}')
hamming_sim = 1 - hamming_dist
print(f'Hamming Similarity: {hamming_sim}')# 5. 相关距离(Correlation Distance)
# 这里的计算相关距离先计算不相似度,再计算相似度
correlation_dist = correlation(vector1, vector2)
correlation_sim = 1 - correlation_dist
print(f'Correlation Similarity: {correlation_sim}')

总结

在相似度度量的五种常见方法中,余弦相似度(Cosine Similarity) 和 皮尔逊相关系数(Pearson Correlation Coefficient) 是最常用的两种。
余弦相似度:适用于高维稀疏数据,如文本数据和推荐系统。
皮尔逊相关系数:适用于数值数据,衡量线性相关性。

http://www.lryc.cn/news/394208.html

相关文章:

  • 2-5 softmax 回归的简洁实现
  • 我 17 岁创业,今年 20 岁,月入 70 万,全靠低代码
  • 【Python】已解决:urllib.error.HTTPError: HTTP Error 403: Forbidden
  • 昇思12天
  • 【postgresql】 基础知识学习
  • 按键控制LED流水灯模式定时器时钟
  • 【Docker安装】OpenEuler系统下部署Docker环境
  • 小程序 使用 UI 组件 Vant Weapp 、vant组件样式覆盖
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • 迭代器模式在金融业务中的应用及其框架实现
  • 浏览器插件利器-allWebPluginV2.0.0.14-stable版发布
  • 机器学习训练之使用静态图加速
  • 数据结构速成--图
  • 昇思25天学习打卡营第12天|FCN图像语义分割
  • 昇思MindSpore学习笔记4-03生成式--Diffusion扩散模型
  • Go:hello world
  • JVM专题之内存模型以及如何判定对象已死问题
  • vscode使用Git的常用操作
  • RPC与REST
  • 计数排序的实现
  • 【Qt】QTableWidget设置可以选择多行多列,并能复制选择的内容到剪贴板
  • 跨越界限的温柔坚守
  • Vue3 对于内嵌Iframe组件进行缓存
  • L04_MySQL知识图谱
  • 什么是CNN,它和传统机器学习有什么区别
  • 游戏开发面试题3
  • postman请求访问:认证失败,无法访问系统资源
  • Apache Seata新特性支持 -- undo_log压缩
  • Java中的软件架构重构与升级策略
  • 设置Docker中时区不生效的问题