8种相似度度量方式的原理及实现

欧氏距离(Euclidean Distance)

欧氏距离(也称欧几里得度量)指在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)

计算公式

$$dist(A,B)=\sqrt{\sum_{i=1}^n(A_i-B_i)^2}$$

试用场景

在数据完整(无维度数据缺失)的情况下, 维度间的衡量单位是一致的, 否则需要标准化处理

python实现

import numpy as np

vec1 = np.array([1, 3, 4])

vec2 = np.array([4, 2, 4])

d = np.linalg.norm(vec1-vec2, ord=2)

# 或者

d = np.sqrt(np.sum(np.square(vec1-vec2)))

曼哈顿距离(Manhattan Distance)

在欧几里得空间的固定直角坐标系上两点所形成的线段对轴产生的投影的距离总和

计算公式

$$dist(A,B)=\sum_{i=1}^n|A_i-B_i|$$

试用场景

在数据完整(无维度数据缺失)的情况下, 需要将空间划分成网格, 然后以网格为单位来进行度量, 允许4个方向

python实现

import numpy as np

vec1 = np.array([1, 3, 4])

vec2 = np.array([4, 2, 4])

d = np.linalg.norm(vec1-vec2, ord=1)

# 或者

d = np.sum(np.abs(vec1-vec2))

切比雪夫距离(Chebyshev Distance)

切比雪夫距离(Chebyshev distance)是向量空间中的一种度量,二个点之间的距离定义为其各座标数值差的最大值

计算公式

$$dist(A,B)=\max_i|A_i-B_i|$$

or

$$dist(A,B)=\lim_{p→\infty}(\sum_{i=1}^n|A_i-B_i|^p)^{\frac{1}{p}}$$

试用场景

需要将空间划分成网格, 然后以网格为单位来进行度量, 允许8个方向

python实现

import numpy as np

vec1 = np.array([1, 3, 4])

vec2 = np.array([4, 2, 4])

d = np.linalg.norm(vec1-vec2, ord=np.inf)

# 或者

d = np.abs(vec1-vec2).max()

闵可夫斯基距离(Minkowski Distance)

欧氏空间中的一种测度,被看做是欧氏距离和曼哈顿距离的一种推广

计算公式

$$dist(A,B)=\sqrt[p]{\sum_{i=1}^n|A_i-B_i|^p}$$

试用场景

当 $p=1$ 时,就是曼哈顿距离

当 $p=2$ 时,就是欧氏距离

当 $p→∞$ 时,就是切比雪夫距离

python实现

import numpy as np

vec1 = np.array([1, 3, 4])

vec2 = np.array([4, 2, 4])

"""

ord=1: 一范数

ord=2: 二范数

ord=np.inf: 无穷范数

"""

d = np.linalg.norm(vec1-vec2, ord=arg)

汉明距离(Hamming Distance)

在信息论中,两个等长字符串之间的汉明距离(Hamming distance)是两个字符串对应位置的不同字符的个数

计算公式

$$dist(A,B)=\sum_{i=0}^n{A[i]\bigoplus B[i]}$$

试用场景

信息编码(为了增强容错性,应使得编码间的最小汉明距离尽可能大)

python实现

import numpy as np

vec1 = np.array([1, 1, 0, 1, 0, 1, 0, 0, 1])

vec2 = np.array([0, 1, 1, 0, 0, 0, 1, 1, 1])

d = len(np.nonzero(vec1-vec2)[0])

# 或者

d = np.shape(np.nonzero(vec1-vec2)[0])[0]

余弦相似度(Cosine Similarity)

余弦相似度,又称为余弦相似性,是通过计算两个向量的夹角余弦值来评估他们的相似度

计算公式

$$\cos(\theta)=\cfrac{A\cdot B}{|A||B|}$$

or

$$\cos(\theta)=\cfrac{\sum_{i=1}^nA_iB_i}{\sqrt{\sum_{i=1}^nA_i^2}\sqrt{\sum_{i=1}^nB_i^2}}$$

试用场景

衡量两个向量方向的差异

python实现

import numpy as np

vec1 = np.array([1, 3, 4])

vec2 = np.array([4, 2, 4])

d = np.dot(vec1,vec2)/(np.linalg.norm(vec1)*(np.linalg.norm(vec2)))

皮尔森相关系数(Pearson Correlation Coefficient)

用于度量两个变量之间的相关程度

计算公式

$$P(A,B)=\cfrac{\sum_{i=1}^n(A_i-\overline A)(B_i-\overline B)}{\sqrt{\sum_{i=1}^n(A_i-\overline A)^2\sum_{i=1}^n(B_i-\overline B)^2}}$$

试用场景

反映两个变量是正相关还是负相关

python实现

import numpy as np

vec1 = np.array([1, 3, 4])

vec2 = np.array([4, 2, 4])

p = np.corrcoef(vec1, vec2)

杰卡德相似系数(Jaccard Similarity Coefficient)及杰卡德距离(Jaccard Distance)

用于比较有限样本集之间的相似性与差异性

杰卡德相似系数计算公式

$$J(A,B)=\cfrac{|A\bigcap B|}{|A\bigcup B|}$$

杰卡德距离计算公式

$$J_\delta(A,B)=1-J(A,B)=\cfrac{|A\bigcup B|-|A\bigcap B|}{|A\bigcup B|}$$

