3

これは、MLE を実行しようとしたときに Matlab で気づいたことです。私の最初の推定器は、pdf の対数尤度を使用し、積を合計として分割しました。たとえば、(f(x)=b ax^(a-1)exp(-bx^a))分割されたログ ワイブル pdf は次のとおりです。

log_likelihood=log(b)+log(a)+(a-1)log(x)-bx^a

これを評価することは、これとは大きく異なります。

log_likelihood=log(bax^(a-1)exp(-bx^a))

2 つの段階でコンピュータが行う違いは何ですか? 最初のものは、はるかに大きな数を示します(数桁)。

4

2 に答える 2

4

使用する数値によっては、これは数値の問題である可能性があります。非常に大きな数値と非常に小さな数値を組み合わせると、数値の精度の制限により不正確になる可能性があります。

1 つの可能性は、異なるスケールで操作しているため、2 番目のケースで精度がいくらか失われることです。

于 2012-09-27T14:38:55.013 に答える
3

私は系統樹の最尤法を実装する科学ソフトウェア プロジェクトに取り組んでおり、数値の精度に関する問題に常に直面しています。多くの場合、卑劣さは...

  1. モデル内で同じ値を持つ競合するアプリケーション間で、
  2. MLE スコアを手動で計算する場合、
  3. 計算の操作の順序で。

それは本当にすべて3番目に帰着します。あなたの場合でさえ。小さい数値と非常に大きい数値の乗算は、計算中に指数がスケーリングされるときに奇妙な結果を引き起こす可能性があります。これについては、(悪名高い) 有名な「すべてのコンピューター科学者が浮動小数点演算について知っておくべきこと」に多くのことが書かれています。しかし、私が言及したことは、それがあなたの興味のすべてであるならば、それの短所です.

全体として、あなたが見ている問題は、関数を計算するときの浮動小数点/倍精度数と演算の表現における厳密な数値の問題です。私は MATLAB にあまり詳しくありませんが、より良い結果が得られる任意精度の型が含まれている可能性があります。

それとは別に、それらをできるだけ長くシンボリックに保ち、変数のサイズについて直感がある場合 ( inaは に比べて常に非常に大きいためx)、括弧の順序を賢明に選択していることを確認してください。

最初の方程式は s の加算を扱っているため、より優れているlogはずであり、2 番目の方程式よりもはるかに安定している必要がありますx^a。ただし、方程式を支配するので少し疲れますが、実際にはとにかくそうなります。

于 2012-09-27T14:59:03.087 に答える