Was ist die Normalverteilung, wenn die Standardabweichung Null ist?

Ich verstehe, dass die Normalverteilung undefiniert ist, wenn die Standardabweichung Null ist, aber ich muss den Fall behandeln, in dem alle Werte in einem Computeralgorithmus gleich sind. Die folgende Methode muss einen gültigen Wert zurückgeben, auch wenn die Standardabweichung Null ist. Wie kann ich diese Methode reparieren, damit sie nicht durch Null geteilt wird?

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; } 

Meine Idee war, dies am Anfang der Methode einzufügen:

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

Wäre dies korrekt?

Kommentare

  • Sie haben nicht ' t " fix " it.Das PDF der Normalverteilung ist für $ \ sigma = 0 $ undefiniert. ' ist nicht 1 wie in Ihrem " Fix "
  • @Aksakal weist auf ein wichtiges Problem hin: Wie genau möchten Sie NormalDist in Ihrem Algorithmus verwenden?
  • Dies wird in einem na ï ve bayes classifer. ' versucht, eine Klasse basierend auf Daten in einem Trainingssatz auszuwählen. Wenn es den Anschein hat, dass alle Werte in einer Reihe von Parametern gleich sind, sollten sie keinen Einfluss auf das Ergebnis haben. Wenn wir zum Beispiel untersuchen, wie die Schuhgröße in eine Verteilung fällt, um festzustellen, ob eine Person (die Klasse) männlich oder weiblich ist, aber wenn es nur so kommt, dass alle Personen in der Verteilung genau die gleiche Schuhgröße haben, dann kann die Schuhgröße nicht zur Unterscheidung verwendet werden und sollte aus der Betrachtung herausgenommen werden. Ich möchte diesen Fall behandeln.
  • Vielleicht besteht die Antwort nicht darin, die Ausgabe dieser Methode zu ändern, sondern diesen Wert einfach ganz wegzuwerfen.

Antwort

Wenn die Standardabweichung Null ist, wird Ihre Gaußsche (normale) PDF-Datei in Dirac-Delta-Funktion . Sie können nicht einfach eine Standardabweichung von Null in den herkömmlichen Ausdruck einfügen. Wenn das PDF beispielsweise in eine numerische Integration eingebunden ist, funktioniert dies nicht. Sie müssen die Integrale ändern. Im folgenden Beispiel berechnen wir den Mittelwert der Funktion $ g (x) $ unter Verwendung der Gaußschen Dichte $ f (x | \ mu, \ sigma ^ 2) $:

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

Wenn Sie die Nullvarianz einstecken, wird dies deltafunktional: $$ \ int g (x) f (x | \ mu, 0) dx = \ int g (x) \ delta (x- \ mu) dx = g (\ mu) $$

Ihr Code muss dies erkennen können, sonst schlägt er fehl.

Eine Möglichkeit, dies zu beheben, ist überraschend einfach: Stecken Sie einen sehr kleinen Wert von $ \ sigma $ anstelle von Null in Gauß ein. Sie müssen das richtige $ \ sigma $ für Ihre Situation auswählen. Wenn es zu klein ist, wird es Ihren Exponenten in die Luft jagen, und die Integrale funktionieren nicht oder die Genauigkeit ist gering. Dies geht zu einer bekannten Gaußschen Näherung der Delta-Funktion: $$ \ delta (x) = \ lim _ {\ sigma \ to 0} \ mathcal N (0, \ sigma) $$

Kommentare

  • Ob " fehlschlägt " muss von seiner Funktionsspezifikation abhängen. Wenn lediglich eine kontinuierliche Version der Wahrscheinlichkeitsdichte zurückgegeben werden soll, ist die Funktion, die immer Null zurückgibt, korrekt, da im Dirac-Delta eine Dichte definiert ist, die überall außer im Mittelwert definiert ist. Wenn diese Funktion andererseits als Teil einer Wahrscheinlichkeitsberechnung zur Berechnung einer ML-Schätzung aufgerufen wird, gibt es keinerlei Implementierung, die zum Erfolg führt: Sie kann lediglich eine Fehlerbedingung auslösen.
  • @whuber, Floating Punktformat unterstützt positive Unendlichkeit. So konnte er das PDF auf unendlich setzen. Das Problem ' ist, dass selbst dann seine Routine zur Wahrscheinlichkeitsoptimierung aufgrund der Diskontinuität nicht funktioniert. Daher sage ich ', dass er den Code ändern muss, der PDF verwendet. Er kann ' nicht davonkommen, nur mit PDF allein herumzuspielen.
  • Ich habe oben einen zusätzlichen Kommentar mit weiteren Informationen gepostet. Ich ' denke, Aksakal ist richtig. Ich muss den Code ändern, der die Methode verwendet.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.