linjär Regression på Boston bostäder Dataset

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

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ålvariabelMEDV. Genom att titta på korrelationsmatrisen kan vi se att RM har en stark positiv korrelation med MEDV(0.7) där as LSTAT har en hög negativ korrelation med MEDV (-0.74).
  • en viktig punkt i att välja funktioner för en linjär regressionsmodell är att kontrollera multi-co-linearitet. Funktionerna RADTAX 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 funktionerna DISoch AGE som har en korrelation på -0,75.

baserat på ovanstående observationer kommer vi RMoch 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.

Related Posts

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *