Prediksjonsintervaller for Maskinlæring

Tweet Share Share

Sist Oppdatert 17. februar 2021

en prediksjon fra et maskinlæringsperspektiv er et enkelt punkt som skjuler usikkerheten i denne prediksjonen.

Prediksjonsintervaller gir en måte å kvantifisere og kommunisere usikkerheten i en prediksjon. De er forskjellige fra konfidensintervaller som i stedet søker å kvantifisere usikkerheten i en populasjonsparameter som et gjennomsnitt eller standardavvik. Prediksjonsintervaller beskriver usikkerheten for et enkelt bestemt utfall.

i denne opplæringen vil du oppdage prediksjonsintervallet og hvordan du beregner det for en enkel lineær regresjonsmodell.

etter å ha fullført denne opplæringen, vil du vite:

  • At et prediksjonsintervall kvantifiserer usikkerheten til en enkeltpunktsprognose.
  • at prediksjonsintervaller kan estimeres analytisk for enkle modeller, men er mer utfordrende for ikke-lineære maskinlæringsmodeller.
  • hvordan beregne prediksjonsintervallet for en enkel lineær regresjonsmodell.Kick-start prosjektet med min nye Bok Statistikk For Maskinlæring, inkludert trinn-for-trinn tutorials og Python kildekodefiler for alle eksempler.

    La oss komme i gang.

    • Oppdatert Juni / 2019: Korrigert signifikansnivå som en brøkdel av standardavvik.
    • Oppdatert April / 2020: Fast skrivefeil i plott av prediksjonsintervall.
    Prediksjonsintervaller For Maskinlæring

    Prediksjonsintervaller for Maskinlæring
    Foto Av Jim Bendon, noen rettigheter reservert.

    Tutorial Oversikt

    denne opplæringen er delt inn i 5 deler; de er:

    1. Hva Er Galt med Et Punktestimat?
    2. Hva Er Et Prediksjonsintervall?
    3. Hvordan Beregne Et Prediksjonsintervall
    4. Prediksjonsintervall For Lineær Regresjon
    5. Jobbet Eksempel

    Trenger Du Hjelp Med Statistikk for Maskinlæring?

    Ta min gratis 7-dagers e-lynkurs nå (med eksempelkode).

    Klikk for å registrere deg og få også en GRATIS Pdf Ebook-versjon av kurset.

    Download Your FREE Mini-Course

    Why Calculate a Prediction Interval?

    In predictive modeling, a prediction or a forecast is a single outcome value given some input variables.

    For example:

    1
    yhat = model.predict (x)

    hvor yhat er estimert utfall eller prediksjon gjort Av den trente modellen For de gitte inngangsdata X.

    Dette er et punkt prediksjon.

    per definisjon er det et estimat eller en tilnærming og inneholder noe usikkerhet.

    usikkerheten kommer fra feilene i selve modellen og støy i inngangsdataene. Modellen er en tilnærming av forholdet mellom inngangsvariablene og utgangsvariablene.

    gitt prosessen som brukes til å velge og justere modellen, vil det være den beste tilnærmingen gitt tilgjengelig informasjon, men det vil fortsatt gjøre feil. Data fra domenet vil naturlig skjule det underliggende og ukjente forholdet mellom input-og output-variablene. Dette vil gjøre det til en utfordring å passe modellen, og vil også gjøre det til en utfordring for en fit modell å gjøre spådommer.Gitt disse to hovedkildene til feil, er deres punktprediksjon fra en prediktiv modell utilstrekkelig for å beskrive den sanne usikkerheten i prediksjonen.

    Hva Er Et Prediksjonsintervall?

    et prediksjonsintervall er en kvantifisering av usikkerheten på en prediksjon.

    det gir en probabilistisk øvre og nedre grenser på estimatet av en utfallsvariabel.

    et prediksjonsintervall for en enkelt fremtidig observasjon er et intervall som med en spesifisert grad av tillit vil inneholde en fremtidig tilfeldig valgt observasjon fra en fordeling.

    — Side 27, Statistiske Intervaller: En Veiledning for Utøvere og Forskere, 2017.

    Prediksjonsintervaller brukes oftest når du gjør spådommer eller prognoser med en regresjonsmodell, hvor en mengde blir spådd.

    et eksempel på presentasjonen av et prediksjonsintervall er som følger:

    Gitt en prediksjon av ‘ y ‘gitt ‘ x’, er det en 95% sannsynlighet for at området ‘a’ til ‘b’ dekker det sanne utfallet.

    prediksjonsintervallet omgir prediksjonen laget av modellen og forhåpentligvis dekker området for det sanne utfallet.

    diagrammet nedenfor bidrar til å visuelt forstå forholdet mellom prediksjon, prediksjon intervall, og det faktiske utfallet.

    Forholdet mellom prediksjon, faktisk verdi og prediksjonsintervall

    Forholdet mellom prediksjon, faktisk verdi og prediksjonsintervall.
    Hentet Fra «Machine learning approaches for estimering av prediksjonsintervall for modellutgangen», 2006.

    et prediksjonsintervall er forskjellig fra et konfidensintervall.

    et konfidensintervall kvantifiserer usikkerheten på en estimert populasjonsvariabel, for eksempel gjennomsnitts-eller standardavviket. Mens et prediksjonsintervall kvantifiserer usikkerheten på en enkelt observasjon estimert fra befolkningen.i prediktiv modellering kan et konfidensintervall brukes til å kvantifisere usikkerheten til den estimerte ferdigheten til en modell, mens et prediksjonsintervall kan brukes til å kvantifisere usikkerheten til en enkelt prognose.

    et prediksjonsintervall er ofte større enn konfidensintervallet, da det må tas hensyn til konfidensintervallet og variansen i utgangsvariabelen.

    Prediksjonsintervaller vil alltid være bredere enn konfidensintervaller fordi de står for usikkerheten knyttet til e, den irreducible feilen.

    — Side 103, En Introduksjon Til Statistisk Læring: Med Applikasjoner I R, 2013.

    Hvordan Beregne Et Prediksjonsintervall

    et prediksjonsintervall beregnes som en kombinasjon av estimert varians av modellen og variansen av utfallsvariabelen.

    Prediksjonsintervaller er enkle å beskrive, men vanskelig å beregne i praksis.

    i enkle tilfeller som lineær regresjon, kan vi estimere prediksjonsintervallet direkte.i tilfeller av ikke-lineære regresjonsalgoritmer, som kunstige nevrale nettverk, er det mye mer utfordrende og krever valg og implementering av spesialiserte teknikker. Generelle teknikker som bootstrap resampling metoden kan brukes, men er beregningsmessig dyrt å beregne.papiret» En Omfattende Gjennomgang Av Nevrale Nettverksbaserte Prediksjonsintervaller og Nye Fremskritt » gir en rimelig nylig studie av prediksjonsintervaller for ikke-lineære modeller i sammenheng med nevrale nettverk. Følgende liste oppsummerer noen metoder som kan brukes til prediksjonsusikkerhet for ikke-lineære maskinlæringsmodeller:

    • Delta-Metoden, fra feltet ikke-lineær regresjon.Den Bayesianske Metoden, Fra Bayesiansk modellering og statistikk.
    • Gjennomsnittlig Varians Estimeringsmetode, ved hjelp av estimert statistikk.
    • Bootstrap-Metoden, ved hjelp av data resampling og utvikling av et ensemble av modeller.

    vi kan gjøre beregningen av et prediksjonsintervall betong med et bearbeidet eksempel i neste avsnitt.

    Prediksjonsintervall for Lineær Regresjon

    en lineær regresjon er en modell som beskriver den lineære kombinasjonen av innganger for å beregne utgangsvariablene.

    For example, an estimated linear regression model may be written as:

    1
    yhat = b0 + b1 . x

    Where yhat is the prediction, b0 and b1 are coefficients of the model estimated from training data and x is the input variable.

    vi vet ikke de sanne verdiene til koeffisientene b0 og b1. Vi vet heller ikke de sanne populasjonsparametrene som gjennomsnitt og standardavvik for x eller y. Alle disse elementene må estimeres, noe som introduserer usikkerhet i bruken av modellen for å gjøre spådommer.

    Vi kan gjøre noen forutsetninger, for eksempel fordelingene av x og y og prediksjonsfeilene gjort av modellen, kalt residuals, Er Gaussiske.

    prediksjonsintervallet rundt yhat kan beregnes som følger:

    1
    yhat +/- z * sigma

    Where yhat is the predicted value, z is the number of standard deviations from the Gaussian distribution (e.g. 1.96 for a 95% interval) and sigma is the standard deviation of the predicted distribution.

    Vi vet ikke i praksis. Vi kan beregne et objektivt estimat av den forventede standardavviket som følger (tatt Fra Maskinlæringsmetoder for estimering av prediksjonsintervall for modellutgangen):

    1
    stdev = sqrt(1 / (N – 2) * e(i)^2 for i to N)

    Where stdev is an unbiased estimate of the standard deviation for the predicted distribution, n are the total predictions made, and e(i) is the difference between the ith prediction and actual value.

    Jobbet Eksempel

    La oss gjøre tilfelle av lineære regresjon prediksjon intervaller betong med en jobbet eksempel.

    la Oss først definere et enkelt to-variabelt datasett hvor utgangsvariabelen (y) avhenger av inngangsvariabelen (x) med Noe Gaussisk støy.

    eksemplet nedenfor definerer datasettet vi vil bruke for dette eksemplet.

    1
    2
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # generer relaterte variabler
    fra numpy import betyr
    fra numpy import std
    from numpy.random import randn
    from numpy.random import seed
    from matplotlib import pyplot
    # seed random number generator
    seed(1)
    # prepare data
    x = 20 * randn(1000) + 100
    y = x + (10 * randn(1000) + 50)
    # summarize
    print(‘x: mean=%.3f stdv=%.3f’ % (mean(x), std(x)))
    print(‘y: mean=%.3f stdv=%.3f’ % (mean(y), std(y)))
    # plot
    pyplot.scatter(x, y)
    pyplot.show()

    Running the example first prints the mean and standard deviations of the two variables.

    1
    2

    x: mean=100.776 stdv=19.620
    y: mean=151.050 stdv=22.358

    et plott av datasettet blir da opprettet.

    Vi kan se det klare lineære forholdet mellom variablene med spredningen av punktene som fremhever støy eller tilfeldig feil i forholdet.

    Spredningsplott Av Relaterte Variabler

    deretter kan vi utvikle en enkel lineær regresjon som gitt inngangsvariabelen x, vil forutsi y-variabelen. Vi kan bruke linregress () SciPy-funksjonen til å passe modellen og returnere b0-og b1-koeffisientene for modellen.

    1
    2

    # fit linear regression model
    b1, b0, r_value, p_value, std_err = linregress(x, y)

    We can use the coefficients to calculate the predicted y values, called yhat, for each of the input variables. The resulting points will form a line that represents the learned relationship.

    1
    2

    # make prediction
    yhat = b0 + b1 * x

    The complete example is listed below.

    # enkel ikke-lineær regresjonsmodell
    fra numpy.random import randn
    from numpy.random import seed
    from scipy.stats import linregress
    from matplotlib import pyplot
    # seed random number generator
    seed(1)
    # prepare data
    x = 20 * randn(1000) + 100
    y = x + (10 * randn(1000) + 50)
    # fit linear regression model
    b1, b0, r_value, p_value, std_err = linregress(x, y)
    print(‘b0=%.3f, b1=%.3f’ % (b1, b0))
    # make prediction
    yhat = b0 + b1 * x
    # plot data and predictions
    pyplot.scatter(x, y)
    pyplot.plot(x, yhat, color=’r’)
    pyplot.show()

    1
    2
    4
    5
    6
    7
    8

    9

    10
    11
    12
    13
    14
    15
    16
    17
    18
    19

    Running the example fits the model and prints the coefficients.

    b0=1.011, b1=49.117

    1

    koeffisientene brukes deretter med inngangene fra datasettet for å lage en prediksjon. De resulterende inngangene og forventede y-verdiene tegnes som en linje på toppen av spredningsplottet for datasettet.

    vi kan tydelig se at modellen har lært det underliggende forholdet i datasettet.

    Spredningsplott Av Datasett med Linje for Enkel Lineær Regresjonsmodell

    Vi er nå klare Til å lage en prediksjon med vår enkle lineære regresjonsmodell og legge til et prediksjonsintervall.

    vi passer til modellen som før. Denne gangen vil vi ta en prøve fra datasettet for å demonstrere prediksjonsintervallet. Vi vil bruke inngangen til å lage en prediksjon, beregne prediksjonsintervallet for prediksjonen, og sammenligne prediksjonen og intervallet med den kjente forventede verdien.

    la Oss først definere inndata, prediksjon og forventede verdier.

    x_in=x
    y_out = y

    yhat_out = yhat

    1
    3

    deretter kan vi estimere standardkrumningen i prediksjonsretningen.

    1
    SE = sqrt(1 / (N – 2) * e(i)^2 for i to N)

    We can calculate this directly using the NumPy arrays as follows:

    1
    2
    3

    # estimate stdev of yhat
    sum_errs = arraysum((y – yhat)**2)
    stdev = sqrt(1/(len(y)-2) * sum_errs)

    Next, we can calculate the prediction interval for our chosen input:

    1
    interval = z . stdev

    We will use the significance level of 95%, which is 1.96 standard deviations.

    Once the interval is calculated, we can summarize the bounds on the prediction to the user.

    1
    2
    3

    # calculate prediction interval
    interval = 1.96 * stdev
    lower, upper = yhat_out – interval, yhat_out + interval

    We can tie all of this together. The complete example is listed below.

    1
    2
    4
    5
    6
    7
    8

    9

    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    # linear regression prediction with prediction interval
    from numpy.random import randn
    from numpy.random import seed
    from numpy import power
    from numpy import sqrt
    from numpy import mean
    from numpy import std
    from numpy import sum as arraysum
    from scipy.statistikk importere linregress
    fra matplotlib importere pyplot
    # frø tilfeldig tall generator
    frø(1)
    # forberede dataene
    x = 20 * randn(1000) + 100
    y = x + (10 * randn(1000) + 50)
    # tilpass den ikke-lineære regresjonsmodellen
    b1, b0, r_value, p_value, std_err = linregress(x, y)
    # merk spådommer
    yhat = b0 + b1 * x
    # definer ny inngang, forventet verdi og prediksjon
    x_in = x
    y_out = y
    yhat_out = yhat
    # estimat stdev av yhat
    sum_errs = arraysum ((y – yhat) * * 2)
    stdev = sqrt(1 / (len(y)-2) * sum_errs)
    # beregn prediksjon intervall
    intervall = 1,96 * stdev
    skriv ut (‘Prediksjon Intervall:%.3f ‘ % intervall)
    nedre, øvre = yhat_out – intervall, yhat_out + intervall
    skriv ut (‘95% % sannsynlighet for at den sanne verdien er mellom %.3f og %.3f ‘ % (nedre, øvre))
    skriv ut (‘sann verdi:%.3f ‘ % y_out)
    # plott datasett og prediksjon med intervall
    pyplot.scatter (x, y)
    pyplot.plott (x, yhat, farge = ‘rød’)
    pyplot.errorbar (x_in, yhat_out, yerr=intervall, farge=’ svart’, fmt = ‘o’)
    pyplot.show()

    Kjører eksemplet estimerer yhat-standardavviket og beregner deretter prediksjonsintervallet.

    når det er beregnet, presenteres prediksjonsintervallet for brukeren for den gitte inngangsvariabelen. Fordi vi konstruerte dette eksemplet, vet vi det sanne resultatet, som vi også viser. Vi kan se at i dette tilfellet dekker 95% prediksjonsintervallet den sanne forventede verdien.

    1
    2
    3

    Prediction Interval: 20.204
    95% likelihood that the true value is between 160.750 and 201.159
    True value: 183.124

    det Opprettes også et plott som viser det rå datasettet som et spredningsplott, prognosene for datasettet som en rød linje, og prediksjons-og prediksjonsintervallet som henholdsvis en svart prikk og linje.

    Spredningsplott Av Datasett Med Lineær Modell Og Prediksjonsintervall

    Utvidelser

    denne delen viser noen ideer for å utvide opplæringen som du kanskje ønsker å utforske.

    • Oppsummerer forskjellen mellom toleranse, tillit og prediksjonsintervaller.
    • Utvikle en lineær regresjonsmodell for et standard maskinlæringsdatasett og beregne prediksjonsintervaller for et lite testsett.
    • Beskriv i detalj hvordan en ikke-lineær prediksjonsintervallmetode fungerer.

    hvis du utforsker noen av disse utvidelsene, vil jeg gjerne vite.

    Videre Lesing

    denne delen gir flere ressurser om emnet hvis du ønsker å gå dypere.

    Innlegg

    • Hvordan Rapportere Klassifikatorytelse med Konfidensintervaller
    • Hvordan Beregne Bootstrap Konfidensintervaller For Maskinlæringsresultater I Python
    • Forstå Tidsserieprognoseusikkerhet Ved Hjelp Av Konfidensintervaller med Python
    • Anslå Antall Eksperimenter Som Gjentas For Stokastiske Maskinlæringsalgoritmer

    Bøker

    • Forstå Den Nye Statistikken: Effektstørrelser, Konfidensintervaller og Meta-Analyse, 2017.
    • Statistiske Intervaller: En Veiledning for Utøvere og Forskere, 2017.
    • En Introduksjon Til Statistisk Læring: Med Applikasjoner I R, 2013.
    • Introduksjon til Den Nye Statistikken: Estimering, Åpen Vitenskap og Utover, 2016.
    • Prognoser: prinsipper og praksis, 2013.

    Papers

    • en sammenligning av noen feilestimater for nevrale nettverksmodeller, 1995.
    • Maskinlæring tilnærminger for estimering av prediksjon intervall for modellen utgang, 2006.En Omfattende Gjennomgang Av Nevrale Nettverksbaserte Prediksjonsintervaller og Nye Fremskritt, 2010.

    API

    • scipy.statistikk.linregress () API
    • matplotlib.pyplot.scatter () API
    • matplotlib.pyplot.Errorbar() API

    Artikler

    • Prediksjonsintervall På Wikipedia
    • Bootstrap prediksjonsintervall På Kryss Validert

    Sammendrag

    i denne opplæringen oppdaget du prediksjonsintervallet og hvordan du beregner det for en enkel lineær regresjonsmodell.

    spesielt lærte du:

    • At et prediksjonsintervall kvantifiserer usikkerheten til en enkeltpunktsprognose.
    • at prediksjonsintervaller kan estimeres analytisk for enkle modeller, men er mer utfordrende for ikke-lineære maskinlæringsmodeller.
    • hvordan beregne prediksjonsintervallet for en enkel lineær regresjonsmodell.

    har du noen spørsmål?
    Still dine spørsmål i kommentarfeltet nedenfor, og jeg vil gjøre mitt beste for å svare.

    Få Et Håndtak På Statistikk For Maskinlæring!

    Statistiske Metoder for Maskinlæring

    Utvikle en fungerende forståelse av statistikk

    …Ved å skrive linjer med kode I python

    Oppdag hvordan I min nye Ebok: Statistiske Metoder for Maskinlæring

    Det gir selvstudium tutorials på emner som: Hypotese Tester, Korrelasjon, Nonparametric Statistikk, Resampling, og mye mer…

    Oppdag Hvordan Du Forvandler Data til Kunnskap

    Hopp Over Akademikerne. Bare Resultater.

    Se Hva Som Er Inni

    Tweet Share Share

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.