3

これがプログラミングの問題なのか統計学的な問題なのかはわかりませんが、数値の問題であることは 99% 確信しています。したがって、プログラムによる解決策を提案できるかもしれません。

MATLAB の mvnpdf 関数を使用して、いくつかの観測結果の多変量ガウス PDF を計算しています。「SIGMA は対称で正定値でなければなりません」というエラーが頻繁に発生します。

ただし、データから共分散行列を取得しているため、データ合法である必要があります。問題を再生成するコードは次のとおりです。

err_cnt = 0;
for i = 1:1000
    try 
        a = rand(3); 
        c = cov(a); 
        m = mean(a); 
        mvnpdf(a, m, c);
    catch me
        err_cnt = err_cnt + 1;
    end
end

実行するたびに 500 ~ 600 のエラーが発生します。

PS 私の場合、ランダム データは生成しません。ここでは、デモンストレーションのために生成しました。

4

3 に答える 3

12

これはプログラミングの問題ではなく、線形代数の問題です。k 次元の多変量正規分布の PDF の式を思い出してください。

ここに画像の説明を入力

行列が厳密に正定でない (つまり、特異である) 場合、分母の行列式はゼロで、指数の逆数は定義されていないため、エラーが発生します。

ただし、共分散行列が正定でなければならないというのはよくある誤解です。これは正しくありません — 共分散行列は正の半正定値である必要があるだけです。データが特異な共分散行列を持つことは完全に可能です。また、形成しているのは観測データのサンプル共分散行列であるため、十分な観測がないために特異点が発生する可能性があります。

于 2012-06-30T03:29:18.140 に答える
2

これは、共分散行列の対角値が (非常に近い) ゼロである場合に発生します。簡単な修正は、非常に小さな定数を に追加することcです。

err_cnt = 0;
for i = 1:1000
    try 
        a = rand(3); 
        c = cov(a) + .0001 * eye(3); 
        m = mean(a); 
        mvnpdf(a, m, c);
    catch me
        err_cnt = err_cnt + 1;
    end
end

エラーは 0 になります。

于 2012-06-30T02:06:59.787 に答える
0

データが部分空間 (特異共分散行列) に存在する場合、確率密度は全空間で特異です。大まかに言えば、これは密度が各ポイントで無限であることを意味しますが、これはあまり役に立ちません。したがって、これが事実であり、数値ではない場合、データがまたがる部分空間の確率密度を考慮する必要があります。ここでは、密度が明確に定義されています。この場合、@Junuxx として対角値を追加すると、非常に異なる値になります。

于 2012-07-01T17:06:14.780 に答える