En mild introduktion till uppskattning av sannolikhetsdensitet

Tweet Share Dela

Senast uppdaterad den 24 juli 2020

Sannolikhetstäthet är förhållandet mellan observationer och deras sannolikhet.

Vissa resultat av en slumpmässig variabel har låg sannolikhetstäthet och andra resultat har hög sannolikhetstäthet.

Den totala formen för sannolikhetstätheten kallas en sannolikhet distribution och beräkning av sannolikheter för specifika resultat av en slumpmässig variabel utförs av en sannolikhetsdensitetsfunktion, eller PDF för kort.

Det är användbart att känna till sannolikhetsdensitetsfunktionen för ett dataprov i ordning att veta om en given observation är osannolik, eller så osannolik att den betraktas som en outlier eller anomali och om den ska tas bort. Det är också användbart för att välja lämpliga inlärningsmetoder som kräver att ingångsdata har en viss sannolikhetsfördelning. Som sådan måste sannolikhetstätheten approximeras med en process som kallas sannolikhetsdensitetsuppskattning.

I denna handledning kommer du att upptäcka en mild introduktion till sannolikhetsdensitetsuppskattning.

Efter att ha slutfört detta tutorial vet du:

  • Histogramdiagram ger ett snabbt och tillförlitligt sätt att visualisera sannolikhetsdensiteten för ett dataprov.
  • Parametrisk sannolikhetsdensitetsuppskattning innebär att man väljer en gemensam fördelning och uppskatta parametrarna för densitetsfunktionen från ett dataprov.
  • Uppskattning av icke-parametrisk sannolikhetsdensitet innebär att man använder en teknik för att anpassa en modell till den godtyckliga fördelningen av data, som kärndensitetsuppskattning.

Starta ditt projekt med min nya bok Sannolikhet för maskininlärning, inklusive steg-för-steg-självstudier och Pythons källkodsfiler för alla exempel.

Låt oss komma igång.

En mild introduktion n till uppskattning av sannolikhetsdensitet – Foto av Alistair Paterson, vissa rättigheter reserverade.

Översikt över självstudier

Denna handledning är uppdelad i fyra delar; de är:

  1. Sannolikhetstäthet
  2. Sammanfatta densitet med ett histogram
  3. Parametrisk densitetsuppskattning
  4. Icke-parametrisk densitetsuppskattning

Sannolikhetsdensitet

En slumpmässig variabel x har en sannolikhetsfördelning p (x).

Förhållandet mellan resultaten av en slumpmässig variabel och dess sannolikhet är kallad sannolikhetstäthet, eller helt enkelt ”densitet”.

Om en slumpmässig variabel är kontinuerlig kan sannolikheten beräknas via sannolikhetsdensitetsfunktion, eller PDF för kort. Formen på sannolikhetstätheten funktion över domänen för en slumpmässig variabel kallas sannolikhetsfördelningen och vanliga sannolikhetsfördelningar har namn, såsom enhetlig, normal, exponentiell och så vidare.

Med tanke på en slumpmässig variabel är vi intresserade av densiteten för dess sannolikheter.

Till exempel, med ett slumpmässigt urval av en variabel, kanske vi vill veta saker som formen på sannolikhetsfördelningen men det mest troliga värdet, spridningen av värden och andra egenskaper.

Att känna till sannolikhetsfördelningen för en slumpmässig variabel kan hjälpa till att beräkna moment av distributionen, som medelvärdet och variansen, men kan också vara användbart för andra mer allmänna överväganden, som att avgöra om en observation är osannolik eller mycket osannolik och kan vara en outlier eller anomali.

Problemet är att vi kanske inte känner till sannolikhetsfördelningen för en slumpmässig variabel. Vi känner sällan till fördelningen eftersom vi inte har tillgång till alla möjliga resultat för en slumpmässig variabel. Faktum är att allt vi har tillgång till är ett urval av observationer. Som sådan måste vi välja en sannolikhetsfördelning.

Detta problem kallas sannolikhetsdensitetsuppskattning eller helt enkelt ”densitetsuppskattning”, eftersom vi använder observationerna i ett slumpmässigt urval för att uppskatta den allmänna densiteten av sannolikheter utöver bara det urval av data vi har tillgängligt.

Det finns några steg i processen för densitetsuppskattning för en slumpmässig variabel.

Det första steget är att granska densiteten av observationer i det slumpmässiga urvalet med ett enkelt histogram. Från histogrammet kan vi kanske identifiera en vanlig och välförståelig sannolikhetsfördelning som kan användas, till exempel en normalfördelning. Om inte, kan vi behöva passa en modell för att uppskatta fördelningen.

I följande avsnitt kommer vi att titta närmare på vart och ett av dessa steg i tur och ordning.

Vi fokuserar på univariata data, t.ex. en slumpmässig variabel, i det här inlägget för enkelhetens skull. Även om stegen är tillämpliga för multivariata data kan de bli mer utmanande ng när antalet variabler ökar.

Vill du lära dig sannolikheten för maskininlärning

Gå på min gratis 7-dagars e-postkraschkurs nu (med exempelkod).

Klicka för att registrera dig och få en gratis PDF Ebook-version av kursen.

Ladda ner din GRATIS minikurs

Sammanfatta densitet med ett histogram

Det första steget i densitetsuppskattning är att skapa ett histogram över observationerna i slumpmässiga urvalet.

Ett histogram är ett diagram som innebär att grupperna först grupperas i soptunnor och räknar antalet händelser som faller i varje fack. Räkningarna eller observationernas frekvenser i varje fack plottas sedan som ett stapeldiagram med facken på x-axeln och frekvensen på y-axeln.

Valet av antal fack är viktigt eftersom det kontrollerar grovheten i fördelningen (antal staplar) och i sin tur hur bra densiteten för observationerna är ritade. Det är en bra idé att experimentera med olika fackstorlekar för ett givet dataprov för att få flera perspektiv eller vyer på samma data.

Ett histogram kan skapas med Matplotlib-biblioteket och hist () -funktionen. Datan tillhandahålls som det första argumentet och antalet lagerplatser specificeras via argumentet ”lagerplatser” antingen som ett heltal (t.ex. 10) eller som en sekvens av gränserna för varje lagerplats (t.ex.).

Utdraget nedan skapar ett histogram med 10 lagerplatser för ett dataprov.

1
2
3
4

# plotta ett histogram för provet
pyplot.hist (exempel, soptunnor = 10)
pyplot.show ()

Vi kan skapa ett slumpmässigt urval från en normalfördelning och p retend vi känner inte till fördelningen och skapar sedan ett histogram för data. Den normala () NumPy-funktionen uppnår detta och vi genererar 1000 sampel med ett medelvärde på 0 och en standardavvikelse på 1, t.ex. en standard Gaussian.

Det fullständiga exemplet listas nedan.

1
2
3
4
5
6
7
8

# exempel på att plotta ett histogram för ett slumpmässigt urval
från matplotlib importera pyplot
från numpy. random import normal
# generera ett prov
-prov = normalt (storlek = 1000)
# plottar ett histogram för provet
pyplot.hist (prov, lager = 10)
pyplot.show ()

Kör exempel ritar ett urval av slumpmässiga observationer och skapar histogrammet med 10 lagerplatser. Vi kan tydligt se formen på normalfördelningen.

Observera att dina resultat kommer att skilja sig utifrån slumpmässiga karaktär av dataprov. Försök att köra exemplet några gånger.

Histogramdiagram med 10 fack i ett slumpmässigt dataprov

Att köra exemplet med soptunnor inställda på 3 gör normalfördelningen mindre uppenbar.

Histogramdiagram med 3 lagerplatser i ett slumpmässigt dataprov

Granskning av ett histogram för ett dataprov med ett antal olika antal lagerplatser hjälper till att identifiera om densiteten ser ut som en vanlig sannolikhetsfördelning eller inte.

I de flesta fall kommer du att se en unimodal fördelning, till exempel den välbekanta klockformen för det normala, den enhetliga plattformen eller den fallande eller stigande formen av en exponentiell eller Pareto-distribution.

Du kan också se komplexa fördelningar, till exempel flera toppar som inte försvinner med olika antal lagerplatser, kallad en bimodal fördelning, eller flera toppar, kallad en multimodal distribution. Du kan också se en stor spets i densitet för ett visst värde eller ett litet värdeintervall som indikerar avvikelser, som ofta förekommer i svansen på en distribution långt bort från resten av densiteten.

Parametrisk densitetsuppskattning

Formen på ett histogram för de flesta slumpmässiga proverna matchar en välkänd sannolikhetsfördelning.

De vanliga distributionerna är vanliga eftersom de förekommer om och om igen i olika och ibland oväntade domäner.

Bli bekant med de vanliga sannolikhetsfördelningarna eftersom det hjälper dig att identifiera en given distribution från ett histogram.

När du väl har identifierat kan du försöka uppskatta densiteten för den slumpmässiga variabeln med en vald sannolikhetsfördelning. Detta kan uppnås genom att uppskatta parametrarna för fördelningen från ett slumpmässigt urval av data.

Till exempel har normalfördelningen två parametrar: medelvärdet och standardavvikelsen. Med tanke på dessa två parametrar känner vi nu till sannolikhetsfördelningsfunktionen. Dessa parametrar kan uppskattas utifrån data genom att beräkna provets medelvärde och standardavvikelse.

Vi hänvisar till denna process som parametrisk densitetsuppskattning.

Anledningen är att vi använder fördefinierade funktioner för att sammanfatta förhållandet mellan observationer och deras sannolikhet som kan styras eller konfigureras med parametrar, därav ”parametrisk”.

När vi har uppskattat densiteten kan vi kontrollera om den passar bra. Detta kan göras på många sätt, till exempel:

  • Rita upp densitetsfunktionen och jämföra formen med histogrammet.
  • Provtagning av densitetsfunktionen och jämförelse av det genererade provet med det verkliga urvalet.
  • Använda ett statistiskt test för att bekräfta att data passar fördelningen.

Vi kan visa detta med ett exempel.

Vi kan generera ett slumpmässigt urval på 1000 observationer från en normalfördelning med ett medelvärde på 50 och en standardavvikelse på 5.

1
2
3

# generera ett prov
prov = normalt (loc = 50, skala = 5, storlek = 1000)

Vi kan då låtsas att vi inte vet sannolikhetsfördelningen och kanske titta på ett histogram och gissa att det är normalt. Förutsatt att det är normalt kan vi sedan beräkna parametrarna för fördelningen, specifikt medelvärdet och standardavvikelsen.

Vi förväntar oss inte att medelvärdet och standardavvikelsen är 50 och 5 exakt med tanke på den lilla urvalsstorleken och brus i samplingsprocessen.

Anpassa sedan fördelningen med dessa parametrar, så kallad parametrisk densitetsuppskattning av vårt dataprov.

I det här fallet kan vi använda normen ( ) SciPy-funktion.

1
2
3

# definiera fördelningen
dist = norm (sample_mean, sam ple_std)

Vi kan sedan prova sannolikheterna från denna fördelning för ett värdeintervall i vår domän, i det här fallet mellan 30 och 70.

Slutligen kan vi plotta ett histogram av dataprov och lägga en linjediagram över sannolikheterna beräknade för intervallet av värden från PDF.

Viktigt är att vi kan konvertera räkningarna eller frekvenserna i varje fack i histogrammet till en normaliserad sannolikhet för att säkerställa att histogrammets y-axel matchar y-axeln för linjediagrammet. Detta kan uppnås genom att ställa in argumentet ”densitet” till ”Sann” i samtalet till hist ().

1
2
3
4

# plotta histogrammet och pdf
pyplot.hist (exempel, lagerplatser = 10, densitet = Sann)
pyplot.plot (värden, sannolikheter)

Om du knyter samman dessa utdrag listas det fullständiga exemplet på parametrisk densitetsuppskattning nedan.

Att köra exemplet genererar först dataprov , uppskattar sedan parametrarna för normal sannolikhet distribution.

Observera att dina resultat kommer att skilja sig åt med tanke på dataprovens slumpmässiga natur. Försök att köra exemplet några gånger.

I det här fallet kan vi se att medelvärdet och standardavvikelsen har något brus och skiljer sig något från de förväntade värdena 50 respektive 5. Bullret är mindre och fördelningen förväntas fortfarande passa bra.

1

Medel = 49,852 , Standardavvikelse = 5.023

Därefter är PDF-filen passform använder de uppskattade parametrarna och histogrammet för data med 10 lagerplatser jämförs med sannolikheter för ett antal värden som samplats från PDF-filen.

Vi kan se att PDF-filen passar bra för våra data.

Dataprovhistogram med sannolikhetsdensitetsfunktion Overlay för normalfördelning

Det är möjligt att data överensstämmer med en gemensam sannolikhetsfördelning, men kräver en omvandling innan parametrisk densitetsuppskattning.

Du kan till exempel ha avvikande värden som är långt ifrån medelvärdet eller masscentrumet för fördelningen. Detta kan leda till att felaktiga uppskattningar av distributionsparametrarna och i sin tur orsakar en dålig anpassning till data. Dessa outliers bör tas bort innan distributionsparametrarna uppskattas.

Ett annat exempel är att data kan ha en skev eller förskjutas åt vänster eller höger. I det här fallet kan du behöva omvandla data innan du beräknar parametrarna, som att ta loggen eller kvadratroten, eller mer generellt, med en kraftomvandling som Box-Cox-transform.

