Regresjonsmodeller er tilpasset treningsdata ved hjelp av lineære regresjons- og lokale søkeoptimaliseringsalgoritmer.
Modeller som lineær regresjon og logistisk regresjon er trent av optimalisering av minste kvadrat, og dette er den mest effektive tilnærmingen til å finne koeffisienter som minimerer feil for disse modellene.
Likevel er det mulig å bruke alternativ optimaliseringsalgoritmer for å passe til en regresjonsmodell til et treningsdatasett. Dette kan være en nyttig øvelse for å lære mer om hvordan regresjon fungerer og den sentrale naturen til optimalisering i anvendt maskinlæring. Det kan også være nødvendig for regresjon med data som ikke oppfyller kravene til en optimaliseringsprosedyre for minste kvadrater.
I denne opplæringen vil du oppdage hvordan du manuelt optimaliserer koeffisientene til regresjonsmodeller.
Etter å ha fullført denne opplæringen, vil du vite:
- Hvordan utvikle inferensmodellene for regresjon fra bunnen av.
- Hvordan optimalisere koeffisientene til en lineær regresjonsmodell for å forutsi numeriske verdier.
- Hvordan optimalisere koeffisientene til en logistisk regresjonsmodell ved hjelp av stokastisk bakkeklatring.
La oss komme i gang.

Hvordan bruke optimaliseringsalgoritmer for å tilpasse regresjonsmodeller manuelt
Foto av Christian Collins, noen rettigheter forbeholdt.
Opplæringsoversikt
Denne opplæringen er delt inn i tre deler; de er:
- Optimaliser regresjonsmodeller
- Optimaliser en lineær regresjonsmodell
- Optimaliser en logistisk regresjonsmodell
Optimaliser regresjonsmodeller
Regresjonsmodeller, som lineær regresjon og logistisk regresjon, er velforståtte algoritmer fra statistikkfeltet.
Begge algoritmene er lineære, noe som betyr at utdataene til modellen er en vektet sum av inngangene. Lineær regresjon er designet for “regresjon"Problemer som krever at et tall skal forutsies, og logistisk regresjon er designet for"klassifisering”Problemer som krever at et klassemerke forutsies.
Disse regresjonsmodellene innebærer bruk av en optimaliseringsalgoritme for å finne et sett med koeffisienter for hver inngang til modellen som minimerer prediksjonsfeilen. Fordi modellene er lineære og godt forstått, kan effektive optimaliseringsalgoritmer brukes.
Ved lineær regresjon kan koeffisientene bli funnet ved optimalisering av minste kvadrat, som kan løses ved hjelp av lineær algebra. I tilfelle av logistisk regresjon brukes ofte en lokal søkeoptimaliseringsalgoritme.
Det er mulig å bruke hvilken som helst vilkårlig optimaliseringsalgoritme til å trene lineære og logistiske regresjonsmodeller.
Det vil si at vi kan definere en regresjonsmodell og bruke en gitt optimaliseringsalgoritme for å finne et sett med koeffisienter for modellen som resulterer i et minimum av prediksjonsfeil eller maksimalt klassifiseringsnøyaktighet.
Bruk av alternative optimaliseringsalgoritmer forventes å være mindre effektiv i gjennomsnitt enn å bruke den anbefalte optimaliseringen. Likevel kan det være mer effektivt i noen spesifikke tilfeller, for eksempel hvis inngangsdataene ikke oppfyller forventningene til modellen som en Gaussisk fordeling og ikke er korrelert med ytre innganger.
Det kan også være en interessant øvelse å demonstrere den sentrale naturen til optimalisering i opplæring av maskinlæringsalgoritmer, og spesielt regresjonsmodeller.
Deretter, la oss utforske hvordan vi kan trene en lineær regresjonsmodell ved å bruke stokastisk bakkeklatring.
Optimaliser en lineær regresjonsmodell
Den lineære regresjonsmodellen kan være den enkleste prediktive modellen som lærer av data.
Modellen har en koeffisient for hver inngang, og den forutsagte utgangen er ganske enkelt vekten av noen innganger og koeffisienter.
I denne delen vil vi optimalisere koeffisientene til en lineær regresjonsmodell.
La oss først definere et syntetisk regresjonsproblem som vi kan bruke som fokus for å optimalisere modellen.
Vi kan bruke make_regression () -funksjonen til å definere et regresjonsproblem med 1000 rader og 10 inngangsvariabler.
Eksemplet nedenfor oppretter datasettet og oppsummerer formen på dataene.
# definer et regresjonsdatasett fra sklearn.datasett import gjøre_regresjon # definere datasett X, y = make_regression(n_samples=1000, n_funksjoner=10, n_informativ=2, bråk=0,2, tilfeldig_stat=1) # oppsummer formen på datasettet skrive ut(X.form, y.form) |
Å kjøre eksemplet skriver ut formen til det opprettede datasettet, og bekrefter forventningene våre.
Deretter må vi definere en lineær regresjonsmodell.
Før vi optimaliserer modellkoeffisientene, må vi utvikle modellen og vår tillit til hvordan den fungerer.
La oss starte med å utvikle en funksjon som beregner aktivering av modellen for en gitt datarad med data fra datasettet.
Denne funksjonen tar raden med data og koeffisientene for modellen og beregner den vektede summen av inngangen med tillegg av en ekstra y-skjæringspunkt (også kalt forskyvning eller forspenning) koeffisient. De forutsi_row () funksjonen nedenfor implementerer dette.
Vi bruker enkle Python-lister og tvingende programmeringsstil i stedet for NumPy-arrays eller listekomprimeringer med vilje for å gjøre koden mer lesbar for Python-nybegynnere. Optimaliser den gjerne og legg inn koden din i kommentarene nedenfor.
# lineær regresjon def forutsi_row(rad, koeffisienter): # legg til bias, den siste koeffisienten resultat = koeffisienter[-1] # legg til den vektede inngangen til Jeg i område(len(rad)): resultat + = koeffisienter[i] * rad[i] komme tilbake resultat |
Deretter kan vi kalle forutsi_row () funksjon for hver rad i et gitt datasett. De forutsi_datasett () funksjonen nedenfor implementerer dette.
Igjen bruker vi med vilje en enkel tvingende kodestil for lesbarhet i stedet for listekomprimering.
# bruk modellkoeffisienter for å generere spådommer for et datasett med rader def forutsi_datasett(X, koeffisienter): yhats = liste() til rad i X: # gjør en spådom yhat = forutsi_row(rad, koeffisienter) # lagre spådommen yhats.legge til(yhat) komme tilbake yhats |
Til slutt kan vi bruke modellen til å forutsi på vårt syntetiske datasett for å bekrefte at alt fungerer som det skal.
Vi kan generere et tilfeldig sett med modellkoeffisienter ved hjelp av rand () -funksjonen.
Husk at vi trenger en koeffisient for hver inngang (ti innganger i dette datasettet) pluss en ekstra vekt for y-avskjæringskoeffisienten.
... # definere datasett X, y = make_regression(n_samples=1000, n_funksjoner=10, n_informativ=2, bråk=0,2, tilfeldig_stat=1) # bestemme antall koeffisienter n_coeff = X.form[1] + 1 # generere tilfeldige koeffisienter koeffisienter = rand(n_coeff) |
Vi kan da bruke disse koeffisientene med datasettet for å forutsi.
... # generere spådommer for datasettet yhat = forutsi_datasett(X, koeffisienter) |
Vi kan evaluere den gjennomsnittlige kvadratfeilen til disse spådommene.
... # beregne modellforutsigelsesfeil score = mean_squared_error(y, yhat) skrive ut('MSE:% f' % score) |
Det er det.
Vi kan knytte alt dette sammen og demonstrere vår lineære regresjonsmodell for regresjons prediktiv modellering. Det komplette eksemplet er oppført nedenfor.
1 2 3 4 5 6 7 8 9 10 11 12 1. 3 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# lineær regresjonsmodell fra bedøvet.tilfeldig import rand fra sklearn.datasett import make_regression fra sklearn.beregninger import mener_kvadrat_feil
# lineær regresjon def forutsi_row(rad, koeffisienter): # legg til bias, den siste koeffisienten resultat = koeffisienter[-1] # legg til den vektede inngangen til Jeg i område(len(rad)): resultat + = koeffisienter[i] * rad[i] komme tilbake resultat
# bruk modellkoeffisienter for å generere spådommer for et datasett med rader def forutsi_datasett(X, koeffisienter): yhats = liste() til rad i X: # gjør en spådom yhat = forutsi_row(rad, koeffisienter) # lagre spådommen yhats.legge til(yhat) komme tilbake yhats
# definere datasett X, y = make_regression(n_samples=1000, n_funksjoner=10, n_informativ=2, bråk=0,2, tilfeldig_tilstand=1) # bestemme antall koeffisienter n_coeff = X.form[1] + 1 # generere tilfeldige koeffisienter koeffisienter = rand(n_coeff) # generere spådommer for datasettet yhat = forutsi_datasett(X, koeffisienter) # beregne modellforutsigelsesfeil score = mean_squared_error(y, yhat) skrive ut('MSE:% f' % score) |
Å kjøre eksemplet genererer en prediksjon for hvert eksempel i treningsdatasettet, og skriver deretter ut den gjennomsnittlige kvadratfeilen for spådommene.
Merk: Resultatene dine kan variere gitt algoritmens eller evalueringsprosedyrens stokastiske natur, eller forskjeller i numerisk presisjon. Vurder å kjøre eksemplet et par ganger, og sammenlign det gjennomsnittlige resultatet.
Vi forventer en stor feil gitt et sett med tilfeldige vekter, og det er det vi ser i dette tilfellet, med en feilverdi på omtrent 7307 enheter.
Vi kan nå optimalisere koeffisientene til datasettet for å oppnå lave feil på dette datasettet.
Først må vi dele datasettet i tog- og testsett. Det er viktig å holde tilbake data som ikke brukes til å optimalisere modellen, slik at vi kan utarbeide et rimelig estimat av ytelsen til modellen når den brukes til å forutsi nye data.
Vi vil bruke 67 prosent av dataene til trening og de resterende 33 prosent som et testsett for å evaluere ...