Mekkora a normál eloszlás, ha a szórás nulla?

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

  • Nem tettél ' t " fix " it. A normál eloszlás PDF-je nincs meghatározva $ \ sigma = 0 $ esetén, ez ' nem olyan, mint a " fix "
  • @Aksakal egy fontos kérdésre mutat rá: pontosan hogyan kívánja használni a NormalDist -t az algoritmusában?
  • Ezt egy na ï ve bayes classsifer. ' megpróbál osztályt választani egy edzéskészlet adatai alapján. Számomra, ha úgy tűnik, hogy ha a paraméterek összes értéke megegyezik, akkor azok nem befolyásolhatják az eredményt. Például, ha azt vizsgáljuk, hogy a cipő mérete hogyan esik az eloszlásba, annak megállapítására, hogy egy személy (az osztály) férfi vagy nő-e, de ha éppen így történik, hogy az elosztásban lévő összes személynek pontosan ugyanaz a cipőmérete, akkor a cipő méretét nem lehet megkülönböztetni, ezért azt el kell hagyni a megfontolásoktól. Ezt az esetet szeretném kezelni.
  • Talán nem a módszer kimenetének megváltoztatásában rejlik a válasz, hanem abban, hogy ezt az értéket csak teljesen kidobjuk.

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

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük