Sidst opdateret den 24. juli 2020
Sandsynlighedstæthed er forholdet mellem observationer og deres sandsynlighed.
Nogle resultater af en tilfældig variabel har lav sandsynlighedstæthed, og andre resultater vil have en høj sandsynlighedstæthed.
Den samlede form for sandsynlighedstætheden kaldes en sandsynlighed distribution og beregning af sandsynligheder for specifikke resultater af en tilfældig variabel udføres af en sandsynlighedsdensitetsfunktion eller PDF for kort.
Det er nyttigt at kende sandsynlighedsdensitetsfunktionen for en stikprøve af data i rækkefølge at vide, om en given observation er usandsynlig eller så usandsynlig, at den betragtes som en outlier eller anomali, og om den skal fjernes. Det er også nyttigt at vælge passende læringsmetoder, der kræver, at inputdata har en specifik sandsynlighedsfordeling.
Det er usandsynligt, at sandsynlighedsdensitetsfunktionen for en tilfældig stikprøve af data er kendt. Som sådan skal sandsynlighedstætheden tilnærmes ved hjælp af en proces, der kaldes sandsynlighedsdensitetsestimering.
I denne vejledning finder du en mild introduktion til sandsynlighedsdensitetsestimering.
Efter at have gennemført dette tutorial, du vil vide:
- Histogramdiagrammer giver en hurtig og pålidelig måde at visualisere sandsynligheden for en dataprøve på.
- Parametrisk sandsynlighedsdensitetsestimering involverer valg af en fælles fordeling og estimering af parametrene for densitetsfunktionen fra en dataprøve.
- Ikke-parametrisk sandsynlighedsdensitetsestimering involverer anvendelse af en teknik til at tilpasse en model til den vilkårlige fordeling af dataene, som estimering af kernetæthed.
Start dit projekt med min nye bog Probability for Machine Learning, inklusive trinvise tutorials og Python-kildekodefiler til alle eksempler.
Lad os komme i gang.
En mild introduktion n til sandsynlighedsdensitetsestimering
Foto af Alistair Paterson, nogle rettigheder forbeholdes.
Oversigt over selvstudier
Denne vejledning er opdelt i fire dele; de er:
- Sandsynlighedstæthed
- Sammenfat densitet med et histogram
- Parametrisk tæthedsestimering
- Ikke-parametrisk densitetsestimering
Sandsynlighedstæthed
En tilfældig variabel x har en sandsynlighedsfordeling p (x).
Forholdet mellem resultaterne af en tilfældig variabel og dens sandsynlighed er benævnt sandsynlighedstætheden eller simpelthen “tætheden.”
Hvis en tilfældig variabel er kontinuerlig, kan sandsynligheden beregnes via sandsynlighedsdensitetsfunktionen eller PDF for kort. Formen på sandsynlighedstætheden funktion på tværs af domænet for en tilfældig variabel kaldes sandsynlighedsfordelingen og almindelige sandsynlighedsfordelinger har navne, såsom ensartet, normal, eksponentiel osv.
I betragtning af en tilfældig variabel er vi interesseret i dens densiteters tæthed.
Hvis vi f.eks. får en tilfældig prøve af en variabel, vil vi måske vide ting som formen på sandsynlighedsfordelingen bution, den mest sandsynlige værdi, spredningen af værdier og andre egenskaber.
At kende sandsynlighedsfordelingen for en tilfældig variabel kan hjælpe med at beregne øjeblikke for fordelingen, som middelværdien og variansen, men kan også være nyttigt til andre mere generelle overvejelser, som f.eks. at afgøre, om en observation er usandsynlig eller meget usandsynlig og kan være en outlier eller anomali.
Problemet er, at vi måske ikke kender sandsynlighedsfordelingen for en tilfældig variabel. Vi kender sjældent fordelingen, fordi vi ikke har adgang til alle mulige resultater for en tilfældig variabel. Faktisk er alt, hvad vi har adgang til, et udsnit af observationer. Som sådan skal vi vælge en sandsynlighedsfordeling.
Dette problem kaldes sandsynlighedsdensitetsestimering eller blot “densitetsestimering”, da vi bruger observationerne i en tilfældig prøve til at estimere den generelle tæthed af sandsynligheder ud over blot den stikprøve af data, vi har til rådighed.
Der er et par trin i processen med densitetsestimering af en tilfældig variabel.
Det første trin er at gennemgå densiteten af observationer i den tilfældige prøve med et simpelt histogram. Fra histogrammet kan vi muligvis identificere en fælles og velforstået sandsynlighedsfordeling, der kan bruges, såsom en normalfordeling. Hvis ikke, er vi muligvis nødt til at tilpasse en model til estimer fordelingen.
I de følgende sektioner vil vi se nærmere på hvert enkelt af disse trin igen.
Vi vil fokusere på univariate data, f.eks. en tilfældig variabel, i dette indlæg for enkelhed. Selvom trinnene kan anvendes til multivariate data, kan de blive mere udfordrende ng når antallet af variabler stiger.
Vil du lære sandsynligheden for maskinlæring
Tag mit gratis 7-dages e-mail-crashkursus nu (med prøvekode).
Klik for at tilmelde dig, og få også en gratis PDF Ebook-version af kurset.
Download dit GRATIS minikursus
Sammenfat densitet med et histogram
Det første trin i densitetsestimering er at oprette et histogram over observationer i den tilfældige prøve.
Et histogram er et plot, der involverer først at gruppere observationer i skraldespande og tælle antallet af begivenheder, der falder i hver skraldespand. Optællingerne eller frekvenserne af observationer i hver kasse plottes derefter som et søjlediagram med bakkerne på x-aksen og frekvensen på y-aksen.
Valget af antal kasser er vigtigt, da det styrer grovheden af fordelingen (antal søjler) og til gengæld hvor godt densiteten af observationer er tegnet. Det er en god ide at eksperimentere med forskellige bin-størrelser for en given dataprøve for at få flere perspektiver eller synspunkter på de samme data.
Et histogram kan oprettes ved hjælp af Matplotlib-biblioteket og hist () -funktionen. Dataene leveres som det første argument, og antallet af kasser specificeres via “kasser” -argumentet enten som et heltal (f.eks. 10) eller som en sekvens af grænserne for hver kasse (f.eks.).
Stykket nedenfor opretter et histogram med 10 kasser til en dataprøve.
1
2
3
4
|
…
# plot et histogram af prøven
pyplot.hist (prøve, kasser = 10)
pyplot.show ()
|
Vi kan oprette en tilfældig prøve trukket fra en normalfordeling og p retend, vi kender ikke fordelingen, og opret derefter et histogram over dataene. Den normale () NumPy-funktion opnår dette, og vi genererer 1.000 prøver med et gennemsnit på 0 og en standardafvigelse på 1, f.eks. en standard Gaussisk.
Det komplette eksempel er angivet nedenfor.
1
2
3
4
5
6
7
8
|
# eksempel på plotting af et histogram for en tilfældig prøve
fra matplotlib import pyplot
fra numpy. tilfældig import normal
# generere en prøve
prøve = normal (størrelse = 1000)
# plot et histogram af prøven
pyplot.hist (prøve, skraldespande = 10)
pyplot.show ()
|
Kører eksempel tegner en stikprøve af tilfældige observationer og opretter histogrammet med 10 kasser. Vi kan tydeligt se formen på den normale fordeling.
Bemærk, at dine resultater vil variere i betragtning af den tilfældige karakter af dataprøven. Prøv at køre eksemplet et par gange.
Histogramdiagram med 10 kasser i en tilfældig dataprøve
At køre eksemplet med bakker indstillet til 3 gør normalfordelingen mindre indlysende.
Histogramdiagram med 3 kasser af en tilfældig datasamling
Gennemgang af et histogram af en dataprøve med en række forskellige antal kasser hjælper med at identificere, om densiteten ser ud som en almindelig sandsynlighedsfordeling eller ej.
I de fleste tilfælde vil du se en unimodal fordeling, såsom den velkendte klokkeform af det normale, den flade form af uniformen eller den faldende eller stigende form af en eksponentiel eller Pareto-distribution.
Du kan muligvis også se komplekse fordelinger, såsom flere toppe, der ikke forsvinder med forskellige antal skraldespande, kaldet en bimodal fordeling, eller flere toppe, kaldet en multimodal distribution. Du kan muligvis også se en stor stigning i densitet for en given værdi eller et lille interval af værdier, der indikerer afvigelser, der ofte forekommer i halen af en distribution langt væk fra resten af densiteten.
Estimering af parametrisk tæthed
Formen på et histogram med de fleste tilfældige prøver svarer til en velkendt sandsynlighedsfordeling.
De almindelige distributioner er almindelige, fordi de forekommer igen og igen i forskellige og undertiden uventede domæner.
Bliv fortrolig med de almindelige sandsynlighedsfordelinger, da det hjælper dig med at identificere en given distribution fra et histogram.
Når først det er identificeret, kan du forsøge at estimere densiteten af den tilfældige variabel med en valgt sandsynlighedsfordeling. Dette kan opnås ved at estimere fordelingsparametrene ud fra en tilfældig stikprøve af data.
For eksempel har normalfordelingen to parametre: middelværdien og standardafvigelsen. I betragtning af disse to parametre kender vi nu sandsynlighedsfordelingsfunktionen. Disse parametre kan estimeres ud fra data ved at beregne prøve gennemsnit og prøve standardafvigelse.
Vi refererer til denne proces som parametrisk tæthedsestimering.
Årsagen er, at vi bruger foruddefinerede funktioner for at opsummere forholdet mellem observationer og deres sandsynlighed, der kan styres eller konfigureres med parametre, deraf “parametrisk”.
Når vi har estimeret densiteten, kan vi kontrollere, om den passer godt. Dette kan gøres på mange måder, såsom:
- Plotte densitetsfunktionen og sammenligne formen med histogrammet.
- Prøveudtagning af densitetsfunktionen og sammenligning af den genererede prøve med den rigtige prøve.
- Brug af en statistisk test til at bekræfte, at dataene passer til fordelingen.
Vi kan demonstrere dette med et eksempel.
Vi kan generere en tilfældig prøve på 1.000 observationer fra en normalfordeling med et gennemsnit på 50 og en standardafvigelse på 5.
1
2
3
|
…
# generer en prøve
prøve = normal (loc = 50, skala = 5, størrelse = 1000)
|
Vi kan så lade som om vi ikke kender sandsynlighedsfordelingen og måske se på et histogram og gætte at det er normalt. Forudsat at det er normalt, kan vi derefter beregne fordelingsparametrene, specifikt middelværdien og standardafvigelsen.
Vi forventer ikke, at middelværdien og standardafvigelsen er 50 og 5 nøjagtigt i betragtning af den lille prøvestørrelse og støj i prøveudtagningsprocessen.
Tilpas derefter fordelingen med disse parametre, såkaldt parametrisk tæthedsestimering af vores dataprøve.
I dette tilfælde kan vi bruge normen ( ) SciPy-funktion.
1
2
3
|
…
# definer fordelingen
dist = norm (sample_mean, sam ple_std)
|
Vi kan derefter prøve sandsynlighederne fra denne fordeling for en række værdier i vores domæne, i dette tilfælde mellem 30 og 70.
Endelig kan vi plotte et histogram af dataprøven og lægge et linjediagram over sandsynlighederne beregnet for værdiområdet fra PDF’en.
Det er vigtigt, at vi konverterer optællingerne eller frekvenserne i hver bin i histogrammet til en normaliseret sandsynlighed for at sikre, at histogrammets y-akse svarer til linjeplottets y-akse. Dette kan opnås ved at indstille argumentet “tæthed” til “Sandt” i opkaldet til hist ().
1
2
3
4
|
…
# plot histogrammet og pdf
pyplot.hist (prøve, skraldespande = 10, tæthed = Sand)
pyplot.plot (værdier, sandsynligheder)
|
Ved at binde disse uddrag sammen vises det komplette eksempel på parametrisk tæthedsestimering nedenfor.
At køre eksemplet genererer først dataeksemplet , estimerer derefter parametrene for den normale sandsynlighed distribution.
Bemærk, at dine resultater vil være forskellige i betragtning af, at dataprøven er tilfældig. Prøv at køre eksemplet et par gange.
I dette tilfælde kan vi se, at middelværdien og standardafvigelsen har en vis støj og er lidt forskellige fra de forventede værdier på henholdsvis 50 og 5. Støjen er mindre, og fordelingen forventes stadig at være en god pasform.
1
|
Mean = 49.852 , Standardafvigelse = 5.023
|
Derefter er PDF’en fit ved hjælp af de anslåede parametre og histogrammet for dataene med 10 kasser sammenlignes med sandsynligheder for en række værdier, der er samplet fra PDF-filen.
Vi kan se, at PDF’en passer godt til vores data.
Dataprøvehistogram med sandsynlighedsdensitetsfunktion Overlay for normalfordeling
Det er muligt, at dataene matcher en fælles sandsynlighedsfordeling, men kræver en transformation før parametrisk tæthedsestimering.
For eksempel kan du have outlier-værdier, der er langt fra fordelingens middel eller massecenter. Dette kan have den virkning, at der gives forkerte estimater af fordelingsparametrene og til gengæld forårsager en dårlig pasform til dataene. Disse afvigelser bør fjernes inden estimering af fordelingsparametrene.
Et andet eksempel er, at dataene kan have en skæv eller forskydes til venstre eller højre. I dette tilfælde er du muligvis nødt til at transformere dataene, inden du estimerer parametrene, f.eks. Ved at tage log eller kvadratroden, eller mere generelt ved hjælp af en krafttransformation som Box-Cox-transformationen.
Disse typer af ændringer til dataene er muligvis ikke indlysende, og effektiv estimering af parametrisk densitet kan kræve en iterativ proces med:
- Loop indtil distributionen af data til data er god nok:
- 1. Estimering af fordelingsparametre
- 2. Gennemgang af den resulterende PDF i forhold til data
- 3. Transformering af data, så de passer bedre til fordelingen
Estimering af ikke-parametrisk tæthed
I nogle tilfælde ligner en dataprøve muligvis ikke en fælles sandsynlighed distribution eller kan ikke let foretages til at passe til fordelingen.
Dette er ofte tilfældet, når dataene har to toppe (bimodal distribution) eller mange toppe (multimodal distribution).
I dette i det tilfælde er estimering af parametrisk densitet ikke mulig, og der kan anvendes alternative metoder, der ikke bruger en fælles fordeling. I stedet bruges en algoritme til at tilnærme sandsynlighedsfordelingen af dataene uden en foruddefineret distribution, der betegnes som en ikke-parametrisk metode.
Fordelingerne vil stadig have parametre, men kan ikke direkte kontrolleres på samme måde som enkle sandsynlighedsfordelinger. For eksempel kan en ikke-parametrisk metode estimere tætheden ved hjælp af alle observationer i en tilfældig prøve og i virkeligheden foretage alle observationer i stikprøveparametrene.
Måske den mest almindelige ikke-parametriske tilgang til estimering af sandsynlighedsdensitetsfunktionen af en kontinuerlig tilfældig variabel kaldes kerneudjævning eller kernedensitetsestimering, KDE for kort.
- Kernedensitetsestimering: Ikke-parametrisk metode til brug af et datasæt til estimering af sandsynligheder for nye punkter.
I dette tilfælde er en kerne en matematisk funktion, der returnerer en sandsynlighed for en given værdi af en tilfældig variabel. Kernen udjævner eller interpolerer sandsynlighederne i hele rækkevidden af resultater for en tilfældig variabel, således at summen sandsynligheder er lig med et, et krav om velopdragen sandsynlighed.
Kernefunktionen vejer bidraget fra observationer fra en dataprøve baseret på deres forhold eller afstand til en given forespørgselsprøve, for hvilken sandsynligheden kræves.
En parameter, kaldet udjævningsparameteren eller båndbredden, styrer omfanget eller vinduet for observationer fra dataprøven, der bidrager til at estimere sandsynligheden for en given prøve. Som sådan kaldes estimering af kernetæthed undertiden et Parzen-Rosenblatt-vindue eller blot et Parzen-vindue efter udviklerne af metoden.
- Udjævningsparameter (båndbredde): Parameter, der styrer antal prøver eller vindue med prøver, der bruges til at estimere sandsynligheden for et nyt punkt.
Et stort vindue kan resultere i en grov tæthed med små detaljer, mens et lille vindue kan have for mange detaljer og ikke være glatte eller generelle nok til korrekt at dække nye eller usete eksempler.Bidrag fra prøver i vinduet kan formes ved hjælp af forskellige funktioner, undertiden benævnt basisfunktioner, f.eks. ensartet normal osv. med forskellige virkninger på den resulterende densitetsfunktions glathed.
- Basisfunktion (kerne): Den valgte funktion bruges til at kontrollere bidraget fra prøver i datasættet til estimering af sandsynlighed for et nyt punkt.
Som sådan kan det være nyttigt at eksperimentere med forskellige vinduesstørrelser og forskellige bidragsfunktioner og evaluere resultaterne i forhold til histogrammer af dataene.
Vi kan demonstrere dette med et eksempel.
Først kan vi konstruere en bimodal fordeling ved at kombinere prøver fra to forskellige normale fordelinger. Specifikt 300 eksempler med et gennemsnit på 20 og en standardafvigelse på 5 (den mindre top) og 700 eksempler med et gennemsnit på 40 og en standardafvigelse på 5 (den større top). Midlerne blev valgt tæt på hinanden for at sikre, at fordelingerne overlapper hinanden i den kombinerede prøve.
Det komplette eksempel på at oprette denne prøve med en bimodal sandsynlighedsfordeling og plotte histogrammet er anført nedenfor.
Ved at køre eksemplet oprettes dataprøven og tegner histogrammet.
Bemærk, at dine resultater vil variere i betragtning af den tilfældige karakter af dataprøven. Prøv at køre eksemplet et par gange.
Vi har færre prøver med et gennemsnit på 20 end prøver med et gennemsnit på 40, hvilket vi kan se afspejlet i histogrammet med en større tæthed af prøver omkring 40 end omkring 20.
Data med denne distribution passer ikke pænt ind i en fælles sandsynlighedsfordeling efter design. Det er en god sag at bruge en ikke-parametrisk metode til estimering af kernetæthed.
Histogramdiagram af dataprøve Med en Bimodal sandsynlighedsfordeling
Scikit-lær maskinlæringsbiblioteket giver KernelDensity-klassen, der implementerer kernetæthedsestimering.
Først er klassen konstrueret med den ønskede båndbredde (vinduesstørrelse) og kernel (basisfunktion) argumenter. Det er en god ide at teste forskellige konfigurationer på dine data. I dette tilfælde vil vi prøve en båndbredde på 2 og en Gaussisk kerne.
Klassen tilpasses derefter til en dataprøve via funktionen fit (). Funktionen forventer, at dataene har en 2D-form med formularen, derfor kan vi omforme vores dataeksempel til at have 1.000 rækker og 1 kolonne.
1
2
3
4
5
|
…
# fit tæthed
model = KernelDensity (båndbredde = 2, kerne = “gaussisk”)
sample = sample.reshape ((len (sample), 1))
model.fit (prøve)
|
Vi kan derefter evaluere, hvor godt densitetsestimatet matcher vores data ved at beregne sandsynlighederne for en række obs ervationer og sammenligne formen med histogrammet, ligesom vi gjorde for det parametriske tilfælde i det foregående afsnit.
Funktionen score_samples () på KernelDensity beregner logsandsynligheden for en række prøver. Vi kan oprette en række prøver fra 1 til 60, omkring området for vores domæne, beregne logsandsynlighederne og derefter invertere logoperationen ved at beregne eksponenten eller exp () for at returnere værdierne til området 0-1 for normale sandsynligheder .
Endelig kan vi oprette et histogram med normaliserede frekvenser og et overlay-linjediagram over værdier til estimerede sandsynligheder.
1
2
3
4
5
|
…
# plot histogrammet og pdf
pyplot.hist (prøve, skraldespande = 50, tæthed = Sand)
pyplot.plot (værdier, sandsynligheder)
pyplot.show ()
|
Ved at binde dette sammen er det komplette eksempel på estimering af kernetæthed for en bimodal dataprøve angivet nedenfor.
Når eksemplet køres, oprettes datadistributionen, passer til estimeringsmodellen for kernetæthed og tegner derefter histogrammet for dataeksemplet og PDF’en fra KDE-modellen.
Bemærk, at dine resultater vil være forskellige i betragtning af, at dataprøven er tilfældig. Prøv at køre eksemplet et par gange.
I dette tilfælde kan vi se, at PDF’en passer godt til histogrammet. Det er ikke meget glat og kan gøres mere ved at indstille argumentet “båndbredde” til 3 prøver eller højere. Eksperimenter med forskellige værdier for båndbredde og kernefunktion.
Histogram og sandsynlighedsdensitetsfunktionsdiagram estimeret via kernetæthedsestimering til en Bimodal dataeksempel
KernelDensity-klassen er kraftig og understøtter estimering af PDF til multidimensionelle data.
Yderligere læsning
Dette afsnit giver flere ressourcer om emnet, hvis du ønsker at gå dybere.
Bøger
- Mønstergenkendelse og maskinindlæring, 2006.
- Machine Learning: A Probabilistic Perspective, 2012.
- Elements of Statistical Learning: Data Mining, Inference og forudsigelse, 2009.
API
- scipy.stats.gaussian_kde API.
- Ikke-parametriske metoder, ikke-parametriske, Statsmodels API.
- Kernel Density Estimation Statsmodels Exa mple.
- Density Estimation, Scikit-Learn API.
Artikler
- Density estimation, Wikipedia.
- Histogram, Wikipedia.
- Estimering af kernetæthed, Wikipedia.
- Estimering af flere kernetætheder, Wikipedia.
- Estimering af kernetæthed via vinduet Parzen-Rosenblatt, 2014.
- Dybtgående: Kernel Density Estimation.
Resumé
I denne vejledning opdagede du en mild introduktion til estimering af sandsynlighedsdensitet.
Du lærte specifikt:
- Histogramdiagrammer giver en hurtig og pålidelig måde at visualisere sandsynligheden for en dataprøve på.
- Parametrisk sandsynlighedsdensitet estimering indebærer valg af en fælles fordeling og estimering af parametrene for densitetsfunktionen fra en dataprøve.
- Ikke-parametrisk sandsynlighedsdensitetsestimering involverer anvendelse af en teknik til at tilpasse en model til den vilkårlige fordeling af dataene, som f.eks. den.
Har du spørgsmål?
Stil dine spørgsmål i kommentarerne nedenfor, så vil jeg gøre mit bedste for at besvare.
Få et håndtag om sandsynligheden for maskinlæring!
Udvikl din forståelse af sandsynligheden
… med bare et par linjer med pythonkode
Opdag hvordan i min nye e-bog:
Sandsynlighed for maskinindlæring
Det giver selvstudium tutorials og end-to-end projekter om:
Bayes sætning, Bayesian optimering, distributioner, maksimal sandsynlighed, kryds-entropi, kalibrering af modeller
og meget mere …
Endelig udnyt usikkerhed i Dine projekter
Spring over akademikerne. Bare resultater. Se hvad der er inde i