试用场景

比较文本相似度,用于文本查重与去重;

计算对象间距离,用于数据聚类或衡量两个集合的区分度等。

python实现

import numpy as np

import scipy.spatial.distance as dist

vec1 = np.array([1, 1, 0, 1, 0, 1, 0, 0, 1])

vec2 = np.array([0, 1, 1, 0, 0, 0, 1, 1, 1])

d = dist.pdist(np.array([vec1, vec2]), "jaccard")

参考链接

python npv 计算公式_8种相似度度量方式的原理及实现相关推荐

  1. 8种相似度度量方式的原理及实现【笔记自用】【1】

    8种相似度度量方式的原理及实现 欧氏距离(Euclidean Distance) 曼哈顿距离(Manhattan Distance) 切比雪夫距离(Chebyshev Distance) 闵可夫斯基距 ...

  2. python 线性回归函数_8种用Python实现线性回归的方法,究竟哪个方法最高效?

    大数据文摘作品 作者:TirthajyotiSarkar 编译:丁慧.katherine Hou.钱天培 说到如何用Python执行线性回归,大部分人会立刻想到用sklearn的linear_mode ...

  3. 基于python的selenium两种文件上传方式

    方法一.input标签上传     如果是input标签,可以直接输入路径,那么可以直接调用send_keys输入路径. 方法二.非input标签上传 这种上传方式需要借助第三方工具,主要有以下三种情 ...

  4. 最常见的几种手机快充方式和原理

    智能手机的兴起使得手机耗电量急速上升,而成本.电池技术都限制了电池续航时间,在没有办法解决电池续航问题的时候,为用户提供更快的充电速度似乎成了解决手机待机问题理所当然的方法,在这个大背景下,现在的手机 ...

  5. python npv 计算公式_Python numpy 中常用的数据运算

    Numpy 精通面向数组编程和思维方式是成为Python科学计算大牛的一大关键步骤.--<利用Python进行数据分析> Numpy(Numerical Python)是Python科学计 ...

  6. python npv 计算公式_机器学习各种相似性度量及Python实现

    在做很多研究问题时常常需要估算不同样本之间的相似性度量(Similarity Measurement),这时通常采用的方法就是计算样本间的"距离"(Distance).采用什么样的 ...

  7. python列表代码_8种高级的Python列表使用技巧,都给你整理好啦(附实操代码)...

    Python中的列表是我们很常见的数据结构之一,也是很强大的数据结构之一!Python列表功能非常丰富,并且具有很多隐藏的技巧没有被发现. 一.使用Python过滤列表 1.使用Filter()函数 ...

  8. python end用法_8种高级的Python列表使用技巧,都给你整理好啦(附实操代码)

    Python中的列表是我们很常见的数据结构之一,也是很强大的数据结构之一!Python列表功能非常丰富,并且具有很多隐藏的技巧没有被发现. 一.使用Python过滤列表 1.使用Filter()函数 ...

  9. python npv 计算公式_Python for NPV and IRR

    计算NPV和IRR,可以直接调用numpy或是numpy-financial模块的npv()和irr()函数,具体请移步https://www.jianshu.com/p/91b0ee7a98c8 . ...

最新文章

  1. 深度启动盘工具linux,Linux下无法安装深度启动盘制作工具
  2. 第十七章 扩展Python
  3. profile 配置文件修改后如何生效?
  4. android应用自动打开网页,Android 使用Scheme实现从网页启动APP
  5. string和StringBuilder的选择
  6. 商业认知,新的一年已经开始,许多老板都制订了新的目标
  7. 艰难的时候总会过去,只要你能坚持下来~
  8. 吃完饭打嗝原因及治疗方法(分享)
  9. Python 接口测试(三)
  10. java d打字游戏_Java实现打字游戏
  11. 3U VPX导冷高性能SRIO/以太网数据交换板
  12. QT Designer中编辑菜单栏技巧
  13. 服务器显示屏 超出工作频率范围,Win10显示器显示超出工作频率范围解决方法
  14. R语言使用survival包的Surv函数创建生存对象、建立Cox回归模型(包含所有协变量)比较不同治疗方法生存率的差异、使用predict函数对cox模型进行新数据的预测和推理(预测死亡风险)
  15. 解决ubuntu下wps卡顿和缺少字体
  16. 聊聊同步/异步/阻塞/非阻塞(举栗子说明)
  17. 事关健康、教育和工资 | 1月起,这些事有变化 |
  18. ASEMI整流二极管MR754参数,MR754图片,MR754应用
  19. 魔百盒哪款型号配置高_哪种电脑配置好 这两款电脑配置高良心价格
  20. Stetho调试神器使用

热门文章

  1. 什么样的人适合当老板?
  2. state-farm-distracted-driver-detection (Kaggle 比赛总结)
  3. 【C语言】字符串和内存函数详解
  4. 如何让电脑不进入黑屏状态,教程在这里,WIN10系统下电脑怎么设置成不黑屏
  5. 解决一下华为手机选取相册照片,选取不到问题。
  6. 文件服务器资源管理器(FSRM)
  7. 手机拍花海,有没梦幻的赶脚?
  8. 想创业不知道做什么好,看懂了这些,你就会了!
  9. Vue3 跨域问题解决方案
  10. TFLite: flatbuffers