i min forrige blogg dekket jeg grunnleggende om lineær regresjon og gradient descent. For å få praktisk lineær regresjon vil vi ta et originalt datasett og bruke konseptene vi har lært.
Vi tar Boligdatasettet som inneholder informasjon om forskjellige hus i Boston. Disse dataene var opprinnelig en del AV Uci Machine Learning Repository og har blitt fjernet nå. Vi kan også få tilgang til disse dataene fra scikit-learn-biblioteket. Det er 506 prøver og 13 funksjonsvariabler i dette datasettet. Målet er å forutsi verdien av prisene på huset ved hjelp av de gitte funksjonene.
Så la oss komme i gang.
først vil vi importere de nødvendige bibliotekene.
deretter laster vi inn husdataene frascikit-learn
biblioteket og forstår det.
vi skriver ut verdien av boston_dataset
for å forstå hva den inneholder. print(boston_dataset.keys())
gir
dict_keys()
- data: inneholder informasjon for ulike hus
- target: prisene på huset
- feature_names: navn på funksjonene
- DESCR: beskriver datasettet
for å vite mer om funksjonene bruk boston_dataset.DESCR
beskrivelsen av alle funksjonene er gitt nedenfor:
CRIM: Per capita crime rate by town
ZN: Proportion of residential land zoned for lots over 25,000 sq. ft
INDUS: Proportion of non-retail business acres per town
CHAS: Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)
NOX: Nitric oxide concentration (parts per 10 million)
RM: Average number of rooms per dwelling
AGE: Proportion of owner-occupied units built prior to 1940
DIS: Weighted distances to five Boston employment centers
RAD: Index of accessibility to radial highways
TAX: Full-value property tax rate per $10,000
PTRATIO: Pupil-teacher ratio by town
B: 1000(Bk — 0.63)², where Bk is the proportion of by town
LSTAT: Percentage of lower status of the population
MEDV: Median value of owner-occupied homes in $1000s
prisene på huset angitt av variabelen MEDV
er vår målvariabel og de resterende er funksjonsvariablene basert på hvilke vi vil forutsi verdien av et hus.
vi vil nå laste dataene inn i en pandas dataframe ved hjelp av pd.DataFrame
. Vi skriver deretter ut de første 5 radene av dataene ved hjelp av head()
vi kan se at målverdien MEDV
mangler fra dataene. Vi lager en ny kolonne med målverdier og legger den til dataframe.
data preprosessering
etter at dataene er lastet inn, er det en god praksis Å se om det mangler verdier i dataene. Vi teller antall manglende verdier for hver funksjon ved hjelp av isnull()
det er imidlertid Ingen manglende verdier i dette datasettet som vist nedenfor.
utforskende dataanalyse
utforskende dataanalyse er et svært viktig skritt før du trener modellen. I denne delen vil vi bruke noen visualiseringer for å forstå forholdet mellom målvariabelen og andre funksjoner.
La oss først plotte fordelingen av målvariabelen MEDV
. Vi vil brukedistplot
– funksjonen fraseaborn
biblioteket.
vi ser at verdiene til MEDV
distribueres normalt med få avvik.
Deretter lager vi en korrelasjonsmatrise som måler de lineære forholdene mellom variablene. Korrelasjonsmatrisen kan dannes ved å bruke corr
– funksjonen fra pandas dataframe-biblioteket. Vi vil bruke heatmap
funksjonen fra seaborn library for å plotte korrelasjonsmatrisen.
korrelasjonskoeffisienten varierer fra -1 til 1. Hvis verdien er nær 1, betyr det at det er en sterk positiv korrelasjon mellom de to variablene. Når det er nær -1, har variablene en sterk negativ korrelasjon.
Observasjoner:
- for å passe til en lineær regresjonsmodell velger vi de funksjonene som har høy korrelasjon med målvariabelen
MEDV
. Ved å se på korrelasjonsmatrisen kan vi se atRM
har en sterk positiv korrelasjon medMEDV
(0.7) hvor asLSTAT
har en høy negativ korrelasjon medMEDV
(-0.74). - et viktig punkt i å velge funksjoner for en lineær regresjonsmodell er å sjekke for multi-co-linearitet. Funksjonene
RAD
TAX
har en korrelasjon på 0,91. Disse har parene er sterkt korrelert til hverandre. Vi bør ikke velge begge disse funksjonene sammen for å trene modellen. Sjekk dette for en forklaring. Det samme gjelder for funksjoneneDIS
ogAGE
som har en korrelasjon på -0,75.
basert på de ovennevnte observasjonene vil vi RM
og LSTAT
som våre funksjoner. La oss se hvordan disse funksjonene varierer med MEDV
.
observasjoner:
- prisene øker etter hvert som verdien av rm øker lineært. Det er få outliers og dataene ser ut til å være avkortet til 50.
- prisene har en tendens til å synke med en økning I LSTAT. Selv om det ikke ser ut til å følge nøyaktig en lineær linje.
Forbereder dataene for trening av modellen
vi setter sammen LSTAT
og RM
kolonner ved hjelp av np.c_
levert av numpy-biblioteket.
Splitting av dataene i trenings-og testsett
deretter deler vi dataene i trenings-og testsett. Vi trener modellen med 80% av prøvene og tester med de resterende 20%. Vi gjør dette for å vurdere modellens ytelse på usett data. For å dele dataene bruker vitrain_test_split
funksjon levert av scikit-learn library. Vi endelig skrive ut størrelsene på vår trening og test sett for å kontrollere om splitting har skjedd riktig.
(404, 2)
(102, 2)
(404,)
(102,)
Trening og testing av modellen
vi bruker scikit-learn ‘ s LinearRegression
for å trene vår modell på både trenings-og testsett.
modellevaluering
vi vil evaluere vår modell ved HJELP AV RMSE og R2-score.
The model performance for training set
--------------------------------------
RMSE is 5.6371293350711955
R2 score is 0.6300745149331701 The model performance for testing set
--------------------------------------
RMSE is 5.137400784702911
R2 score is 0.6628996975186952
dette er godt å begynne med. I de kommende bloggene vil vi se på måter å øke modellens ytelse på.
Den komplette Jupyter-Notatboken finner du her.
Konklusjon
i denne historien brukte vi begrepene lineær regresjon på Boston housing datasett. Jeg vil anbefale å prøve ut andre datasett også.
Her er noen steder du kan se etter data
- https://www.kaggle.com/datasets
https://toolbox.google.com/datasetsearch
Takk For At Du Leste!!
i neste del av denne serien vil vi dekke Polynomregresjon. Se denne plassen for mer.