原点からいくつかの点のマハラノビス距離を見つけようとしています.そのためのMATLABコマンドは mahal(Y,X) です
しかし、これを使用すると、原点からの距離を見つける必要があるため、行列 X =0 として NaN が得られます。
原点からいくつかの点のマハラノビス距離を見つけようとしています.そのためのMATLABコマンドは mahal(Y,X) です
しかし、これを使用すると、原点からの距離を見つける必要があるため、行列 X =0 として NaN が得られます。
何をしているのか少し混乱していると思いますmahal()
。まず、マハラノビス距離の計算には点の母集団が必要であり、そこから共分散が計算されます。
この関数のMatlab ドキュメントでは、計算される距離が次のようになっていることが明らかになっています。
d(I) = (Y(I,:)-mu)*inv(SIGMA)*(Y(I,:)-mu)'
ここmu
で、 は の母平均、X
はSIGMA
の母共分散行列ですX
。母集団は単一の点 (原点) で構成されているため、共分散がなく、SIGMA
行列が可逆でないため、距離で NaN/Inf 値を取得するエラーが発生します。
マハラノビス距離に使用する共分散構造がわかっている場合は、上記の式を使用して自分で計算できます。気になる共分散が行列に格納されているとしましょうS
。原点からの距離が必要なため、 の値から何も減算する必要はありませんY
。計算する必要があるのは次のとおりです。
for ii = 1:size(Y,1)
d(ii) = Y(ii,:)*inv(S)*Y(ii,:)'; % Where Y(ii,:) is assumed to be a row vector.'
end