Jaké je normální rozdělení, když je směrodatná odchylka nulová?

Chápu, že normální rozdělení není definováno, pokud je směrodatná odchylka nulová, ale musím se vypořádat s případem, kdy jsou všechny hodnoty v počítačovém algoritmu stejné. Následující metoda musí vrátit platnou hodnotu, i když je standardní odchylka nula. Jak mohu opravit tuto metodu tak, aby se nerozdělovala nulou?

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; } 

Můj nápad byl vložit tuto metodu na začátek metody:

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

Bylo by to správné?

Komentáře

  • Neudělali jste ' t " opravit " to. Normální distribuce PDF pro $ \ sigma = 0 $ není definována, ' není 1 jako ve vaší " opravě "
  • @Aksakal poukazuje na důležitý problém: jak přesně hodláte použít NormalDist ve svém algoritmu?
  • Toto se používá v na ï třídič bayes. ' se pokouší vybrat třídu na základě dat v tréninkové sadě. Pokud se mi zdá, že pokud jsou všechny hodnoty v sadě parametrů stejné, neměly by mít žádný vliv na výsledek. Pokud se například díváme na to, jak velikost boty spadá do distribuce, abychom zjistili, zda je osoba (třída) muž nebo žena, ale pokud se stane, že všechny osoby v distribuci mají přesně stejnou velikost boty, velikost obuvi pak nelze použít k odlišení a měla by být vyjmuta z úvahy. Hledám řešení tohoto případu.
  • Možná odpověď není ve změně výstupu této metody, ale spíše v tom, že tuto hodnotu úplně vyhodíme.

Odpověď

Když je směrodatná odchylka nula, promění se váš gaussovský (normální) PDF na delta funkce Dirac . Nemůžete jednoduše zapojit nulovou směrodatnou odchylku do konvenčního výrazu. Pokud je například PDF zapojeno do nějaké numerické integrace, nebude to fungovat. Musíte upravit integrály. V níže uvedeném příkladu vypočítáme střední hodnotu funkce $ g (x) $ pomocí Gaussovské hustoty $ f (x | \ mu, \ sigma ^ 2) $:

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

když připojíte nulovou odchylku, stane se to deltafunkční: $$ \ int g (x) f (x | \ mu, 0) dx = \ int g (x) \ delta (x- \ mu) dx = g (\ mu) $$

Váš kód to musí být schopen rozpoznat, jinak selže.

Jeden způsob, jak to napravit, je překvapivě jednoduchý: připojte velmi malou hodnotu $ \ sigma $ do Gaussian namísto nuly. Budete muset vybrat správný $ \ sigma $ pro vaši situaci. Pokud je to „příliš malé“, vyhodí to vašeho exponenta do vzduchu a integrály nebudou fungovat nebo bude přesnost nízká. Jedná se o známou Gaussovu aproximaci funkce delta: $$ \ delta (x) = \ lim _ {\ sigma \ to 0} \ mathcal N (0, \ sigma) $$

Komentáře

  • Zda " selže " musí záviset na jeho funkční specifikaci. Pokud je záměrem pouze vrátit spojitou verzi hustoty pravděpodobnosti, pak je funkce, která vždy vrátí nulu, správná, protože delta Dirac má hustotu definovanou všude kromě střední hodnoty. Pokud je naopak tato funkce volána jako součást výpočtu pravděpodobnosti pro výpočet odhadu ML, pak neexistuje žádná implementace, která by způsobila její úspěch: vše, co může udělat, je vyvolat chybový stav.
  • @whuber, plovoucí formát bodů podporuje kladné nekonečno. Takže mohl nastavit PDF na nekonečno. Problém ' spočívá v tom, že ani poté nebude jeho rutina optimalizace pravděpodobnosti fungovat kvůli diskontinuitě. Proto ' říkám, že musí upravit kód, který používá PDF. Nemůže ' se dostat pryč jen z toho, že si hraje jen se samotným PDF
  • výše jsem zveřejnil další komentář s dalšími informacemi. ' Myslím si, že Aksakal má pravdu. Musím upravit kód, který tuto metodu používá.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *