Próbowałem zaimplementować oszacowanie liczbowe dywergencji Kullbacka-Leiblera dla dwóch próbek. Aby debugować implementację, narysuj próbki z dwóch rozkładów normalnych i .
Dla prostego oszacowania wygenerowałem dwa histogramy i próbowałem liczbowo aproksymować całkę. Utknąłem z obsługą tych części histogramu, w których przedziały jednego z histogramów mają zero, tak że albo skończę z dzieleniem przez zero, albo logarytmem zera. Jak poradzić sobie z tym problemem?
Przyszło mi do głowy podobne pytanie: jak dokładnie obliczyć dywergencję KL między dwoma różnymi rozkładami jednolitych? Czy muszę ograniczyć całkę do unii wsparcia obu dystrybucji?
Odpowiedzi:
Rozbieżność Kullbacka-Leiblera jest zdefiniowana jako więc aby obliczyć (oszacować) to na podstawie danych empirycznych, potrzebowalibyśmy być może niektórych szacunków funkcji gęstości p ( x ) , q ( x )
Wracając do głównego pytania. Pytanie jest zadawane w bardzo nieparametryczny sposób i nie podano żadnych założeń dotyczących gęstości. Prawdopodobnie potrzebne są pewne założenia. Ale zakładając, że dwie gęstości są proponowane jako konkurujące modele dla tego samego zjawiska, możemy prawdopodobnie założyć, że mają one tę samą dominującą miarę: rozbieżność KL między ciągłym a dyskretnym rozkładem prawdopodobieństwa zawsze byłaby na przykład nieskończonością. Jeden artykuł dotyczący tego pytania jest następujący: https://pdfs.semanticscholar.org/1fbd/31b690e078ce938f73f14462fceadc2748bf.pdf Proponują metodę, która nie wymaga wstępnego oszacowania gęstości, i analizuje jej właściwości.
(Jest wiele innych artykułów). Wrócę i opublikuję kilka szczegółów z tego artykułu, pomysłów.
Kilka pomysłów z tego artykułu, który dotyczy oszacowania rozbieżności KL z próbkami z absolutnie ciągłych rozkładów. Pokazuję ich propozycję rozkładów jednowymiarowych, ale dają one również rozwiązanie dla wektorów (wykorzystując oszacowanie gęstości najbliższego sąsiada). Aby uzyskać dowody, przeczytaj artykuł!
Kod R dla wersji funkcji rozkładu empirycznego, której potrzebujemy, to
Uwaga:
rle
służy do załatwiania sprawy z duplikatami wx
.Następnie oszacowanie dywergencji KL podaje
Następnie pokazuję małą symulację:
co daje następujący histogram, pokazujący (oszacowanie) rozkład próbkowania tego estymatora:
Dla porównania obliczamy dywergencję KL w tym przykładzie przez całkowanie numeryczne:
hmm ... różnica jest na tyle duża, że jest tu wiele do zbadania!
źródło
Rozwijając trochę odpowiedź kjetil-b-halvorsena i przepraszam, że nie komentuję, nie mam reputacji:
LR <- function(x) dnorm(x,log=TRUE)-dt(x,5,log=TRUE) integrate(function(x) dnorm(x)*LR(x),lower=-Inf,upper=Inf)$value
Po dokonaniu tych dwóch poprawek wyniki wydają się bardziej realistyczne.
źródło