Sist oppdatert 24. juli 2020
Sannsynlighetstetthet er forholdet mellom observasjoner og deres sannsynlighet.
Noen utfall av en tilfeldig variabel vil ha lav sannsynlighetstetthet og andre utfall vil ha høy sannsynlighetstetthet.
Den samlede formen for sannsynlighetstettheten blir referert til som en sannsynlighet fordeling, og beregning av sannsynligheter for spesifikke utfall av en tilfeldig variabel utføres av en sannsynlighetstetthetsfunksjon, eller PDF for kort.
Det er nyttig å kjenne sannsynlighetstetthetsfunksjonen for et utvalg av data i rekkefølge å vite om en gitt observasjon er usannsynlig, eller så usannsynlig at den blir ansett som en outlier eller anomali, og om den bør fjernes. Det er også nyttig for å velge passende læringsmetoder som krever at inngangsdata har en spesifikk sannsynlighetsfordeling.
Det er lite sannsynlig at sannsynlighetstetthetsfunksjonen for et tilfeldig utvalg av data er kjent. Som sådan må sannsynlighetstettheten tilnærmes ved hjelp av en prosess kjent som estimering av sannsynlighetstetthet.
I denne opplæringen vil du oppdage en mild innføring i estimering av sannsynlighetstetthet.
Etter å ha fullført dette opplæring, vil du vite:
- Histogramdiagrammer gir en rask og pålitelig måte å visualisere sannsynlighetstettheten til en dataeksempel.
- Parametrisk sannsynlighetsdensitetsestimering innebærer å velge en felles fordeling og estimering av parametrene for tetthetsfunksjonen fra en dataeksempel.
- Ikke-parametrisk sannsynlighetsestimering innebærer å bruke en teknikk for å tilpasse en modell til den vilkårlige fordelingen av dataene, som estimering av kjernetetthet.
Start prosjektet ditt med min nye bok Sannsynlighet for maskinlæring, inkludert trinnvise opplæringsprogrammer og Python-kildekodefilene for alle eksempler.
La oss komme i gang.
En mild introduksjon n til sannsynlighetsdensitetsestimering
Foto av Alistair Paterson, noen rettigheter forbeholdt.
Opplæringsoversikt
Denne opplæringen er delt inn i fire deler; de er:
- Sannsynlighetstetthet
- Oppsummer tetthet med et histogram
- Parametrisk tetthetsestimering
- Ikke-parametrisk tetthetsestimering
Sannsynlighetstetthet
En tilfeldig variabel x har en sannsynlighetsfordeling p (x).
Forholdet mellom resultatene til en tilfeldig variabel og dens sannsynlighet er referert til som sannsynlighetstetthet, eller ganske enkelt «tetthet».
Hvis en tilfeldig variabel er kontinuerlig, kan sannsynligheten beregnes via sannsynlighetstetthetsfunksjon, eller PDF for kort. Formen på sannsynlighetstettheten funksjon på tvers av domenet for en tilfeldig variabel blir referert til som sannsynlighetsfordeling og vanlige sannsynlighetsfordelinger har navn, slik som uniform, normal, eksponentiell og så videre.
Gitt en tilfeldig variabel, er vi interessert i tettheten av sannsynlighetene.
For eksempel, gitt et tilfeldig utvalg av en variabel, vil vi kanskje vite ting som formen på sannsynlighetsfordelingen bution, den mest sannsynlige verdien, spredningen av verdier og andre egenskaper.
Å vite sannsynlighetsfordelingen for en tilfeldig variabel kan bidra til å beregne fordelingsmomenter, som gjennomsnitt og varians, men kan også være nyttig for andre mer generelle hensyn, som å avgjøre om en observasjon er usannsynlig eller svært usannsynlig og kan være en outlier eller anomali.
Problemet er at vi kanskje ikke vet sannsynlighetsfordelingen for en tilfeldig variabel. Vi kjenner sjelden fordelingen fordi vi ikke har tilgang til alle mulige resultater for en tilfeldig variabel. Faktisk er alt vi har tilgang til et utvalg av observasjoner. Som sådan må vi velge en sannsynlighetsfordeling.
Dette problemet blir referert til som estimering av sannsynlighetstetthet, eller bare «tetthetsestimering», ettersom vi bruker observasjonene i et tilfeldig utvalg for å estimere den generelle tettheten av sannsynligheter utover bare datautvalget vi har tilgjengelig.
Det er noen få trinn i prosessen med tetthetsestimering for en tilfeldig variabel.
Det første trinnet er å gjennomgå tettheten av observasjoner i den tilfeldige prøven med et enkelt histogram. Fra histogrammet kan vi kanskje identifisere en vanlig og godt forstått sannsynlighetsfordeling som kan brukes, for eksempel en normalfordeling. Hvis ikke, må vi kanskje tilpasse en modell til estimer fordelingen.
I de følgende avsnittene vil vi se nærmere på hvert av disse trinnene etter tur.
Vi vil fokusere på univariate data, f.eks. en tilfeldig variabel, i dette innlegget for enkelhets skyld. Selv om trinnene gjelder for multivariate data, kan de bli mer utfordrende ng når antall variabler øker.
Vil du lære sannsynlighet for maskinlæring
Ta mitt gratis 7-dagers e-postkrasjkurs nå (med eksempelkode).
Klikk for å registrere deg og få også en gratis PDF Ebook-versjon av kurset.
Last ned ditt GRATIS minikurs
Oppsummer tetthet med et histogram
Det første trinnet i tetthetsestimering er å lage et histogram over observasjonene i det tilfeldige utvalget.
Et histogram er et plott som innebærer at man først grupperer observasjonene i søpla og teller antall hendelser som faller i hver søppel. Antall, eller frekvenser av observasjoner, i hver søppel blir deretter tegnet som et søylediagram med søppelkassene på x-aksen og frekvensen på y-aksen.
Valget av antall kasser er viktig da den kontrollerer grovheten i fordelingen (antall stolper) og i sin tur hvor godt tettheten til observasjonene er tegnet. Det er en god ide å eksperimentere med forskjellige bin-størrelser for en gitt dataeksempel for å få flere perspektiver eller visninger på de samme dataene.
Et histogram kan opprettes ved hjelp av Matplotlib-biblioteket og hist () -funksjonen. Dataene blir gitt som det første argumentet, og antall hyller spesifiseres via «søppel» -argumentet enten som et helt tall (f.eks. 10) eller som en sekvens av grensene til hver søppel (f.eks.).
Utdraget nedenfor lager et histogram med 10 søppel for en dataeksempel.
1
2
3
4
|
…
# plott et histogram av prøven
pyplot.hist (sample, kasser = 10)
pyplot.show ()
|
Vi kan lage et tilfeldig utvalg hentet fra en normalfordeling og p retend, vi vet ikke fordelingen, og lag deretter et histogram av dataene. Den normale () NumPy-funksjonen vil oppnå dette, og vi vil generere 1000 prøver med et gjennomsnitt på 0 og et standardavvik på 1, f.eks. en standard gaussisk.
Det komplette eksemplet er oppført nedenfor.
1
2
3
4
5
6
7
8
|
# eksempel på å plotte et histogram for et tilfeldig utvalg
fra matplotlib importere pyplot
fra numpy. tilfeldig import normal
# generere et utvalg
sample = normal (size = 1000)
# plott et histogram av prøven
pyplot.hist (sample, bins = 10)
pyplot.show ()
|
Kjører eksempel tegner et utvalg av tilfeldige observasjoner og oppretter histogrammet med 10 søppelkasser. Vi kan tydelig se formen på normalfordelingen.
Vær oppmerksom på at resultatene dine vil være forskjellige med tanke på dataprøvenes tilfeldige natur. Prøv å kjøre eksemplet et par ganger.
Histogramdiagram med 10 søppler av en tilfeldig dataprøve
Å kjøre eksemplet med hyller satt til 3 gjør normalfordelingen mindre åpenbar.
Histogramdiagram med 3 søppelbøtter av en tilfeldig dataprøve
Gjennomgang av et histogram av en dataprøve med en rekke forskjellige antall søppelbøtter vil bidra til å identifisere om tettheten ser ut som en vanlig sannsynlighetsfordeling eller ikke.
I de fleste tilfeller vil du se en unimodal fordeling, for eksempel den velkjente klokkeformen til det normale, den flate formen på uniformen eller den synkende eller stigende formen til en eksponentiell eller Pareto-distribusjon.
Du kan også se komplekse distribusjoner, for eksempel flere topper som ikke forsvinner med forskjellige antall søppelkasser, referert til som en bimodal fordeling, eller flere topper, referert til som en multimodal distribusjon. Du kan også se en stor tetthet for en gitt verdi eller et lite verdiområde som indikerer avvik, ofte forekommende på halen av en fordeling langt borte fra resten av tettheten.
Estimering av parametrisk tetthet
Formen på et histogram av de fleste tilfeldige prøver vil matche en kjent sannsynlighetsfordeling.
Vanlige distribusjoner er vanlige fordi de forekommer igjen og igjen i forskjellige og noen ganger uventede domener.
Bli kjent med de vanlige sannsynlighetsfordelingene, da det vil hjelpe deg å identifisere en gitt fordeling fra et histogram.
Når du er identifisert, kan du prøve å estimere tettheten til den tilfeldige variabelen med en valgt sannsynlighetsfordeling. Dette kan oppnås ved å estimere parametrene for fordelingen fra et tilfeldig utvalg av data.
For eksempel har normalfordelingen to parametere: gjennomsnittet og standardavviket. Gitt disse to parametrene, kjenner vi nå sannsynlighetsfordelingsfunksjonen. Disse parametrene kan estimeres ut fra data ved å beregne eksemplets gjennomsnitt og standardavvik.
Vi refererer til denne prosessen som parametrisk tetthetsestimering.
Årsaken er at vi bruker forhåndsdefinerte funksjoner for å oppsummere forholdet mellom observasjoner og deres sannsynlighet som kan kontrolleres eller konfigureres med parametere, derav «parametrisk».
Når vi har estimert tettheten, kan vi sjekke om den passer godt. Dette kan gjøres på mange måter, for eksempel:
- Plotte tetthetsfunksjonen og sammenligne formen til histogrammet.
- Sampling av tetthetsfunksjonen og sammenligning av den genererte prøven med det virkelige utvalget.
- Ved å bruke en statistisk test for å bekrefte at dataene passer til fordelingen.
Vi kan demonstrere dette med et eksempel.
Vi kan generere et tilfeldig utvalg på 1000 observasjoner fra en normalfordeling med et gjennomsnitt på 50 og et standardavvik på 5.
1
2
3
|
…
# generer et eksempel
prøve = normal (loc = 50, skala = 5, størrelse = 1000)
|
Vi kan da late som om vi ikke kjenner sannsynlighetsfordelingen og kanskje se på et histogram og gjette at det er normalt. Forutsatt at det er normalt, kan vi deretter beregne parametrene for fordelingen, spesielt gjennomsnittet og standardavviket.
Vi forventer ikke at middel- og standardavviket er 50 og 5 nøyaktig gitt den lille prøvestørrelsen og støy i prøvetakingsprosessen.
Pass deretter på fordelingen med disse parametrene, såkalt parametrisk tetthetsestimering av dataprøven vår.
I dette tilfellet kan vi bruke normen ( ) SciPy-funksjon.
1
2
3
|
…
# definer fordelingen
dist = norm (sample_mean, sam ple_std)
|
Vi kan deretter prøve sannsynlighetene fra denne fordelingen for en rekke verdier i domenet vårt, i dette tilfellet mellom 30 og 70.
Til slutt kan vi plotte et histogram av dataeksemplet og legge et linjediagram over sannsynlighetene beregnet for verdiområdet fra PDF.
Det er viktigere at vi kan konvertere antall eller frekvenser i hver bin i histogrammet til en normalisert sannsynlighet for å sikre at y-aksen til histogrammet samsvarer med y-aksen til linjeplottet. Dette kan oppnås ved å sette argumentet «tetthet» til «Sann» i samtalen til hist ().
1
2
3
4
|
…
# plott histogrammet og pdf
pyplot.hist (sample, bins = 10, density = True)
pyplot.plot (verdier, sannsynligheter)
|
Når du knytter disse kodebitene sammen, vises det komplette eksemplet på estimering av parametrisk tetthet nedenfor. , estimerer deretter parametrene for normal sannsynlighet fordeling.
Vær oppmerksom på at resultatene dine vil være forskjellige med tanke på dataprøvenes tilfeldige natur. Prøv å kjøre eksemplet noen ganger.
I dette tilfellet kan vi se at gjennomsnittet og standardavviket har noe støy og er litt forskjellige fra de forventede verdiene på henholdsvis 50 og 5. Støyen er liten, og distribusjonen forventes fortsatt å passe godt.
1
|
Mean = 49.852 , Standardavvik = 5.023
|
Neste er PDF-en passende ved å bruke de estimerte parametrene og histogrammet for dataene med 10 søppelkasser sammenlignes med sannsynligheter for en rekke verdier som er samplet fra PDF-en.
Vi kan se at PDF-filen passer godt sammen med våre data.
Dataprøvehistogram med sannsynlighetsdensitetsfunksjon Overlegg for normalfordeling
Det er mulig at dataene samsvarer med en vanlig sannsynlighetsfordeling, men krever en transformasjon før estimering av parametrisk tetthet.
For eksempel kan du ha avvikende verdier som er langt fra gjennomsnittet eller massesenteret til fordelingen. Dette kan ha den effekten at det blir gitt feil estimater av distribusjonsparametrene og i sin tur forårsaker en dårlig tilpasning til dataene. Disse avvikene bør fjernes før distribusjonsparametrene estimeres.
Et annet eksempel er at dataene kan ha en skjev eller flyttes mot venstre eller høyre. I dette tilfellet må du kanskje transformere dataene før du estimerer parametrene, for eksempel å ta loggen eller kvadratroten, eller mer generelt, ved å bruke en krafttransformasjon som Box-Cox-transformasjonen.
Disse typene endringer i dataene er kanskje ikke åpenbare, og effektiv estimering av parametrisk tetthet kan kreve en iterativ prosess med:
- Loop Before Fit of Distribution to Data is Good Enough:
- 1. Anslå distribusjonsparametere
- 2. Gjennomgang av den resulterende PDF-en mot dataene
- 3. Transformere dataene slik at de passer bedre til fordelingen
Estimering av ikke-parametrisk tetthet
I noen tilfeller kan et dataeksempel ikke ligne en vanlig sannsynlighet distribusjon eller kan ikke lett gjøres for å passe til fordelingen.
Dette er ofte tilfelle når dataene har to topper (bimodal fordeling) eller mange topper (multimodal fordeling).
I dette i tilfelle er ikke estimering av parametrisk tetthet mulig, og alternative metoder kan brukes som ikke bruker en vanlig fordeling. I stedet brukes en algoritme for å tilnærme sannsynlighetsfordelingen av dataene uten en forhåndsdefinert fordeling, referert til som en ikke-parametrisk metode.
Distribusjonene vil fortsatt ha parametere, men er ikke direkte kontrollerbare på samme måte som enkle sannsynlighetsfordelinger. For eksempel kan en ikke-parametrisk metode estimere tettheten ved bruk av alle observasjoner i et tilfeldig utvalg, og faktisk gjøre alle observasjoner i prøven «parametere.»
Kanskje den vanligste ikke-parametriske tilnærmingen for å estimere sannsynlighetstetthetsfunksjonen en kontinuerlig tilfeldig variabel kalles kjerneutjevning, eller estimering av kjernetetthet, KDE for kort.
- Kernel Density Estimation: Nonparametrisk metode for å bruke et datasett til å estimere sannsynligheter for nye punkter. / ul>
I dette tilfellet er en kjerne en matematisk funksjon som returnerer en sannsynlighet for en gitt verdi av en tilfeldig variabel. Kjernen utjevner eller interpolerer sannsynligheten effektivt over utvalget for en tilfeldig variabel slik at summen av sannsynligheter er lik ett, et krav om veloppførte sannsynligheter.
Kjernefunksjonen veier bidraget fra observasjoner fra en datasamling basert på deres forhold eller avstand til et gitt spørreeksempel som t sannsynligheten blir bedt om.
En parameter, kalt utjevningsparameteren eller båndbredden, styrer omfanget eller vinduet for observasjoner fra dataeksemplet som bidrar til å estimere sannsynligheten for et gitt utvalg. Som sådan kalles estimering av kjernetetthet noen ganger som et Parzen-Rosenblatt-vindu, eller bare et Parzen-vindu, etter utviklerne av metoden.
- Utjevningsparameter (båndbredde): Parameter som styrer antall prøver eller vindu av prøver som brukes til å estimere sannsynligheten for et nytt punkt.
Et stort vindu kan resultere i en grov tetthet med små detaljer, mens et lite vindu kan ha for mye detaljer og ikke være glatt eller generell nok til å dekke nye eller usynlige eksempler på riktig måte.Bidraget til prøver i vinduet kan formes ved hjelp av forskjellige funksjoner, noen ganger referert til som basisfunksjoner, f.eks. uniform normal osv., med forskjellige effekter på glattheten til den resulterende tetthetsfunksjonen.
- Basisfunksjon (kjerne): Funksjonen som ble valgt, brukes til å kontrollere bidraget til prøver i datasettet til estimering av sannsynlighet for et nytt punkt.
Som sådan kan det være nyttig å eksperimentere med forskjellige vindusstørrelser og forskjellige bidragsfunksjoner og evaluere resultatene mot histogrammer av dataene.
Vi kan demonstrere dette med et eksempel.
Først kan vi konstruere en bimodal fordeling ved å kombinere prøver fra to forskjellige normalfordelinger. Nærmere bestemt 300 eksempler med et gjennomsnitt på 20 og et standardavvik på 5 (den mindre toppen), og 700 eksempler med et gjennomsnitt på 40 og et standardavvik på 5 (den største toppen). Midlene ble valgt tett sammen for å sikre at fordelingen overlapper i den kombinerte prøven.
Det komplette eksemplet på å lage denne prøven med en bimodal sannsynlighetsfordeling og plotte histogrammet er listet opp nedenfor.
Når du kjører eksemplet, opprettes dataeksemplet og plottes histogrammet.
Merk at resultatene dine vil være forskjellige med tanke på dataprøvenes tilfeldige natur. Prøv å kjøre eksemplet noen ganger.
Vi har færre prøver med et gjennomsnitt på 20 enn prøver med et gjennomsnitt på 40, som vi kan se reflektert i histogrammet med en større tetthet av prøver rundt 40 enn rundt 20.
Data med denne fordelingen passer ikke pent inn i en vanlig sannsynlighetsfordeling, etter design. Det er en god sak å bruke en ikke-parametrisk metode for estimering av kjernetetthet.
Histogram Plot of Data Sample Med en bimodal sannsynlighetsfordeling
Scikit-lær maskinlæringsbiblioteket gir KernelDensity-klassen som implementerer kjernetetthetsestimering.
Først er klassen konstruert med ønsket båndbredde (vindusstørrelse) og kjerne (basisfunksjon) argumenter. Det er lurt å teste forskjellige konfigurasjoner på dataene dine. I dette tilfellet vil vi prøve en båndbredde på 2 og en Gaussisk kjerne.
Klassen blir deretter passet på en datasamling via fit () -funksjonen. Funksjonen forventer at dataene skal ha en 2D-form med skjemaet, derfor kan vi omforme dataeksemplet vårt til å ha 1000 rader og en kolonne.
12345…# fit densitymodel = KernelDensity (bandwidth = 2, kernel = «gaussian»)sample = sample.reshape ((len (sample), 1))model.fit (sample)Vi kan deretter evaluere hvor godt tetthetsestimatet samsvarer med dataene våre ved å beregne sannsynlighetene for en rekke obs ervasjoner og sammenligne formen med histogrammet, akkurat som vi gjorde for det parametriske tilfellet i forrige avsnitt.
Score_samples () -funksjonen på KernelDensity vil beregne loggsannsynligheten for en rekke prøver. Vi kan lage et utvalg eksempler fra 1 til 60, om området for domenet vårt, beregne loggsannsynlighetene og deretter invertere loggoperasjonen ved å beregne eksponenten eller exp () for å returnere verdiene til området 0-1 for normale sannsynligheter .
Til slutt kan vi lage et histogram med normaliserte frekvenser og et overleggslinjediagram over verdier til estimerte sannsynligheter.
12345…# plott histogrammet og pdfpyplot.hist (sample, bins = 50, density = True)pyplot.plot (verdier, sannsynligheter)pyplot.show ()For å binde dette sammen, er det komplette eksemplet på estimering av kjernetetthet for en bimodal dataeksempel listet opp nedenfor.
Når du kjører eksemplet, opprettes datadistribusjonen, passer til estimeringsmodellen for kjernetetthet, og plotter deretter histogrammet til dataeksemplet og PDF-en fra KDE-modellen.
Vær oppmerksom på at resultatene dine vil være forskjellige med tanke på dataprøvenes tilfeldige natur. Prøv å kjøre eksemplet noen ganger.
I dette tilfellet kan vi se at PDF-filen passer godt til histogrammet. Den er ikke veldig jevn og kan gjøres mer ved å sette argumentet «båndbredde» til 3 prøver eller høyere. Eksperimenter med forskjellige verdier av båndbredde og kjernefunksjon.
Histogram og sannsynlighetsdensitetsfunksjon Plot estimert via Kernel Density Estimation for a Bimodal Data Sample
KernelDensity class er kraftig og støtter estimering av PDF for flerdimensjonale data.
Videre lesing
Denne delen gir flere ressurser om emnet hvis du ønsker å gå dypere.
Bøker
- Mønstergjenkjenning og maskinlæring, 2006.
- Maskinlæring: Et sannsynlig perspektiv, 2012.
- Elementene til statistisk læring: Data Mining, Inference og prediksjon, 2009.
API
- scipy.stats.gaussian_kde API.
- Nonparametric Methods nonparametric, Statsmodels API.
- Kernel Density Estimation Statsmodels Exa mple.
- Density Estimation, Scikit-Learn API.
Articles
- Density estimation, Wikipedia.
- Histogram, Wikipedia.
- Estimering av kjernetetthet, Wikipedia.
- Estimering av flere kjernetettheter, Wikipedia.
- Estimering av kjernetetthet via vinduet Metoden Parzen-Rosenblatt, 2014.
- In-Depth: Kernel Density Estimation.
Oppsummering
I denne veiledningen oppdaget du en mild introduksjon til estimering av sannsynlighetstetthet.
Spesielt lærte du:
- Histogramdiagrammer gir en rask og pålitelig måte å visualisere sannsynlighetstettheten til en dataeksempel.
- Parametrisk sannsynlighetstetthet estimering innebærer å velge en vanlig fordeling og estimere parametrene for tetthetsfunksjonen fra et dataeksempel.
- Ikke-parametrisk sannsynlighetsdensestimering innebærer å bruke en teknikk for å tilpasse en modell til den vilkårlige fordelingen av dataene, som estimering av kjernetetthet på.
Har du noen spørsmål?
Still spørsmålene dine i kommentarene nedenfor, så vil jeg gjøre mitt beste for å svare.Få hånd om sannsynligheten for maskinlæring!
Utvikle forståelsen din av sannsynlighet
… med bare noen få linjer med pythonkode
Oppdag hvordan i min nye eBok:
Sannsynlighet for maskinlæringDen gir selvstudium tutorials og end-to-end prosjekter om:
Bayes teori, Bayesian optimalisering, distribusjoner, maksimal sannsynlighet, kryssentropi, kalibreringsmodeller
og mye mer …Endelig utnytt usikkerhet i Dine prosjekter
Hopp over akademikerne. Bare resultater. Se hva som er inne i
Tweet Share Del