平均Mと共分散行列Vの高次元ガウス分布があります。Vを考慮して点pからMまでの距離を計算したいと思います(Mからのpの標準偏差での距離だと思いますか?)。
別の言い方をすれば、Mから1シグマ離れた楕円を取り、pがその楕円の内側にあるかどうかを確認したいと思います。
がガウスの有効な共分散行列である場合V
、それは対称正定値であるため、有効な内積を定義します。ちなみにinv(V)
そうです。
したがって、Mとpが列ベクトルであると仮定すると、距離を次のように定義できます。
d1 = sqrt((M-p)'*V*(M-p));
d2 = sqrt((M-p)'*inv(V)*(M-p));
Matlabの方法で次のように書き直しd2
ます(おそらくいくつかの不要な括弧):
d2 = sqrt((M-p)'*(V\(M-p)));
良い点は、Vが単位行列の場合d1==d2
、古典的なユークリッド距離に対応することです。d1
あなたが使用しなければならないか、運動として残されているかどうかを見つけるためにd2
(申し訳ありませんが、私の仕事の一部は教えることです)。多次元の場合は1Dの特定の場合にすぎないため、多次元のガウス式を記述して1Dの場合と比較します(または数値実験を実行します)。
注意:非常に高次元の空間またはテストする非常に多くのポイントでは、Vの固有ベクトルと固有値(つまり、楕円体の主軸とそれに対応する分散)から賢い/より速い方法を見つけることができます。
お役に立てれば。
A。
正規分布が与えられた場合のポイントの確率を計算することを検討してください。
M = [1 -1]; %# mean vector
V = [.9 .4; .4 .3]; %# covariance matrix
p = [0.5 -1.5]; %# 2d-point
prob = mvnpdf(p,M,V); %# probability P(p|mu,cov)
関数MVNPDFは、StatisticsToolboxによって提供されます
たぶん私は完全に離れていますが、これは単に各次元を尋ねるのと同じではありません:私はシグマの中にいますか?
擬似コード:
foreach(dimension d)
(M(d) - sigma(d) < p(d) < M(d) + sigma(d)) ?
pがガウスのすべての次元の中にあるかどうかを知りたいからです。したがって、実際には、これは単なるスペースの問題であり、ガウス関数はそれに対して何もする必要はありません(距離であるMとシグマを除く)。
MATLABでは、次のようなことを試すことができます。
all(M - sigma < p < M + sigma)
その場所までの距離は、ユークリッド距離の関数がわからない場所である可能性があります。多分distは動作します:
dist(M, p)
Mは空間内の単なる点であり、pも同様であるためです。たった2つのベクトル。そして今、最後のもの。シグマの形式で距離を知りたい場合:
% create a distance vector and divide it by sigma
M - p ./ sigma
私はそれでうまくいくと思います。