iT邦幫忙

2021 iThome 鐵人賽

DAY 24
0
自我挑戰組

終極大數據地獄系列 第 24

#24 數據中中的特徵相關性(3)

基於上篇,有了數據特徵,再來就可以把歐氏距離發展為馬氏距離公式

馬氏距離公式(Mahalanobis Distance)

(1)馬氏距離的定義:有M個樣本向量$X_1$~$X_m$,協方差矩陣為S,平均值記為向量$\mu$,則其中樣本向量X到https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu的馬氏距離表示為:
https://chart.googleapis.com/chart?cht=tx&chl=D(X)%3D%5Csqrt%7B(X-%5Cmu)%5ETS%5E%7B-1%7D(X-%5Cmu)%7D

而其中向量$X_i$與$X_j$之間的馬氏距離定義為:
https://chart.googleapis.com/chart?cht=tx&chl=D(X_i%2CX_j)%3D%5Csqrt%7B(X_i-X_j)%5ETS%5E%7B-1%7D(X_i-X_j)%7D

若協方差矩陣是對角矩陣,則公式變成了標準化歐氏距離公式

  • 馬氏距離優點:量剛無關,排除變數之間相關性的干擾

用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: tags: 2021IT

上一篇
#23 數據中中的特徵相關性(2)
系列文
終極大數據地獄24

尚未有邦友留言

立即登入留言