マハラノビス距離とは値とデータ平均値の距離のこと
通常ユークリッド距離を使いそうだが
異常度にユークリッド距離を使うともともとバラつきの大きい変数の
寄与が大きく、バラつきの小さい変数の寄与が小さくなるので適していない
これに対応するには各変数の距離を分散で割る
これをマハラノビス距離と呼びぶ
マハラノビス距離の計算方法
1 2 3 4 5 6 |
from scipy.spatial import distance # データ集合の平均値mean, データ集合の共分散行列(分散を集めたもの)cov mean = np.mean(data, axis=0) cov = np.cov(data.T) # データx, 平均値mean, 共分散行列の逆行列np.linalg.pinv(cov) から距離を計算 distance.mahalanobis(x, mean, np.linalg.pinv(cov)) |
データx
, y
に対して、与えられた平均値mean
、共分散行列cov
〇マハラノビス距離
〇mean
とのユークリッド距離
の計算結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import numpy as np from scipy.spatial import distance # データx,y x = [6, 18, 5] y = [4, 0, 21] # xとyが属する母集団の平均 mean = np.array([4, 2, 5]) # と共分散行列 cov = np.array([ [1, 0, 0], [0,64, 0], [0, 0, 3] ]) # xとyの各マハラノビス距離とユークリッド距離を計算し、出力 >Out: マハラノビス距離 x:2.8284, y:9.2410 ユークリッド距離 x:16.1245, y:16.1245 |
マハラノビス距離の方がユークリッド距離と比べて
分散が大きい変数の距離への寄与が小さくなる
コメントを残す