基於上篇,有了數據特徵,再來就可以把歐氏距離發展為馬氏距離公式
(1)馬氏距離的定義:有M個樣本向量$X_1$~$X_m$,協方差矩陣為S,平均值記為向量$\mu$,則其中樣本向量X到的馬氏距離表示為:
而其中向量$X_i$與$X_j$之間的馬氏距離定義為:
若協方差矩陣是對角矩陣,則公式變成了標準化歐氏距離公式
用python實現馬氏距離
import numpy as np
def get_dist(a, b):
X = np.vstack([a, b])
V = np.cov(X.T)
VI = np.linalg.inv(V)
delta = a - b
return np.sqrt(np.einsum('nj,jk,nk->n', delta, VI, delta))
if __name__ == '__main__':
a = np.array([[1, 3, 564, 675, 6567], [2, 4, 6, 8, 10]])
b = np.array([[1, 3, 5566, 675, 6567], [1, 3, 5, 7, 9]])
print(get_dist(a.T, b.T))
output
[0.44278752 0.44278752 2.62436934 0.44278752 0.44278752]
tags: 2021IT