美文网首页算法
8种相似度度量方式的原理及实现

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

作者: elephantnose | 来源:发表于2019-06-12 11:53 被阅读0次

欧氏距离(Euclidean Distance)

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

Euclidean Distance

计算公式

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)

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

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)是向量空间中的一种度量,二个点之间的距离定义为其各座标数值差的最大值

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)

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

Minkowski

计算公式

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)是两个字符串对应位置的不同字符的个数

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)

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

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)

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

image

计算公式

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)

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

Jaccard

杰卡德相似系数计算公式

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")



参考链接

相关文章

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

    欧氏距离(Euclidean Distance) 欧氏距离(也称欧几里得度量)指在m维空间中两个点之间的真实距离,...

  • 相似度算法原理及python实现

    “古之善为士者,微妙玄通,深不可识。夫唯不可识。故强为之容:豫兮,若冬涉川;犹兮,若畏四邻;俨兮,其若客;涣兮,若...

  • 文本相似度 之余弦夹角 度量算法

    相似度度量(Similarity),即计算个体间的相似程度,相似度度量的值越小,说明个体间相似度越小,相似度的值越...

  • 余弦计算相似度理解以及计算

    相似度度量(Similarity),即计算个体间的相似程度,相似度度量的值越小,说明个体间相似度越小,相似度的值越...

  • SNN相似度计算

    共享最近邻相似度SNN原理 如果向个点都与一些相同的点相似,则即使直接的相似度度量不能指出,我们也认为他们相似。 ...

  • NLP详解

    (一)余弦相似度、向量空间模型 1、相似度 • 相似度度量:计算个体间相似程度• 相似度值越小,距离越大,相似度值...

  • Numpy计算余弦相似度:向量之间,向量与矩阵,矩阵与矩阵

    摘要:Numpy,Python 余弦相似度公式 余弦相似度是衡量向量夹角的余弦值作为相似度度量指标,夹角越小相似度...

  • 余弦相似度计算及实现

    0.绪 余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。余弦值越接近1,就表明夹角越接近0...

  • k-means

    1. K-means原理介绍 k-means通过在欧氏空间求解距离来度量“类内相似度”从而将数据聚类。简单来说,k...

  • java并发编程(一)

    **java多线程编程(一)** 基本实现方式及同步原理 --- 三种实现方式: 1、继承Thr...

网友评论

    本文标题:8种相似度度量方式的原理及实现

    本文链接:https://www.haomeiwen.com/subject/gnikfctx.html