in mijn vorige blog heb ik de basisprincipes van lineaire regressie en gradiëntafdaling behandeld. Om hands-on lineaire regressie te krijgen zullen we een originele dataset nemen en de concepten die we hebben geleerd toepassen.
We nemen de Housing dataset die informatie bevat over verschillende huizen in Boston. Deze gegevens waren oorspronkelijk onderdeel van UCI Machine Learning Repository en zijn nu verwijderd. We kunnen ook toegang krijgen tot deze gegevens vanuit de scikit-learn bibliotheek. Er zijn 506 steekproeven en 13 functievariabelen in deze dataset. Het doel is om de waarde van de prijzen van het huis te voorspellen met behulp van de gegeven functies.
dus laten we beginnen.
eerst zullen we de vereiste bibliotheken importeren.
vervolgens laden we de housing data uit de scikit-learn
bibliotheek en begrijpen het.
we printen de waarde van de boston_dataset
om te begrijpen wat het bevat. print(boston_dataset.keys())
geeft
dict_keys()
- data: bevat de informatie voor verschillende huizen
- doel: de prijzen van het huis
- feature_names: de namen van de functies
- DESCR: beschrijft de dataset
om meer Te weten over de functies gebruiken boston_dataset.DESCR
De beschrijving van alle functies wordt hieronder gegeven:
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
de prijzen van het huis aangegeven door de variabele MEDV
is onze doelvariabele en de resterende zijn de feature variabelen op basis waarvan we de waarde van een huis zullen voorspellen.
We zullen nu de gegevens in een panda-dataframe laden met pd.DataFrame
. Vervolgens hebben We de eerste 5 rijen van de gegevens met behulp van head()
We kunnen zien dat de streefwaarde MEDV
ontbreekt in de gegevens. We maken een nieuwe kolom met doelwaarden en voegen deze toe aan het dataframe.
data preprocessing
na het laden van de gegevens is het een goede gewoonte om te zien of er ontbrekende waarden in de gegevens zijn. We tellen het aantal ontbrekende waarden voor elke functie met isnull()
Er zijn echter geen ontbrekende waarden in deze dataset zoals hieronder getoond.
verkennende gegevensanalyse
verkennende gegevensanalyse is een zeer belangrijke stap voor de opleiding van het model. In deze sectie zullen we enkele visualisaties gebruiken om de relatie van de doelvariabele met andere functies te begrijpen.
laten we eerst de verdeling van de doelvariabele plotten MEDV
. We zullen de distplot
functie van de seaborn
bibliotheek gebruiken.
We zien dat de waarden van MEDV
normale verdeling volgen met enkele uitschieters.
vervolgens maken we een correlatiematrix die de lineaire relaties tussen de variabelen meet. De correlatiematrix kan worden gevormd door gebruik te maken van de functie corr
uit de panda dataframe bibliotheek. We zullen de functie heatmap
uit de Seaborn-bibliotheek gebruiken om de correlatiematrix te plotten.
De correlatiecoëfficiënt varieert van -1 tot 1. Als de waarde dicht bij 1 ligt, betekent dit dat er een sterke positieve correlatie is tussen de twee variabelen. Wanneer het dicht bij -1 ligt, hebben de variabelen een sterke negatieve correlatie.
waarnemingen:
- om in een lineair regressiemodel te passen, selecteren we die functies die een hoge correlatie hebben met onze doelvariabele
MEDV
. Door te kijken naar de correlatiematrix kunnen we zien datRM
een sterke positieve correlatie heeft metMEDV
(0.7) waar alsLSTAT
een hoge negatieve correlatie heeft metMEDV
(-0.74). - een belangrijk punt bij het selecteren van functies voor een lineair regressiemodel is het controleren op multi-co-lineariteit. De eigenschappen
RAD
TAX
hebben een correlatie van 0,91. Deze kenmerken paren zijn sterk gecorreleerd aan elkaar. We moeten deze beide functies niet samen selecteren voor het trainen van het model. Controleer dit voor een uitleg. Hetzelfde geldt voor de functiesDIS
enAGE
die een correlatie hebben van -0,75.
Op basis van de bovenstaande waarnemingen zullen we RM
en LSTAT
als onze functies. Met behulp van een scatter plot laten we eens kijken hoe deze functies variëren met MEDV
.
Opmerkingen:
- De prijzen te verhogen als de waarde van RM lineair toeneemt. Er zijn weinig uitschieters en de gegevens lijken te zijn afgetopt op 50.de prijzen dalen meestal met een stijging van LSTAT. Hoewel het niet lijkt te volgen precies een lineaire lijn.
de gegevens voorbereiden voor het trainen van het model
we voegen de kolommen LSTAT
en RM
samen met np.c_
die door de numpy-bibliotheek worden geleverd.
de gegevens splitsen in trainings-en testsets
vervolgens splitsen we de gegevens op in trainings-en testsets. We trainen het model met 80% van de monsters en testen met de resterende 20%. We doen dit om de prestaties van het model op ongeziene data te beoordelen. Om de gegevens te splitsen gebruiken we de functie train_test_split
van de scikit-learn library. Uiteindelijk printen we de maten van onze trainings-en testset om te controleren of de splitsing correct heeft plaatsgevonden.
(404, 2)
(102, 2)
(404,)
(102,)
Training en testen het model
we gebruiken scikit-learn ‘ s LinearRegression
om ons model te trainen op zowel de trainings-als testsets.
Model evaluatie
We zullen ons model evalueren met behulp van RMSE en 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
Dit is goed om mee te beginnen. In de komende blogs zullen we kijken naar manieren om de prestaties van het model te verhogen.
het volledige Jupyter Notebook is hier te vinden.
conclusie
In dit verhaal hebben we de concepten van lineaire regressie toegepast op de Boston housing dataset. Ik zou aanraden om ook andere datasets uit te proberen.
Hier zijn een paar plaatsen waar u naar gegevens kunt zoeken
- https://www.kaggle.com/datasets
- https://toolbox.google.com/datasetsearch
- https://archive.ics.uci.edu/ml/datasets.html
Bedankt voor het lezen!!
in het volgende deel van deze serie zullen we polynomiale regressie behandelen. Kijk naar deze ruimte voor meer.