Megértettem, hogy a normál eloszlás nincs meghatározva, ha a szórás nulla, de kezelnem kell azt az esetet, amikor az összes érték egyenlő egy számítógépes algoritmusban. A következő módszernek érvényes értéket kell adnia, még akkor is, ha a szórás nulla. Hogyan javíthatom ki ezt a módszert, hogy ne oszoljon nullával?
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; }
Az volt az ötletem, hogy ezt beillesztem a módszer elejébe:
if (standard_dev == 0.0) { return x == mean ? 1.0 : 0.0; }
Ez helyes lenne?
Megjegyzések
Válasz
Ha a szórás nulla, akkor a Gauss (normál) PDF fájlja Dirac delta függvény . Nem egyszerűen beilleszthet nulla szórást a hagyományos kifejezésbe. Például, ha a PDF valamilyen numerikus integrációhoz van csatlakoztatva, ez nem fog működni. Módosítania kell az integrálokat. Az alábbi példában kiszámítjuk az $ g (x) $ függvény átlagértékét a $ f (x | \ mu, \ sigma ^ 2) $ Gauss-sűrűség felhasználásával:
$$ \ int g (x ) f (x | \ mu, \ sigma ^ 2) dx $$
ha nulla varianciát kapcsol be, ez delta-funkcionálissá válik: $$ \ int g (x) f (x | \ mu, 0) dx = \ int g (x) \ delta (x- \ mu) dx = g (\ mu) $$
A kódodnak képesnek kell lennie ennek felismerésére, különben nem fog sikerülni.
Ennek kijavításának egyik módja meglepően egyszerű: a $ \ sigma $ nagyon kis értékét dugja be a Gaussianba nulla helyett. A helyzethez megfelelő $ \ sigma $ -ot kell választania. Ha túl kicsi, akkor felrobbantja a kitevőjét, és az integrálok nem fognak működni, vagy a pontosság alacsony lesz. Ez a delta függvény ismert Gauss-közelítéséhez megy: $$ \ delta (x) = \ lim _ {\ sigma \ – 0} \ mathcal N (0, \ sigma) $$
megjegyzések
- Hogy " nem sikerült-e " függ a funkcionális specifikációtól. Ha csak a valószínűségi sűrűség folytonos változatát kívánjuk visszaadni, akkor a mindig nulla értékű függvény helyes, mert a Dirac-delta sűrűségét mindenhol megadjuk, de az átlagnál. Ha viszont ezt a függvényt egy valószínűségi számítás részeként hívják meg egy ML becslés kiszámításához, akkor nincs olyan megvalósítás, amely a sikerét eredményezné: csak egy hibaállapotot tehet fel.
- @whuber, lebegő pont formátum támogatja a pozitív végtelen értéket. Tehát a PDF-t a végtelenségig állíthatja. A ' probléma az, hogy valószínűség-optimalizálási rutinja akkor sem fog működni, a megszakítás miatt. Ezért ' azt mondom, hogy módosítania kell a PDF-t használó kódot. ' nem tud megúszni pusztán a PDF-sel való csevegést
- Fent tettem egy további megjegyzést, további információkkal. Én ' gondolom, hogy Aksakal helyes. Módosítanom kell a metódust használó kódot.
NormalDist
-t az algoritmusában?