Mikä on normaalijakauma, kun keskihajonta on nolla?

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

  • Et ' t " fix " se. Normaalijakauman PDF-tiedostoa ei ole määritelty arvolle $ \ sigma = 0 $, se ' ei ole yhtä kuin " fix "
  • @Aksakal viittaa tärkeään asiaan: miten aiot käyttää NormalDist -algoritmissasi?
  • Tätä käytetään na ï ve bayes classsifer. ' yrittää valita luokan harjoitussarjan tietojen perusteella. Jos näyttää siltä, että jos kaikki parametrisarjan arvot ovat samat, niillä ei pitäisi olla vaikutusta tulokseen. Joten esimerkiksi tarkastelemalla kengän koon jakautumista sen selvittämiseksi, onko henkilö (luokka) mies vai nainen, mutta jos sattuu, että kaikilla jakelun henkilöillä on täsmälleen sama kengän koko, kengän kokoa ei voida käyttää erottamiseen, ja se tulisi poistaa harkinnasta. Etsin käsitellä tätä tapausta.
  • Ehkä vastaus ei ole tämän menetelmän tuotoksen muuttaminen, vaan pikemminkin vain arvon heittäminen kokonaan pois.

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.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *