Care este distribuția normală când deviația standard este zero?

Înțeleg că distribuția normală este nedefinită dacă deviația standard este zero, dar trebuie să mă ocup de cazul în care toate valorile sunt egale într-un algoritm de computer. Următoarea metodă trebuie să returneze o valoare validă, chiar dacă abaterea standard este zero. Cum pot remedia această metodă, astfel încât să nu se împartă la 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; } 

Ideea mea a fost să introduc acest lucru la începutul metodei:

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

Ar fi corect?

Comentarii

  • Nu ați făcut ' t " fix " it. PDF-ul distribuției normale este nedefinit pentru $ \ sigma = 0 $, ' nu este 1 ca în " fix "
  • @Aksakal indică o problemă importantă: exact cum intenționați să utilizați NormalDist în algoritmul dvs.?
  • Acest lucru este utilizat într-un na ï ve bayes classifer. ' încearcă să selecteze o clasă pe baza datelor dintr-un set de antrenament. Pentru mine, dacă se pare că dacă toate valorile dintr-un set de parametri sunt aceleași, acestea nu ar trebui să aibă nicio influență asupra rezultatului. De exemplu, dacă ne uităm la modul în care dimensiunea pantofilor se încadrează într-o distribuție pentru a determina dacă o persoană (clasa) este bărbat sau femeie, dar dacă se întâmplă ca toate persoanele din distribuție să aibă exact aceeași dimensiune a pantofilor, atunci dimensiunea pantofului nu poate fi utilizată pentru a diferenția și ar trebui să fie eliminată din considerație. Caut să gestionez acest caz.
  • Poate că răspunsul nu constă în schimbarea rezultatului acestei metode, ci mai degrabă să arunc cu totul acea valoare.

Răspuns

Când deviația standard este zero, PDF-ul Gaussian (normal) se transformă în funcție Delta delac . Nu puteți conecta pur și simplu abaterea standard zero la expresia convențională. De exemplu, dacă PDF-ul este conectat la un fel de integrare numerică, acest lucru nu va funcționa. Trebuie să modificați integralele. În exemplul de mai jos calculăm valoarea medie a funcției $ g (x) $ folosind densitatea Gaussian $ f (x | \ mu, \ sigma ^ 2) $:

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

atunci când conectați varianța zero, aceasta devine funcțională delta: $$ \ int g (x) f (x | \ mu, 0) dx = \ int g (x) \ delta (x- \ mu) dx = g (\ mu) $$

Codul dvs. trebuie să poată recunoaște acest lucru, altfel va eșua.

O modalitate de a remedia acest lucru este surprinzător de simplă: conectați o valoare foarte mică de $ \ sigma $ la Gaussian în loc de zero. Va trebui să alegeți $ \ sigma $ potrivit pentru situația dvs. Dacă este prea mic, atunci îți va arunca exponentul, iar integralele nu vor funcționa sau precizia va fi scăzută. Aceasta merge la o aproximare gaussiană cunoscută a funcției delta: $$ \ delta (x) = \ lim _ {\ sigma \ to 0} \ mathcal N (0, \ sigma) $$

Comentarii

  • Fie că " eșuează " trebuie să depindă de specificațiile sale funcționale. Dacă intenția este doar de a returna o versiune continuă a densității probabilității, atunci funcția care returnează întotdeauna zero este corectă, deoarece delta Dirac are o densitate definită peste tot, dar la medie. Dacă, pe de altă parte, această funcție este apelată ca parte a calculului probabilității pentru calcularea unei estimări ML, atunci nu există nicio implementare care să o facă să aibă succes: tot ce poate face este să ridice o condiție de eroare.
  • @whuber, formatul plutitor acceptă infinit pozitiv. Deci, el ar putea seta PDF-ul la infinit. Problema ' este că nici atunci rutina sa de optimizare a probabilității nu va funcționa, din cauza discontinuității. Prin urmare, ' spun că trebuie să modifice codul care folosește PDF. El nu poate ' să scape doar de a face joc doar cu PDF
  • Am postat un comentariu suplimentar mai sus, cu mai multe informații. ' cred că Aksakal este corect. Trebuie să modific codul care folosește metoda.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *