Jaki jest rozkład normalny, gdy odchylenie standardowe wynosi zero?

Rozumiem, że rozkład normalny jest niezdefiniowany, jeśli odchylenie standardowe wynosi zero, ale muszę zająć się przypadkiem, w którym wszystkie wartości są równe w algorytmie komputerowym. Poniższa metoda musi zwracać prawidłową wartość, nawet jeśli odchylenie standardowe wynosi zero. Jak mogę naprawić tę metodę, aby nie dzieliła przez zero?

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

Mój pomysł polegał na wstawieniu tego na początku metody:

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

Czy to byłoby poprawne?

Komentarze

  • Nie ' t " napraw ". Plik PDF dystrybucji normalnej jest niezdefiniowany dla $ \ sigma = 0 $, to ' nie jest 1 jak w twoim " napraw "
  • @Aksakal wskazuje na ważną kwestię: jak dokładnie zamierzasz używać NormalDist w swoim algorytmie?
  • To jest używane w ï ve bayes classifer. ' próbuje wybrać klasę na podstawie danych ze zbioru uczącego. Wydaje mi się, że jeśli wszystkie wartości w zbiorze parametrów są takie same, nie powinny one mieć wpływu na wynik. Na przykład, jeśli przyjrzymy się, jak rozmiar buta mieści się w rozkładzie, aby określić, czy dana osoba (klasa) jest mężczyzną czy kobietą, ale jeśli tak się dzieje, że wszystkie osoby w dystrybucji mają dokładnie ten sam rozmiar buta, wtedy rozmiar buta nie może służyć do różnicowania i powinien zostać usunięty z rozważań. Chcę zająć się tym przypadkiem.
  • Może odpowiedzią nie jest zmiana wyniku tej metody, ale raczej całkowite wyrzucenie tej wartości.

Odpowiedź

Gdy odchylenie standardowe wynosi zero, plik Gaussa (normalny) PDF zamienia się w delta Diraca . Nie można po prostu podłączyć zerowego odchylenia standardowego do konwencjonalnego wyrażenia. Na przykład, jeśli plik PDF jest podłączony do jakiejś integracji numerycznej, to nie zadziała. Musisz zmodyfikować całki. W poniższym przykładzie obliczamy średnią wartość funkcji $ g (x) $ na podstawie gęstości Gaussa $ f (x | \ mu, \ sigma ^ 2) $:

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

kiedy podłączysz zerową wariancję, stanie się to funkcjami delta: $$ \ int g (x) f (x | \ mu, 0) dx = \ int g (x) \ delta (x- \ mu) dx = g (\ mu) $$

Twój kod musi być w stanie to rozpoznać, w przeciwnym razie nie powiedzie się.

Jeden ze sposobów naprawienia tego jest zaskakująco prosty: podłącz bardzo małą wartość $ \ sigma $ do Gaussa zamiast zera. Będziesz musiał wybrać właściwą $ \ sigma $ do swojej sytuacji. Jeśli jest za mały, to wysadzi twój wykładnik, a całki nie będą działać lub precyzja będzie niska. To prowadzi do znanego przybliżenia Gaussa funkcji delta: $$ \ delta (x) = \ lim _ {\ sigma \ to 0} \ mathcal N (0, \ sigma) $$

Komentarze

  • Czy " nie powiedzie się " musi zależeć od specyfikacji funkcjonalnej. Jeśli intencją jest po prostu zwrócenie ciągłej wersji gęstości prawdopodobieństwa, to funkcja, która zawsze zwraca zero, jest poprawna, ponieważ delta Diraca ma gęstość zdefiniowaną wszędzie poza średnią. Z drugiej strony, jeśli ta funkcja jest wywoływana jako część obliczenia prawdopodobieństwa obliczania oszacowania ML, to nie ma żadnej implementacji, która spowodowałaby jej sukces: wszystko, co może zrobić, to wywołać warunek błędu.
  • @whuber, zmienny format punktowy obsługuje dodatnią nieskończoność. Więc mógł ustawić plik PDF na nieskończoność. Problem ' polega na tym, że nawet wtedy jego procedura optymalizacji prawdopodobieństwa nie zadziała z powodu nieciągłości. Dlatego ' mówię, że musi zmodyfikować kod korzystający z formatu PDF. Nie może ' nie uciec od bałaganu z samym plikiem PDF
  • Opublikowałem powyżej dodatkowy komentarz zawierający więcej informacji. Uważam, że ' Aksakal ma rację. Muszę zmodyfikować kod, który używa tej metody.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *