lineær Regression på Boston Housing Dataset

Credits: http://www.wbur.org/radioboston/2013/09/18/bostons-housing-challenge

i min tidligere blog dækkede jeg det grundlæggende i lineær regression og gradientafstamning. For at få praktisk lineær regression tager vi et originalt datasæt og anvender de begreber, vi har lært.

Vi tager Boligdatasættet, der indeholder oplysninger om forskellige huse i Boston. Disse data var oprindeligt en del af UCI Machine Learning Repository og er blevet fjernet nu. Vi kan også få adgang til disse data fra scikit-learn-biblioteket. Der er 506 prøver og 13 funktionsvariabler i dette datasæt. Målet er at forudsige værdien af priserne på huset ved hjælp af de givne funktioner.

så lad os komme i gang.

først importerer vi de krævede biblioteker.

dernæst indlæser vi husdataene fra scikit-learn bibliotek og forstå det.

vi udskriver værdien af boston_dataset for at forstå, hvad den indeholder. print(boston_dataset.keys()) giver

dict_keys()
  • data: indeholder oplysningerne til forskellige huse
  • mål: husets priser
  • feature_names: navne på funktionerne
  • DESCR: beskriver datasættet

for at vide mere om funktionerne bruger boston_dataset.DESCR beskrivelsen af alle funktionerne er angivet 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

husets priser angivet med variablenMEDV er vores målvariabel, og de resterende er funktionsvariablerne baseret på hvilke vi vil forudsige værdien af et hus.

vi indlæser nu dataene i en pandas dataframe ved hjælp afpd.DataFrame. Vi udskriver derefter de første 5 rækker af dataene ved hjælp af head()

Vi kan se, at målværdien MEDV mangler fra dataene. Vi opretter en ny kolonne med målværdier og tilføjer den til dataframen.

data forbehandling

efter indlæsning af dataene er det en god praksis at se, om der mangler værdier i dataene. Vi tæller antallet af manglende værdier for hver funktion ved hjælp af isnull()

Der er dog ingen manglende værdier i dette datasæt som vist nedenfor.

sonderende dataanalyse

sonderende dataanalyse er et meget vigtigt skridt, før du træner modellen. I dette afsnit bruger vi nogle visualiseringer til at forstå forholdet mellem målvariablen og andre funktioner.

lad os først plotte fordelingen af målvariablenMEDV. Vi bruger distplot – funktionen fra seaborn bibliotek.

Vi ser, at værdierne af MEDV distribueres normalt med få outliers.

dernæst opretter vi en korrelationsmatrice, der måler de lineære forhold mellem variablerne. Korrelationsmatricen kan dannes ved hjælp af funktionen corr fra pandas dataframe-biblioteket. Vi bruger funktionen heatmap fra Seaborn-biblioteket til at plotte korrelationsmatricen.

korrelationskoefficienten varierer fra -1 til 1. Hvis værdien er tæt på 1, betyder det, at der er en stærk positiv sammenhæng mellem de to variabler. Når det er tæt på -1, har variablerne en stærk negativ korrelation.

observationer:

  • for at passe til en lineær regressionsmodel vælger vi de funktioner, der har en høj korrelation med vores målvariabel MEDV. Ved at se på korrelationsmatricen kan vi se, at RM har en stærk positiv korrelation med MEDV (0.7) hvor som LSTAT har en høj negativ korrelation med MEDV(-0.74).
  • et vigtigt punkt i valg af funktioner til en lineær regressionsmodel er at kontrollere for multi-Co-linearitet. Funktionerne RADTAX har en korrelation på 0,91. Disse funktionspar er stærkt korreleret med hinanden. Vi bør ikke vælge begge disse funktioner sammen til træning af modellen. Tjek dette for en forklaring. Det samme gælder funktionerne DIS og AGE som har en korrelation på -0,75.

baseret på ovenstående observationer vil viRM ogLSTAT som vores funktioner. Ved hjælp af et scatter plot lad os se, hvordan disse funktioner varierer med MEDV.

observationer:

  • priserne stiger, når værdien af RM stiger lineært. Der er få outliers, og dataene ser ud til at være begrænset til 50.
  • priserne har tendens til at falde med en stigning i LSTAT. Selvom det ikke ser ud til at følge nøjagtigt en lineær linje.

forberedelse af dataene til træning af modellen

Vi sammenkæderLSTAT ogRM kolonner ved hjælp afnp.c_ leveret af numpy-biblioteket.

opdeling af dataene i Trænings-og testsæt

dernæst opdeler vi dataene i Trænings-og testsæt. Vi træner modellen med 80% af prøverne og tester med de resterende 20%. Vi gør dette for at vurdere modelens ydeevne på usete data. For at opdele de data, vi bruger train_test_split funktion leveret af scikit-learn library. Vi udskriver endelig størrelserne på vores trænings-og testsæt for at kontrollere, om splittelsen er sket korrekt.

(404, 2) 
(102, 2)
(404,)
(102,)

træning og test af modellen

Vi bruger scikit-learn ‘ sLinearRegression til at træne vores model på både Trænings-og testsæt.

modelevaluering

vi vil evaluere vores model ved hjælp af 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 at starte med. I de kommende blogs vil vi se på måder at øge modelens ydeevne på.

den komplette Jupyter-notesbog kan findes her.

konklusion

i denne historie anvendte vi begreberne lineær regression på Boston housing datasæt. Jeg vil også anbefale at prøve andre datasæt.

Her er et par steder, du kan søge efter data

  • https://www.kaggle.com/datasets
  • https://toolbox.google.com/datasetsearch
  • https://archive.ics.uci.edu/ml/datasets.html

tak for læsning!!

i den næste del af denne serie dækker vi Polynomregression. Se dette rum for mere.

Related Posts

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *