1

Gaussian Mixture を使用して EM アルゴリズムを実行していますが、問題は、データが非常に少ないため、値がゼロに近い非常に小さな値で変化することです。

ここが問題の部分です

for i=1:ncomp,
  **logdenom = -log((2*pi)^(dim/2)*sqrt(abs(det(Cov(:,:,i)))));**  
  dist = mahalan(X,Mean(:,i),Cov(:,:,i));
  y(i,:) = logdenom-0.5*dist;
end

アスタリスク線が問題です。計算中、結果の NAN 値より後の 'inf' 値を返します。どうすればその問題に対処できますか。log関数なしでも計算します

for i=1:ncomp,
  dist = mahalan(X,Mean(:,i),Cov(:,:,i));
  y(i,:) = exp(-0.5*dist)/sqrt((2*pi)^dim*det(Cov(:,:,i))); % problem
end

しかし、問題は同じで、Cov の値が非常に小さいためです。

4

1 に答える 1

0

infこの状況で sを防ぐ 1 つの方法は、単に使用することです。

 logdenom = -log( eps + (2*pi)^...  )

この v は、最尤推定のスパース データに役立ちます。EMで役立つかどうかはわかりません!基本的に、ゼロ項は のようなものになる+36ため、大きすぎませんが、必要な小さな確率を増幅することができますlog

于 2012-12-18T00:16:35.667 に答える