Ymmärrän, että normaalijakaumaa ei ole määritelty, jos keskihajonta on nolla, mutta minun on käsiteltävä tapausta, jossa kaikki arvot ovat samat tietokonealgoritmissa. Seuraavan menetelmän on palautettava kelvollinen arvo, vaikka keskihajonta olisi nolla. Kuinka voin korjata tämän menetelmän, jotta sitä ei jaeta nollalla?
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; }
Ideani oli lisätä tämä menetelmän alkuun:
if (standard_dev == 0.0) { return x == mean ? 1.0 : 0.0; }
Olisiko tämä oikein?
Kommentit
Vastaus
Kun keskihajonta on nolla, Gauss-PDF (normaali) muuttuu Dirac-delta-funktioksi . Et voi yksinkertaisesti liittää nolla standardipoikkeamaa tavanomaiseen lausekkeeseen. Esimerkiksi, jos PDF on kytketty jonkinlaiseen numeeriseen integraatioon, tämä ei toimi. Sinun on muokattava integraaleja. Alla olevassa esimerkissä laskemme funktion $ g (x) $ keskiarvon käyttämällä Gaussin tiheyttä $ f (x | \ mu, \ sigma ^ 2) $:
$$ \ int g (x ) f (x | \ mu, \ sigma ^ 2) dx $$
kun liität nollavarianssin, tästä tulee delta-funktionaalinen: $$ \ int g (x) f (x | \ mu, 0) dx = \ int g (x) \ delta (x- \ mu) dx = g (\ mu) $$
Koodisi on kyettävä tunnistamaan tämä, muuten se epäonnistuu.
Yksi tapa korjata tämä on yllättävän yksinkertainen: kytke Gaussin lauseeseen hyvin pieni arvo $ \ sigma $ nollan sijasta. Sinun on valittava tilanteellesi oikea $ \ sigma $. Jos se on liian pieni, se räjäyttää eksponenttisi, ja integraalit eivät toimi tai tarkkuus on heikko. Tämä menee tunnettuun Gaussin likiarvoon delta-funktiolle: $$ \ delta (x) = \ lim _ {\ sigma \ – 0} \ mathcal N (0, \ sigma) $$
kommentit
- Onko se " epäonnistunut " on oltava riippuvainen sen toiminnallisesta määrittelystä. Jos tarkoituksena on vain palauttaa jatkuva versio todennäköisyystiheydestä, niin funktio, joka palauttaa aina nollan, on oikea, koska Dirac-delta on tiheys määritelty kaikkialla paitsi keskiarvolla. Jos toisaalta tätä toimintoa kutsutaan osana todennäköisyyslaskentaa ML-estimaatin laskemiseksi, ei ole minkäänlaista toteutusta, joka johtaisi sen onnistumiseen: kaikki, mitä se voi tehdä, on nostaa virhetila.
- @whuber, kelluva pistemuoto tukee positiivista ääretöntä. Joten hän voisi asettaa PDF: n äärettömyyteen. Ongelma ' s, että silloinkin hänen todennäköisyyden optimointirutiini ei toimi epäjatkuvuuden vuoksi. Siksi ' sanon, että hänen on muutettava PDF-koodia käyttävää koodia. Hän ei voi ' päästä eroon pelkästään sekaantumisesta pelkästään PDF-tiedostojen kanssa
- Lähetin yllä olevan lisäkommentin lisätietoja. Ajattelen ' Aksakalin olevan oikea. Minun on muokattava menetelmää käyttävää koodia.
NormalDist
-algoritmissasi?