Kursinnhold
Lineær Regresjon med Python
Lineær Regresjon med Python
Velge Funksjonene
I mange oppgaver kan du ha mange egenskaper som du ikke vet om er nyttige eller ikke. Heldigvis kan du trene en modell med alle, se hvilke som ikke har innvirkning, og deretter trene modellen på nytt med kun de som har innvirkning.
Hvorfor fjerne egenskaper fra modellen?
Hvis du legger til en egenskap i modellen som ikke har noen sammenheng med målet, vil det skape støy i modellen og gjøre prediksjonen dårligere. Når du har mange unyttige egenskaper, vil støyen øke, og modellen vil prestere stadig dårligere.
Hvordan vite om egenskapene er gode eller dårlige?
Som du allerede vet, beregner OLS-klassen også statistisk informasjon under trening. Blant annet utfører den en t-test for å avgjøre om hver egenskap har en signifikant innvirkning på målet. Resultatene av testen finnes i summary()
-tabellen som vist nedenfor:
import pandas as pd import statsmodels.api as sm file_link='https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/heights_two_feature.csv' df = pd.read_csv(file_link) # Open the file X,y = df[['Father', 'Mother']], df['Height'] # Assign the variables X_tilde = sm.add_constant(X) # Create X_tilde regression_model = sm.OLS(y, X_tilde).fit() # Initialize and train an OLS object print(regression_model.summary()) #Get the summary
Det vi er interessert i, er p-verdien for hver funksjon.
Kort sagt, jo lavere p-verdi, desto høyere tillit til at funksjonen har betydning.
I statistikk må vi fastsette terskelen for p-verdien, kalt signifikansnivå. Dette settes vanligvis til 0,05, og når p-verdien er høyere enn dette signifikansnivået, anses egenskapen som ikke innflytelsesrik.
I praksis vil imidlertid egenskaper med litt høyere p-verdi enn 0,05 ofte også forbedre modellen. Det er derfor bedre å teste modellen både med og uten denne egenskapen, i stedet for å fjerne den umiddelbart, med mindre den har en svært høy p-verdi (>0,4). I slike tilfeller kan egenskapen trygt fjernes.
p-verdi varierer fra 0 til 1, så når vi snakker om lav p-verdi mener vi mindre enn 0,05, og høy p-verdi betyr vanligvis større enn 0,3-0,5.
I vårt eksempel fikk vi p-verdier for mors høyde og konstant på 0,087 og 0,051. Hvis vi fjerner egenskaper med en p-verdi > 0,05, får vi resultatet nedenfor (til venstre).
Selv visuelt kan vi se at modellen med konstant (til høyre) er bedre, så det er bedre å ikke fjerne den fra modellen.
Det er vanlig å få relativt høye p-verdier (0,05 til 0,2) for betydningsfulle egenskaper når datasettet er lite. P-verdien viser hvor sikker man kan være på at egenskapen har betydning, og det er naturlig at jo flere observasjoner vi har, desto lettere er det å skille betydningsfulle egenskaper fra dårlige.
Si at du har data som viser at 9/10 av høye personer du kjenner spiste epler daglig. Kan du være sikker på at dette har en sammenheng? Men hva om det var 9000/10000? Da ville du vært mer sikker.
Hvordan fjerne dårlige egenskaper?
Du trenger bare å fjerne kolonnen som er relatert til egenskapen fra X_tilde
. Dette kan gjøres med følgende kode:
X_tilde = X_tilde.drop(___, axis=1)
For eksempel, for å fjerne kolonnene 'const' og 'Mother' bruker du:
X_tilde = X_tilde.drop(['Mother', 'const'], axis=1)
Deretter oppretter du et nytt OLS-objekt ved å bruke den oppdaterte X_tilde
:
regression_model=sm.OLS(y, X_tilde)
1. Hvilke av funksjonene bør BEHOLDES?
2. Velg den FEILAKTIGE påstanden.
Takk for tilbakemeldingene dine!