標準偏差がゼロの場合の正規分布は何ですか?

標準偏差がゼロの場合、正規分布が定義されていないことは理解していますが、コンピューターアルゴリズムですべての値が等しい場合を処理する必要があります。次のメソッドは、標準偏差がゼロの場合でも、有効な値を返す必要があります。ゼロで除算されないようにこのメソッドを修正するにはどうすればよいですか?

public static double NormalDist(double x, double mean, double standard_dev) { double fact = standard_dev * Math.Sqrt(2.0 * Math.PI); double expo = (x - mean) * (x - mean) / (2.0 * standard_dev * standard_dev); return Math.Exp(-expo) / fact; } 

私の考えは、メソッドの最初にこれを挿入することでした:

 if (standard_dev == 0.0) { return x == mean ? 1.0 : 0.0; } 

これは正しいですか?

コメント

  • しませんでした' t " fix "正規分布のPDFは$ \ sigma = 0 $に対して未定義です。 'は"修正"
  • @Aksakalは重要な問題を指摘しています:アルゴリズムでNormalDistをどのように使用するつもりですか?
  • これはna ïベイズの定理。 'はトレーニングセットのデータに基づいてクラスを選択しようとしています。私には、一連のパラメーターのすべての値が同じであると思われる場合、それらは結果に影響を与えないはずです。したがって、たとえば、靴のサイズが分布内にどのように含まれるかを調べて、人(クラス)が男性か女性かを判断しているが、分布内のすべての人がまったく同じ靴のサイズを持っている場合は、その場合、靴のサイズを区別するために使用することはできず、考慮から除外する必要があります。私はこのケースを処理しようとしています。
  • 答えは、このメソッドの出力を変更することではなく、その値を完全に破棄することかもしれません。

回答

標準偏差がゼロの場合、ガウス(正規)PDFはディラックのデルタ関数に変わります。ゼロ標準偏差を従来の式に単純に差し込むことはできません。たとえば、PDFをある種の数値積分に差し込むと、これは機能しません。積分を変更する必要があります。以下の例では、ガウス密度$ f(x | \ mu、\ sigma ^ 2)$を使用して関数$ g(x)$の平均値を計算します。

$$ \ int g(x )f(x | \ mu、\ sigma ^ 2)dx $$

ゼロ分散をプラグインすると、これはデルタ関数になります:$$ \ int g(x)f(x | \ mu、 0)dx = \ int g(x)\ delta(x- \ mu)dx = g(\ mu)$$

コードはこれを認識できる必要があります。認識できない場合、失敗します。

これを修正する1つの方法は、驚くほど簡単です。ゼロではなく、非常に小さい値の$ \ sigma $をガウス分布に接続します。状況に応じて適切な$ \ sigma $を選択する必要があります。小さすぎると指数が爆発し、積分が機能しないか、精度が低くなります。これは、デルタ関数の既知のガウス近似になります:$$ \ delta(x)= \ lim _ {\ sigma \ to 0} \ mathcal N(0、 \ sigma)$$

コメント

  • 失敗するかどうか"失敗する"はその機能仕様に依存する必要があります。確率密度の連続バージョンを返すことだけを目的としている場合、ディラックのデルタには平均以外のすべての場所で密度が定義されているため、常にゼロを返す関数は正しいです。一方、この関数が最尤推定を計算するための尤度計算の一部として呼び出されている場合、それを成功させる実装はありません。実行できるのはエラー条件を発生させることだけです。
  • @ whuber、浮動ポイント形式は正の無限大をサポートします。したがって、彼はPDFを無限大に設定することができました。問題'は、不連続性のために、それでも彼の尤度最適化ルーチンが機能しないことです。したがって、私は' PDFを使用するコードを変更する必要があると言っています。彼は' PDFだけをいじるだけでは逃げられません
  • 上記の追加コメントに詳細を投稿しました。 ' Aksakalは正しいと思います。メソッドを使用するコードを変更する必要があります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です