常用度量方法

2019-07-22  本文已影响0人  xingzai

度量两个文本的相似度,或者距离,可以有很多方法,余弦夹角只是一种。本文简单列了一下常用的距离。

需要注意的是,本文中列的方法,有的是距离,也就是指越小越相似,有的是相似度,值越大越相似。

在 Python 的距离包 pairwise_distances 中,统一处理成了距离,即都是值越小,则距离越小、越相似。
本文中统一用下面两个文本作为例子:
text1 = '上海市市级科技重大专项’
text2 = '上海市国家级科研重大项目'

将2个进行分词,选取词维度有:
(上海市, 市级, 国家级, 科技, 科研, 重大, 专项, 项目)
x = (1, 1, 0, 1, 0, 1, 1, 0)
y = (1, 0, 1, 0, 1, 1, 0, 1)

OK,下面结合这个例子,具体介绍下各种距离:

1. 闵氏距离(Minkowski distance)

设 n 维空间中有两点坐标 x, y,p 为常数,闵式距离定义为:
D(x, y) = \lgroup\sum_{u=1}^{n}|x_u - y_u|^p\rgroup^\frac{1}{p}
注意:

2. 曼哈顿距离(Manhattan distance)

  作为闵可夫斯基距离的一种特例,当p=1时,得到绝对值距离,也叫曼哈顿距离、出租汽车距离或街区距离。在二维空间中可以看出,这种距离是计算两点之间的直角边距离。



图中红线代表曼哈顿距离,绿色代表欧氏距离,也就是直线距离,而蓝色和黄色代表等价的曼哈顿距离。


3. 欧氏距离(Euclidean distance)

  当p=2时,得到欧几里德距离,就是两点之间的直线距离。欧氏距离中各特征参数是等权的。


4. 切比雪夫距离(Chebyshev Distance)

p\to \infty,得到切比雪夫距离。
数学上,切比雪夫距离或是L_{\infty}度量是向量空间中的一种度量,二个点之间的距离定义为其各座标数值差的最大值。以(x1,y1)和(x2,y2)二点为例,其切比雪夫距离为max(|x_2 - x_1|, |y_2 - y_1|)切比雪夫距离得名自俄罗斯数学家切比雪夫。

5. 马氏距离(Mahalanobis Distance)

  马氏距离(Mahalanobis Distance)表示数据的 协方差距离。它是一种有效的计算两个未知样本集的相似度的方法。与欧氏距离不同的是它考虑到各种特性之间的联系(例如:一条关于身高的信息会带来一条关于体重的信息,因为两者是有关联的)并且是尺度无关的(scale-invariant),即独立于测量尺度。
  马氏距离有很多优点,马氏距离不受量纲的影响,两点之间的马氏距离与原始数据的测量单位无关;由标准化数据和中心化数据(即原始数据与均值之差)计算出的二点之间的马氏距离相同。马氏距离还可以排除变量之间的相关性的干扰。它的缺点是夸大了变化微小的变量的作用。

6. 海明距离(Hamming Distance)

海明距离为两串向量中,对应元素不一样的个数,比如101010与101011的最后一位不一样,那么hamming distance即为1,,同理000与111的hamming为3。

但这没有考虑到向量的长度,如111111000与111111111的距离也是3,尤其是比较文本的相似时,这样的结果肯定不合理,因此我们可以用向量长度作为分母。Python 中的 hamming distance 即这么计算的。

海明距离也是值越小越相似。但除以长度之后的海明距离,最大值为1(完全不相似),最小值为0(完全一致)。


7. 杰卡德距离(Jaccard Distance)


比如本例中的两个文本:

text1 = '上海市市级科技重大专项’ → {上海市, 市级, 科技, 重大, 专项 }
text2 = '上海市国家级科研重大项目' → {上海市, 国家级, 科研, 重大, 项目}

交集有2个(上海市,重大),并集有8个。
因此Jaccard系数为:1/4。

转化成向量计算,其实跟 hamming 距离是一样的,都是对应元素相同的个数,除以向量的个数。


8. 相关距离

9. 余弦距离

10. 信息熵

上一篇下一篇

猜你喜欢

热点阅读