Dessa typer av modifieringar av data kanske inte är uppenbara och effektiv parametrisk densitetsuppskattning kan kräva en iterativ process av:

  • Slinga tills distributionens fördelning till data är bra nog:
    • 1. Uppskattning av distributionsparametrar
    • 2. Granska den resulterande PDF-filen mot data
    • 3. Omvandla data så att de passar fördelningen bättre

Estimering av icke-parametrisk densitet

I vissa fall kan ett dataprov kanske inte likna en vanlig sannolikhet distribution eller kan inte enkelt göras för att passa distributionen.

Detta är ofta fallet när data har två toppar (bimodal distribution) eller många toppar (multimodal distribution).

I detta i fallet är parametrisk densitetsuppskattning inte genomförbar och alternativa metoder kan användas som inte använder en gemensam fördelning. Istället används en algoritm för att approximera sannolikhetsfördelningen av data utan en fördefinierad distribution, kallad en icke-parametrisk metod.

Fördelningarna har fortfarande parametrar men är inte direkt kontrollerbara på samma sätt som enkla sannolikhetsfördelningar. Till exempel kan en icke-parametrisk metod uppskatta densiteten med användning av alla observationer i ett slumpmässigt urval, vilket i själva verket gör alla observationer i provets ”parametrar.” en kontinuerlig slumpmässig variabel kallas kärnutjämning, eller kärndensitetsuppskattning, KDE för kort.

  • Kärndensitetsuppskattning: Icke-parametrisk metod för att använda en dataset för att uppskatta sannolikheter för nya punkter. / ul>

    I det här fallet är en kärna en matematisk funktion som returnerar en sannolikhet för ett givet värde av en slumpmässig variabel. Kärnan utjämnar eller interpolerar sannolikheten på ett effektivt sätt för en slumpmässig variabel så att summan av sannolikheter är lika med ett, ett krav på välskötta sannolikheter.

    Kärnfunktionen väger bidraget från observationer från ett dataprov baserat på deras förhållande eller avstånd till ett givet frågeprov för vilket sannolikheten begärs.

    En parameter, som kallas utjämningsparametern eller bandbredden, styr observationsomfånget eller fönstret från dataprov som bidrar till att uppskatta sannolikheten för ett givet prov. Som sådan kallas ibland uppskattning av kärntäthet som ett Parzen-Rosenblatt-fönster, eller helt enkelt ett Parzen-fönster, efter utvecklarna av metoden.

    • Utjämningsparameter (bandbredd): Parameter som styr antal prover eller fönster med prover som används för att uppskatta sannolikheten för en ny punkt.

    Ett stort fönster kan resultera i en grov densitet med små detaljer, medan ett litet fönster kan ha för mycket detaljer och inte vara tillräckligt smidiga eller allmänna för att korrekt täcka nya eller osedda exempel.Provets bidrag i fönstret kan formas med användning av olika funktioner, ibland kallade basfunktioner, t.ex. enhetlig normal etc. med olika effekter på den resulterande densitetsfunktionens jämnhet.

    • Grundfunktion (kärna): Den valda funktionen användes för att kontrollera bidraget från prover i datamängden för att uppskatta sannolikhet för en ny punkt.

    Som sådan kan det vara användbart att experimentera med olika fönsterstorlekar och olika bidragsfunktioner och utvärdera resultaten mot histogram av datan.

    Vi kan visa detta med ett exempel.

    Först kan vi konstruera en bimodal fördelning genom att kombinera sampel från två olika normala fördelningar. Specifikt 300 exempel med ett medelvärde på 20 och en standardavvikelse på 5 (den mindre toppen) och 700 exempel med ett medelvärde på 40 och en standardavvikelse på 5 (den större toppen). Medlet valdes nära varandra för att säkerställa att fördelningarna överlappar varandra i det kombinerade provet.

    Det fullständiga exemplet för att skapa detta prov med en bimodal sannolikhetsfördelning och plottning av histogrammet listas nedan.

    Genom att köra exemplet skapas dataexemplet och ritas histogrammet.

    Observera att dina resultat kommer att skilja sig med tanke på dataprovens slumpmässiga natur. Försök att köra exemplet några gånger.

    Vi har färre prover med ett medelvärde på 20 än prov med ett medelvärde på 40, vilket vi kan se återspeglas i histogrammet med en större densitet av prover runt 40 än runt 20.

    Data med denna distribution passar inte snyggt in i en vanlig sannolikhetsfördelning, efter design. Det är ett bra fall att använda en icke-parametrisk metod för uppskattning av kärndensitet.

    Histogramdiagram över dataprov Med en bimodal sannolikhetsfördelning

    Scikit-lär maskininlärningsbiblioteket ger KernelDensity-klassen som implementerar kärndensitetsuppskattning.

    Först är klassen konstruerad med önskad bandbredd (fönsterstorlek) och kärnan (grundfunktion) argument. Det är en bra idé att testa olika konfigurationer på dina data. I det här fallet kommer vi att prova en bandbredd på 2 och en Gaussisk kärna.

    Klassen passar sedan på ett dataprov via funktionen fit (). Funktionen förväntar sig att data har en 2D-form med formuläret, därför kan vi omforma vårt dataprov till att ha 1 000 rader och 1 kolumn.

    1
    2
    3
    4
    5

    # fit density
    model = KernelDensity (bandwidth = 2, kernel = ”gaussian”)
    sample = sample.reshape ((len (sample), 1))
    model.fit (exempel)

    Vi kan sedan utvärdera hur väl densitetsuppskattningen matchar våra data genom att beräkna sannolikheterna för en rad obs ervationer och att jämföra formen med histogrammet, precis som vi gjorde för det parametriska fallet i föregående avsnitt.

    Funktionen score_samples () på KernelDensity beräknar loggsannolikheten för en uppsättning prover. Vi kan skapa ett intervall av sampel från 1 till 60, om området för vår domän, beräkna loggsannolikheterna och sedan invertera loggoperationen genom att beräkna exponenten eller exp () för att returnera värdena till intervallet 0-1 för normala sannolikheter .

    Slutligen kan vi skapa ett histogram med normaliserade frekvenser och en överliggande linjediagram över värden till uppskattade sannolikheter.

    1
    2
    3
    4
    5

    # plotta histogrammet och pdf
    pyplot.hist (prov, lagerplatser = 50, densitet = Sann)
    pyplot.plot (värden, sannolikheter)
    pyplot.show ()

    Om du kopplar ihop detta listas det fullständiga exemplet på kärntäthetsuppskattning för ett bimodalt dataprov nedan.

    Att köra exemplet skapar datadistributionen, passar uppskattningsmodellen för kärndensitet och plottar sedan histogrammet för dataprov och PDF från KDE-modellen.

    Observera att dina resultat kommer att skilja sig åt med tanke på dataprovens slumpmässiga natur. Försök att köra exemplet några gånger.

    I det här fallet kan vi se att PDF-filen passar bra för histogrammet. Det är inte så smidigt och kan göras mer genom att ställa in argumentet ”bandbredd” på 3 prover eller högre. Experimentera med olika värden för bandbredd och kärnfunktion.

    Histogram och sannolikhetsdensitetsfunktionsdiagram uppskattad via Kernel Density Estimation för ett bimodalt dataprov

    KernelDensity-klassen är kraftfull och stöder uppskattning av PDF för flerdimensionell data.

    Ytterligare läsning

    Detta avsnitt ger fler resurser om ämnet om du vill gå djupare.

    Böcker

    • Mönsterigenkänning och maskininlärning, 2006.
    • Machine Learning: A Probabilistic Perspective, 2012.
    • Elementen för statistiskt lärande: Data Mining, Inference och förutsägelse, 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.
    • Uppskattning av kärndensitet, Wikipedia.
    • Uppskattning av flera kärndensiteter, Wikipedia.
    • Uppskattning av kärntäthet via fönstermetoden Parzen-Rosenblatt, 2014.
    • Djupgående: Kernel Density Estimation.

    Sammanfattning

    I denna handledning upptäckte du en mild introduktion till uppskattning av sannolikhetsdensitet.

    Du lärde dig specifikt:

    • Histogramdiagram ger ett snabbt och pålitligt sätt att visualisera sannolikhetsdensiteten för ett dataprov.
    • Parametrisk sannolikhetstäthet uppskattning innebär att man väljer en gemensam fördelning och uppskattar parametrarna för densitetsfunktionen från ett dataprov. den.

    Har du några frågor?
    Ställ dina frågor i kommentarerna nedan så gör jag mitt bästa för att svara.

    Få hand om sannolikheten för maskininlärning!

    Utveckla din förståelse för sannolikhet

    … med bara några rader pythonkod

    Upptäck hur i min nya e-bok:
    Sannolikhet för maskininlärning

    Det ger självstudier tutorials och end-to-end-projekt om:
    Bayes Theorem, Bayesian Optimization, Distributions, Maximum Likelihood, Cross-Entropy, Calibrating Models
    och mycket mer …

    Slutligen utnyttja osäkerhet i Dina projekt

    Hoppa över akademikerna. Bara resultat. Se vad som finns i

    Tweet Share Dela

Leave a Reply

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *