计算样本之间的距离--欧拉距离、曼哈顿距离和明科夫斯基距离

一、欧拉距离

欧几里得距离,也叫欧式距离。

 \sqrt{\sum_{i=1}^{n}{\left ( X^{(a)}_i}-X^{(b)}_i \right )^2}

应用举例:

1.先画个图:

代码(在jupyter工具中使用):

import numpy as np
import matplotlib.pyplot as plt

X = np.array([
    [5,1],
    [1,4]
])

plt.plot(X[:,0], X[:,1],'r-o')
plt.annotate('a', xy=X[0])
plt.annotate('b', xy=X[1])

plt.plot([1,5],[1,1],'g--')
plt.plot([1,1],[1,4],'g--')

plt.show()

np.sum((X[0]-X[1])**2)**(1/2)  # 求欧拉距离

 

距离 = √[(Xa - Xb)²+(Ya - Yb)²]

2.数学代入计算得:

3.使用numpy方法计算:

二、曼哈顿距离

\sum_{i=1}^{n}{|X^{(a)}_i-X^{(b)}_i|}

运算量相较欧拉距离简单一些

 

三、明可夫斯基距离

\left ( \sum_{i=1}^{n}{|X^{(a)}_i-X^{(b)}_i|}\right )^{\frac{1}{1}}    

\left ( \sum_{i=1}^{n}{|X^{(a)}_i-X^{(b)}_i|^{2}} \right )^{\frac{1}{2}}

\left ( \sum_{i=1}^{n}{|X^{(a)}_i-X^{(b)}_i|^{p}} \right )^{\frac{1}{p}}

p = 1 时,为曼哈顿距离;

p = 2 时,为欧拉距离;

p >2 时,为明可夫斯基距离。

举例:

1.定义求两点距离的函数,X沿用上文数组

def distance(a, b, p=2):
    return np.sum(np.abs(a-b)**p)**(1/p)

2.求欧拉距离

distance(X[0],X[1])  # 欧拉距离

3.求曼哈顿距离

distance(X[0],X[1],p=1)  # 曼哈顿距离

4.多特征值数组求其距离

# 生成一个多特征数组
X = np.array([
    [5,1,11,6],
    [1,4,43,99]
])