
i min tidigare blogg täckte jag grunderna för linjär regression och gradient nedstigning. För att få praktisk linjär regression tar vi en original dataset och tillämpar de begrepp som vi har lärt oss.
Vi tar Bostadsuppsättningen som innehåller information om olika hus i Boston. Dessa data var ursprungligen en del av UCI Machine Learning Repository och har tagits bort nu. Vi kan också komma åt dessa data från scikit-learn-biblioteket. Det finns 506 prover och 13 funktionsvariabler i denna dataset. Målet är att förutsäga värdet av priserna på huset med hjälp av de givna funktionerna.
så låt oss komma igång.
först importerar vi de nödvändiga biblioteken.
därefter laddar vi husdata från scikit-learn
biblioteket och förstår det.
vi skriver ut värdet på boston_dataset
för att förstå vad det innehåller. print(boston_dataset.keys())
ger
dict_keys()
- data: innehåller informationen för olika hus
- mål: husets priser
- feature_names: namnen på funktionerna
- DESCR: beskriver datasetet
för att veta mer om funktionerna använd boston_dataset.DESCR
beskrivningen av alla funktioner ges nedan:
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
priserna på huset som indikeras av variabelnMEDV
är vår målvariabel och de återstående är funktionsvariablerna baserat på vilka vi kommer att förutsäga värdet på ett hus.
vi laddar nu data i en pandas dataframe med pd.DataFrame
. Vi skriver sedan ut de första 5 raderna av data med head()

Vi kan se att målvärdet MEDV
saknas från data. Vi skapar en ny kolumn med målvärden och lägger till den i dataframen.
Dataförbehandling
Efter att ha laddat data är det en bra praxis att se om det saknas värden i data. Vi räknar antalet saknade värden för varje funktion med isnull()
det finns dock inga saknade värden i denna dataset som visas nedan.

exploratory data analysis
exploratory data analysis är ett mycket viktigt steg innan du tränar modellen. I det här avsnittet använder vi vissa visualiseringar för att förstå förhållandet mellan målvariabeln och andra funktioner.
låt oss först rita fördelningen av målvariabeln MEDV
. Vi kommer att använda distplot
– funktionen från seaborn
– biblioteket.

Vi ser att värdena för MEDV
distribueras normalt med få avvikare.
därefter skapar vi en korrelationsmatris som mäter de linjära förhållandena mellan variablerna. Korrelationsmatrisen kan bildas genom att använda funktionen corr
från pandas dataframe-biblioteket. Vi kommer att använda funktionen heatmap
från seaborn-biblioteket för att plotta korrelationsmatrisen.

korrelationskoefficienten varierar från -1 till 1. Om värdet är nära 1 betyder det att det finns en stark positiv korrelation mellan de två variablerna. När det är nära -1 har variablerna en stark negativ korrelation.
observationer:
- för att passa en linjär regressionsmodell väljer vi de funktioner som har en hög korrelation med vår målvariabel
MEDV
. Genom att titta på korrelationsmatrisen kan vi se attRM
har en stark positiv korrelation medMEDV
(0.7) där asLSTAT
har en hög negativ korrelation medMEDV
(-0.74). - en viktig punkt i att välja funktioner för en linjär regressionsmodell är att kontrollera multi-co-linearitet. Funktionerna
RAD
TAX
har en korrelation på 0,91. Dessa funktionspar är starkt korrelerade med varandra. Vi bör inte välja båda dessa funktioner tillsammans för att träna modellen. Kontrollera detta för en förklaring. Samma sak gäller funktionernaDIS
ochAGE
som har en korrelation på -0,75.
baserat på ovanstående observationer kommer vi RM
och LSTAT
som våra funktioner. Med hjälp av en scatter plot låt oss se hur dessa funktioner varierar med MEDV
.

observationer:
- priserna ökar när värdet på rm ökar linjärt. Det finns få outliers och uppgifterna verkar vara begränsade till 50.
- priserna tenderar att minska med en ökning av LSTAT. Även om det inte ser ut att följa exakt en linjär linje.
förbereda data för träning av modellen
vi sammanfogarLSTAT
ochRM
kolumner mednp.c_
som tillhandahålls av numpy-biblioteket.
dela upp data i tränings-och testsatser
därefter delar vi upp data i tränings-och testsatser. Vi tränar modellen med 80% av proverna och testar med de återstående 20%. Vi gör detta för att bedöma modellens prestanda på osynliga data. För att dela upp data använder vi train_test_split
funktion som tillhandahålls av scikit-learn library. Vi skriver slutligen ut storlekarna på vår träning och testuppsättning för att verifiera om delningen har skett ordentligt.
(404, 2)
(102, 2)
(404,)
(102,)
utbildning och testning av modellen
vi använder scikit-learns LinearRegression
för att träna vår modell på både tränings-och testuppsättningarna.
modellutvärdering
Vi kommer att utvärdera vår modell med RMSE och R2-poäng.
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
detta är bra att börja med. I de kommande bloggarna kommer vi att titta på sätt att öka modellens prestanda.
den kompletta Jupyter-anteckningsboken finns här.
slutsats
i denna berättelse tillämpade vi begreppen linjär regression på Bostons bostadsuppsättning. Jag skulle rekommendera att prova andra dataset också.
Här är några ställen du kan leta efter data
- https://www.kaggle.com/datasets
- https://toolbox.google.com/datasetsearch
- https://archive.ics.uci.edu/ml/datasets.html
Tack för att du läste!!
i nästa del av denna serie kommer vi att täcka Polynomregression. Titta på detta utrymme för mer.