给个关注和转发
所列的距离公式列表和代码如下:
- 闵可夫斯基距离(Minkowski Distance)
- 欧氏距离(Euclidean Distance)
- 曼哈顿距离(Manhattan Distance)
- 切比雪夫距离(Chebyshev Distance)
- 夹角余弦(Cosine)
- 汉明距离(Hamming distance)
- 杰卡德相似系数(Jaccard similarity coefficient)
- 编辑距离(Edit Distance)
- 标准化欧氏距离 (Standardized Euclidean distance )
- 马氏距离(Mahalanobis Distance)
- 皮尔逊相关系数(Pearson correlation)
- 布雷柯蒂斯距离(Bray Curtis Distance)
读者可根据自己需求有选择的学习。因使用矢量编程的方法,距离计算得到了较大的简化。
1. 闵可夫斯基距离(Minkowski Distance)
严格意义上,闵氏距离不是一种距离,而是一组距离的定义。
(1)闵氏距离的定义:
两个n维变量A(x11,x12,…,x1n)与 B(x21,x22,…,x2n)间的闵可夫斯基距离定义为:
其中p是一个变参数。
当p=1时,就是曼哈顿距离
当p=2时,就是欧氏距离
当p→∞时,就是切比雪夫距离
根据变参数的不同,闵氏距离可以表示一类的距离。
(2)闵氏距离的缺点
闵氏距离,包括曼哈顿距离、欧氏距离和切比雪夫距离都存在明显的缺点。
举个例子:二维样本(身高,体重),其中身高范围是150~190,体重范围是50~60,有三个样本:a(180,50),b(190,50),c(180,60)。那么a与b之间的闵氏距离(无论是曼哈顿距离、欧氏距离或切比雪夫距离)等于a与c之间的闵氏距离,但是身高的10cm真的等价于体重的10kg么?因此用闵氏距离来衡量这些样本间的相似度很有问题。
简单说来,闵氏距离的缺点主要有两个:
(1)将各个分量的量纲(scale),也就是“单位”当作相同的看待了。
(2)没有考虑各个分量的分布(期望,方差等)可能是不同的。
python中的实现:
# -*- coding:utf-8 -*-import numpy as npx=np.random.random(10)y=np.random.random(10)#方法一:根据公式求解,p=