
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, atRM
har en stærk positiv korrelation medMEDV
(0.7) hvor somLSTAT
har en høj negativ korrelation medMEDV
(-0.74). - et vigtigt punkt i valg af funktioner til en lineær regressionsmodel er at kontrollere for multi-Co-linearitet. Funktionerne
RAD
TAX
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 funktionerneDIS
ogAGE
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.