Nel mio blog precedente, Ho coperto le basi di regressione lineare e il gradiente di discesa. Per ottenere la regressione lineare pratica prenderemo un set di dati originale e applicheremo i concetti che abbiamo imparato.
Prenderemo il set di dati Housing che contiene informazioni su diverse case a Boston. Questi dati erano originariamente parte del repository di apprendimento automatico UCI e ora sono stati rimossi. Possiamo anche accedere a questi dati dalla libreria scikit-learn. Ci sono 506 campioni e 13 variabili di funzionalità in questo set di dati. L’obiettivo è quello di prevedere il valore dei prezzi della casa utilizzando le caratteristiche date.
Quindi iniziamo.
In primo luogo, importeremo le librerie richieste.
Successivamente, caricheremo i dati dell’alloggiamento dalla libreria scikit-learn
e lo capiremo.
Stampiamo il valore di boston_dataset
per capire cosa contiene. print(boston_dataset.keys())
offre
dict_keys()
- dati: contiene le informazioni per le varie case
- target: i prezzi della casa
- feature_names: nomi delle caratteristiche
- DESCR: descrive il set di dati
Per sapere di più sulle caratteristiche di utilizzo boston_dataset.DESCR
La descrizione di tutte le caratteristiche di seguito è fornito:
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
I prezzi della casa indicati dalla variabileMEDV
è la nostra variabile target e le restanti sono le variabili feature in base alle quali prevederemo il valore di una casa.
Ora caricheremo i dati in un dataframe pandas usandopd.DataFrame
. Abbiamo quindi stampare le prime 5 righe di dati utilizzando head()
Possiamo vedere che il valore target MEDV
manca la data. Creiamo una nuova colonna di valori target e la aggiungiamo al dataframe.
Preelaborazione dei dati
Dopo aver caricato i dati, è buona norma verificare se ci sono valori mancanti nei dati. Contiamo il numero di valori mancanti per ogni caratteristica usando isnull()
Tuttavia, non ci sono valori mancanti in questo set di dati come mostrato di seguito.
Analisi Esplorativa dei Dati
Analisi esplorativa dei Dati è un passo molto importante prima di modello di formazione. In questa sezione, utilizzeremo alcune visualizzazioni per comprendere la relazione della variabile di destinazione con altre funzionalità.
Per prima cosa tracciamo la distribuzione della variabile targetMEDV
. Useremo la funzionedistplot
dalla libreriaseaborn
.
vediamo che i valori di MEDV
sono distribuiti normalmente con alcuni valori anomali.
Successivamente, creiamo una matrice di correlazione che misura le relazioni lineari tra le variabili. La matrice di correlazione può essere formata utilizzando la funzionecorr
dalla libreria pandas dataframe. Useremo la funzioneheatmap
dalla libreria seaborn per tracciare la matrice di correlazione.
Il coefficiente di correlazione varia da -1 a 1. Se il valore è vicino a 1, significa che esiste una forte correlazione positiva tra le due variabili. Quando è vicino a -1, le variabili hanno una forte correlazione negativa.
Osservazioni:
- Per adattare un modello di regressione lineare, selezioniamo quelle caratteristiche che hanno un’alta correlazione con la nostra variabile target
MEDV
. Osservando la matrice di correlazione, possiamo vedere cheRM
è una forte correlazione positiva conMEDV
(0.7) doveLSTAT
ha un’alta correlazione negativa conMEDV
(-0.74). - Un punto importante nella selezione delle caratteristiche per un modello di regressione lineare è quello di verificare la multi-co-linearità. Le caratteristiche
RAD
TAX
hanno una correlazione di 0,91. Queste coppie di funzionalità sono fortemente correlate tra loro. Non dovremmo selezionare entrambe queste caratteristiche insieme per la formazione del modello. Controlla questo per una spiegazione. Lo stesso vale per le funzionalitàDIS
eAGE
che hanno una correlazione di -0.75.
Sulla base delle osservazioni di cui sopra ci saràRM
eLSTAT
come le nostre caratteristiche. Utilizzando un grafico a dispersione vediamo come queste caratteristiche variano con MEDV
.
Osservazioni:
- L’aumento dei prezzi, come il valore di RM aumenta in modo lineare. Ci sono pochi valori anomali e i dati sembrano essere limitati a 50.
- I prezzi tendono a diminuire con un aumento di LSTAT. Anche se non sembra seguire esattamente una linea lineare.
Preparazione dei dati per la formazione del modello
Concateniamo le colonneLSTAT
eRM
utilizzandonp.c_
fornite dalla libreria numpy.
Suddividere i dati in gruppi di allenamento e test
Successivamente, suddividiamo i dati in gruppi di allenamento e test. Addestriamo il modello con l ‘ 80% dei campioni e testiamo con il restante 20%. Lo facciamo per valutare le prestazioni del modello su dati invisibili. Per dividere i dati utilizziamo la funzionetrain_test_split
fornita dalla libreria scikit-learn. Finalmente stampiamo le dimensioni del nostro set di allenamento e test per verificare se la divisione è avvenuta correttamente.
(404, 2)
(102, 2)
(404,)
(102,)
Addestrare e testare il modello
Usiamo scikit-learnLinearRegression
per addestrare il nostro modello su entrambi i set di allenamento e test.
Valutazione del modello
Valuteremo il nostro modello utilizzando RMSE e 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
Questo è buono per iniziare. Nei prossimi blog, esamineremo i modi per aumentare le prestazioni del modello.
Il notebook Jupyter completo può essere trovato qui.
Conclusione
In questa storia, abbiamo applicato i concetti di regressione lineare sul set di dati di Boston housing. Consiglierei di provare anche altri set di dati.
Ecco alcuni posti in cui puoi cercare i dati
- https://www.kaggle.com/datasets
- https://toolbox.google.com/datasetsearch
- https://archive.ics.uci.edu/ml/datasets.html
Grazie per la lettura!!
Nella prossima parte di questa serie, tratteremo la regressione polinomiale. Non guardare questo spazio per più.