Regressione lineare multipla in Python: una guida completa
Introduzione
La regressione lineare multipla è una tecnica statistica fondamentale utilizzata per modellare la relazione tra una variabile dipendente e più variabili indipendenti. In Python, strumenti come scikit-learn
e statsmodels
forniscono robuste implementazioni per l'analisi di regressione. Questo tutorial ti guiderà attraverso l'implementazione, l'interpretazione e la valutazione di più modelli di regressione lineare utilizzando Python.
Prerequisiti
Prima di immergerti nell'implementazione, assicurati di avere quanto segue:
- Conoscenza di base di Python. Puoi fare riferimento al Tutorial Python per principianti.
- Familiarità con scikit-learn per attività di machine learning. Puoi fare riferimento al tutorial Python scikit-learn.
- Comprensione dei concetti di visualizzazione dei dati in Python. Puoi fare riferimento a Come tracciare i dati in Python 3 utilizzando matplotlib e Analisi e visualizzazione dei dati con panda e Jupyter Notebook in Python 3.
- Python 3.x installato con le seguenti librerie
numpy
,pandas
,matplotlib
,seaborn
,scikit- learn
estatsmodels
installati.
Cos'è la regressione lineare multipla?
La regressione lineare multipla (MLR) è un metodo statistico che modella la relazione tra una variabile dipendente e due o più variabili indipendenti. È un'estensione della regressione lineare semplice, che modella la relazione tra una variabile dipendente e una singola variabile indipendente. In MLR, la relazione è modellata utilizzando la formula:
Dove :
Esempio: prevedere il prezzo di una casa in base alle dimensioni, al numero di camere da letto e alla posizione. In questo caso, ci sono tre variabili indipendenti, ovvero dimensione, numero di camere da letto e ubicazione, e una variabile dipendente, ovvero il prezzo, che è il valore da prevedere.
Presupposti di regressione lineare multipla
Prima di implementare la regressione lineare multipla, è essenziale garantire che siano soddisfatte le seguenti ipotesi:
Linearità: la relazione tra la variabile dipendente e le variabili indipendenti è lineare.
Indipendenza degli errori: i residui (errori) sono indipendenti l'uno dall'altro. Ciò viene spesso verificato utilizzando il test di Durbin-Watson.
Omoschedasticità: la varianza dei residui è costante su tutti i livelli delle variabili indipendenti. Un grafico residuo può aiutare a verificarlo.
Nessuna multicollinearità: le variabili indipendenti non sono altamente correlate. Il fattore di inflazione della varianza (VIF) è comunemente utilizzato per rilevare la multicollinearità.
Normalità dei residui: i residui dovrebbero seguire una distribuzione normale. Questo può essere verificato utilizzando un grafico Q-Q.
Influenza dei valori anomali: i valori anomali o i punti di leva elevata non dovrebbero influenzare in modo sproporzionato il modello.
Queste ipotesi garantiscono che il modello di regressione sia valido e che i risultati siano affidabili. Il mancato rispetto di questi presupposti può portare a risultati distorti o fuorvianti.
Preelaborare i dati
In questa sezione imparerai a utilizzare il modello di regressione lineare multipla in Python per prevedere i prezzi delle case in base alle funzionalità del California Housing Dataset. Imparerai come preelaborare i dati, adattare un modello di regressione e valutarne le prestazioni affrontando sfide comuni come la multicollinearità, i valori anomali e la selezione delle funzionalità.
Passaggio 1: caricare il set di dati
Utilizzerai il California Housing Dataset, un popolare set di dati per le attività di regressione. Questo set di dati contiene 13 caratteristiche sulle case nella periferia di Boston e il corrispondente prezzo medio delle case.
Per prima cosa installiamo i pacchetti necessari:
pip install numpy pandas matplotlib seaborn scikit-learn statsmodels
from sklearn.datasets import fetch_california_housing # Import the fetch_california_housing function from sklearn.datasets to load the California Housing dataset.
import pandas as pd # Import pandas for data manipulation and analysis.
import numpy as np # Import numpy for numerical computing.
Load the California Housing dataset using the fetch_california_housing function.
housing = fetch_california_housing()
Convert the dataset's data into a pandas DataFrame, using the feature names as column headers.
housing_df = pd.DataFrame(housing.data, columns=housing.feature_names)
Add the target variable 'MedHouseValue' to the DataFrame, using the dataset's target values.
housing_df['MedHouseValue'] = housing.target
Display the first few rows of the DataFrame to get an overview of the dataset.
print(housing_df.head())
Dovresti osservare il seguente output del set di dati:
MedInc HouseAge AveRooms AveBedrms Population AveOccup Latitude Longitude MedHouseValue
0 8.3252 41.0 6.984127 1.023810 322.0 2.555556 37.88 -122.23 4.526
1 8.3014 21.0 6.238137 0.971880 2401.0 2.109842 37.86 -122.22 3.585
2 7.2574 52.0 8.288136 1.073446 496.0 2.802260 37.85 -122.24 3.521
3 5.6431 52.0 5.817352 1.073059 558.0 2.547945 37.85 -122.25 3.413
4 3.8462 52.0 6.281853 1.081081 565.0 2.181467 37.85 -122.25 3.422
Ecco il significato di ciascuno degli attributi:
- MedInc
Reddito mediano in blocco
- HouseAge
Età media della casa in blocco
- AveRooms
Numero medio di stanze
- AveBedrms
Numero medio di camere da letto
- Population
-
Blocca la popolazione
- AveOccup
Occupazione media della casa
- Latitude
Latitudine dell'isolato
- Longitude
Longitudine dell'isolato
Passaggio 2: preelaborare i dati
Controlla i valori mancanti
Garantisce che nel set di dati non siano presenti valori mancanti che potrebbero influenzare l'analisi.
print(housing_df.isnull().sum())
Produzione :
MedInc 0
HouseAge 0
AveRooms 0
AveBedrms 0
Population 0
AveOccup 0
Latitude 0
Longitude 0
MedHouseValue 0
dtype: int64
Selezione delle funzionalità
Creiamo innanzitutto una matrice di correlazione per comprendere le dipendenze tra le variabili.
correlation_matrix = housing_df.corr()
print(correlation_matrix['MedHouseValue'])
Produzione :
MedInc 0.688075
HouseAge 0.105623
AveRooms 0.151948
AveBedrms -0.046701
Population -0.024650
AveOccup -0.023737
Latitude -0.144160
Longitude -0.045967
MedHouseValue 1.000000
È possibile analizzare la matrice di correlazione sopra per selezionare le variabili dipendenti e indipendenti per il nostro modello di regressione. La matrice di correlazione fornisce informazioni dettagliate sulle relazioni tra ciascuna coppia di variabili nel set di dati.
Nella matrice di correlazione data, MedHouseValue
è la variabile dipendente, poiché è la variabile che stiamo cercando di prevedere. Le variabili indipendenti hanno una correlazione significativa con MedHouseValue
.
In base alla matrice di correlazione, puoi identificare le seguenti variabili indipendenti che hanno una correlazione significativa con MedHouseValue
:
MedInc
: questa variabile ha una forte correlazione positiva (0,688075) conMedHouseValue
, indicando che all'aumentare del reddito medio, anche il valore medio della casa tende ad aumentare.AveRooms
: questa variabile ha una correlazione positiva moderata (0,151948) conMedHouseValue
, suggerendo che all'aumentare del numero medio di stanze per famiglia, anche il valore mediano della casa tende ad aumentare.AveOccup
: questa variabile ha una debole correlazione negativa (-0,023737) conMedHouseValue
, indicando che all'aumentare dell'occupazione media per famiglia, il valore mediano della casa tende a diminuire, ma l'effetto è relativamente piccolo.
Selezionando queste variabili indipendenti, puoi creare un modello di regressione che cattura le relazioni tra queste variabili e MedHouseValue
, permettendoci di fare previsioni sul valore medio della casa in base al reddito medio, al numero medio di stanze e alla media occupazione.
Puoi anche tracciare la matrice di correlazione in Python usando quanto segue:
import seaborn as sns
import matplotlib.pyplot as plt
Assuming 'housing_df' is the DataFrame containing the dataPlotting the correlation matrix
plt.figure(figsize=(10, 8))
sns.heatmap(housing_df.corr(), annot=True, cmap='coolwarm')
plt.title('Correlation Matrix')
plt.show()
Ti concentrerai su alcune funzionalità chiave per semplicità in base a quanto sopra, come MedInc
(reddito medio), AveRooms
(camere medie per nucleo familiare) e AveOccup
(occupazione media per famiglia).
selected_features = ['MedInc', 'AveRooms', 'AveOccup']
X = housing_df[selected_features]
y = housing_df['MedHouseValue']
Il blocco di codice precedente seleziona funzionalità specifiche dal frame di dati housing_df
per l'analisi. Le funzionalità selezionate sono MedInc
, AveRooms
e AveOccup
, che sono memorizzate nell'elenco selected_features
.
Il DataFrame housing_df
viene quindi sottoinsieme per includere solo queste funzionalità selezionate e il risultato viene archiviato nell'elenco X
.
La variabile di destinazione MedHouseValue
viene estratta da housing_df
e memorizzata nell'elenco y
.
Funzionalità di ridimensionamento
Utilizzerai la standardizzazione per garantire che tutte le funzionalità siano sulla stessa scala, migliorando le prestazioni e la comparabilità del modello.
La standardizzazione è una tecnica di preelaborazione che ridimensiona le caratteristiche numeriche per avere una media pari a 0 e una deviazione standard pari a 1. Questo processo garantisce che tutte le caratteristiche siano sulla stessa scala, il che è essenziale per i modelli di machine learning sensibili alla scala delle caratteristiche di input. Standardizzando le caratteristiche, è possibile migliorare le prestazioni e la comparabilità del modello riducendo l'effetto delle caratteristiche con ampi intervalli che dominano il modello.
from sklearn.preprocessing import StandardScaler
Initialize the StandardScaler object
scaler = StandardScaler()
Fit the scaler to the data and transform it
X_scaled = scaler.fit_transform(X)
Print the scaled data
print(X_scaled)
Produzione :
[[ 2.34476576 0.62855945 -0.04959654]
[ 2.33223796 0.32704136 -0.09251223]
[ 1.7826994 1.15562047 -0.02584253]
...
[-1.14259331 -0.09031802 -0.0717345 ]
[-1.05458292 -0.04021111 -0.09122515]
[-0.78012947 -0.07044252 -0.04368215]]
L'output rappresenta i valori scalati delle funzionalità MedInc
, AveRooms
e AveOccup
dopo aver applicato StandardScaler. I valori sono ora centrati attorno allo 0 con una deviazione standard pari a 1, garantendo che tutte le caratteristiche siano sulla stessa scala.
La prima riga [ 2.34476576 0.62855945 -0.04959654]
indica che per il primo punto dati, il valore MedInc
scalato è 2.34476576, AveRooms
è 0.62855945 e AveOccup
lo è -0,04959654. Allo stesso modo, la seconda riga [ 2.33223796 0.32704136 -0.09251223]
rappresenta i valori scalati per il secondo punto dati e così via.
I valori scalati vanno da circa -1,14259331 a 2,34476576, indicando che le caratteristiche sono ora normalizzate e confrontabili. Ciò è essenziale per i modelli di machine learning sensibili alla scala delle funzionalità di input, poiché impedisce alle funzionalità con intervalli ampi di dominare il modello.
Implementare la regressione lineare multipla
Ora che hai finito con la preelaborazione dei dati, implementiamo la regressione lineare multipla in Python.
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt
import seaborn as sns
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42)
The 'LinearRegression' model is initialized and fitted to the training data.
model = LinearRegression()
model.fit(X_train, y_train)
The model is used to predict the target variable for the test set.
y_pred = model.predict(X_test)
print("Mean Squared Error:", mean_squared_error(y_test, y_pred))
print("R-squared:", r2_score(y_test, y_pred))
La funzione train_test_split
viene utilizzata per dividere i dati in set di training e test. Qui l'80% dei dati viene utilizzato per la formazione e il 20% per i test.
Il modello viene valutato utilizzando l'errore quadratico medio e l'R quadrato. L'errore quadratico medio (MSE) misura la media dei quadrati degli errori o delle deviazioni.
R quadrato (R2) è una misura statistica che rappresenta la proporzione della varianza per una variabile dipendente spiegata da una o più variabili indipendenti in un modello di regressione.
Produzione :
Mean Squared Error: 0.7006855912225249
R-squared: 0.4652924370503557
L'output sopra fornisce due parametri chiave per valutare le prestazioni del modello di regressione lineare multipla:
Errore quadratico medio (MSE): 0,7006855912225249
L'MSE misura la differenza quadrata media tra i valori previsti e quelli effettivi della variabile target. Un MSE inferiore indica prestazioni migliori del modello, poiché significa che il modello sta effettuando previsioni più accurate. In questo caso, l'MSE è 0.7006855912225249
, indicando che il modello non è perfetto ma ha un livello ragionevole di precisione. I valori MSE in genere dovrebbero essere più vicini a 0, con valori più bassi che indicano prestazioni migliori.
R quadrato (R2): 0,4652924370503557
R-quadrato misura la proporzione della varianza nella variabile dipendente che è prevedibile dalle variabili indipendenti. Varia da 0 a 1, dove 1 è la previsione perfetta e 0 indica alcuna relazione lineare. In questo caso, il valore R quadrato è 0,4652924370503557
, indicando che circa il 46,53% della varianza nella variabile target può essere spiegato dalle variabili indipendenti utilizzate nel modello. Ciò suggerisce che il modello è in grado di catturare una parte significativa delle relazioni tra le variabili ma non tutte.
Diamo un’occhiata ad alcune trame importanti:
# Residual Plot
residuals = y_test - y_pred
plt.scatter(y_pred, residuals, alpha=0.5)
plt.xlabel('Predicted Values')
plt.ylabel('Residuals')
plt.title('Residual Plot')
plt.axhline(y=0, color='red', linestyle='--')
plt.show()
Predicted vs Actual Plot
plt.scatter(y_test, y_pred, alpha=0.5)
plt.xlabel('Actual Values')
plt.ylabel('Predicted Values')
plt.title('Predicted vs Actual Values')
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'r--', lw=4)
plt.show()
Utilizzando statsmodels
La libreria Statsmodels in Python è un potente strumento per l'analisi statistica. Fornisce un'ampia gamma di modelli e test statistici, tra cui regressione lineare, analisi di serie temporali e metodi non parametrici.
Nel contesto della regressione lineare multipla, è possibile utilizzare statsmodels
per adattare un modello lineare ai dati e quindi eseguire vari test e analisi statistiche sul modello. Ciò può essere particolarmente utile per comprendere le relazioni tra le variabili indipendenti e dipendenti e per fare previsioni basate sul modello.
import statsmodels.api as sm
Add a constant to the model
X_train_sm = sm.add_constant(X_train)
model_sm = sm.OLS(y_train, X_train_sm).fit()
print(model_sm.summary())
Q-Q Plot for residuals
sm.qqplot(model_sm.resid, line='s')
plt.title('Q-Q Plot of Residuals')
plt.show()
Produzione :
==============================================================================
Dep. Variable: MedHouseValue R-squared: 0.485
Model: OLS Adj. R-squared: 0.484
Method: Least Squares F-statistic: 5173.
Date: Fri, 17 Jan 2025 Prob (F-statistic): 0.00
Time: 09:40:54 Log-Likelihood: -20354.
No. Observations: 16512 AIC: 4.072e+04
Df Residuals: 16508 BIC: 4.075e+04
Df Model: 3
Covariance Type: nonrobust
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
const 2.0679 0.006 320.074 0.000 2.055 2.081
x1 0.8300 0.007 121.245 0.000 0.817 0.843
x2 -0.1000 0.007 -14.070 0.000 -0.114 -0.086
x3 -0.0397 0.006 -6.855 0.000 -0.051 -0.028
==============================================================================
Omnibus: 3981.290 Durbin-Watson: 1.983
Prob(Omnibus): 0.000 Jarque-Bera (JB): 11583.284
Skew: 1.260 Prob(JB): 0.00
Kurtosis: 6.239 Cond. No. 1.42
==============================================================================
Ecco il riassunto della tabella sopra:
Riepilogo del modello
Il modello è un modello di regressione dei minimi quadrati ordinari, che è un tipo di modello di regressione lineare. La variabile dipendente è MedHouseValue
e il modello ha un valore R quadrato di 0,485, indicando che circa il 48,5% della variazione in MedHouseValue
può essere spiegato dalle variabili indipendenti. Il valore R quadrato corretto è 0,484, che è una versione modificata di R quadrato che penalizza il modello per l'inclusione di variabili indipendenti aggiuntive.
Vestibilità del modello
Il modello è stato adattato utilizzando il metodo dei minimi quadrati e la statistica F è 5173, a indicare che il modello ha un buon adattamento. La probabilità di osservare una statistica F estrema almeno quanto quella osservata, assumendo che l'ipotesi nulla sia vera, è circa 0. Ciò suggerisce che il modello è statisticamente significativo.
Coefficienti del modello
I coefficienti del modello sono i seguenti:
- Il termine costante è 2,0679, a indicare che quando tutte le variabili indipendenti sono 0, il
MedHouseValue
previsto è circa 2,0679. - Il coefficiente per
x1
(in questo casoMedInc
) è 0,8300, indicando che per ogni aumento unitario diMedInc
, ilMedHouseValue
previsto aumenta di circa 0,83 unità, presupponendo che tutte le altre variabili indipendenti siano mantenute costanti. - Il coefficiente per
x2
(in questo casoAveRooms
) è -0,1000, a indicare che per ogni aumento di unità inx2
, ilMedHouseValue previsto
diminuisce di circa 0,10 unità, presupponendo che tutte le altre variabili indipendenti siano mantenute costanti. - Il coefficiente per
x3
(in questo casoAveOccup
) è -0,0397, indicando che per ogni aumento unitario dix3
, ilMedHouseValue previsto
diminuisce di circa 0,04 unità, presupponendo che tutte le altre variabili indipendenti siano mantenute costanti.
Diagnostica del modello
La diagnostica del modello è la seguente:
- La statistica del test Omnibus è 3981.290, indicando che i residui non sono distribuiti normalmente.
- La statistica Durbin-Watson è 1.983, indicando che non esiste un'autocorrelazione significativa nei residui.
- La statistica del test Jarque-Bera è 11583.284, indicando che i residui non sono distribuiti normalmente.
- L'asimmetria dei residui è 1.260, indicando che i residui sono inclinati a destra.
- La curtosi dei residui è 6.239, indicando che i residui sono leptocurtici (cioè hanno un picco più alto e code più pesanti rispetto a una distribuzione normale).
- Il numero di condizione è 1.42, indicando che il modello non è sensibile a piccole modifiche nei dati.
Gestire la multicollinearità
La multicollinearità è un problema comune nella regressione lineare multipla, in cui due o più variabili indipendenti sono altamente correlate tra loro. Ciò può portare a stime instabili e inaffidabili dei coefficienti.
Per rilevare e gestire la multicollinearità, è possibile utilizzare il fattore di inflazione della varianza. Il VIF misura quanto aumenta la varianza di un coefficiente di regressione stimato se i predittori sono correlati. Un VIF pari a 1 significa che non esiste alcuna correlazione tra un determinato predittore e gli altri predittori. I valori VIF superiori a 5 o 10 indicano una quantità problematica di collinearità.
Nel blocco di codice seguente, calcoliamo il VIF per ciascuna variabile indipendente nel nostro modello. Se qualsiasi valore VIF è superiore a 5, dovresti prendere in considerazione la rimozione della variabile dal modello.
from statsmodels.stats.outliers_influence import variance_inflation_factor
vif_data = pd.DataFrame()
vif_data['Feature'] = selected_features
vif_data['VIF'] = [variance_inflation_factor(X_scaled, i) for i in range(X_scaled.shape[1])]
print(vif_data)
Bar Plot for VIF Values
vif_data.plot(kind='bar', x='Feature', y='VIF', legend=False)
plt.title('Variance Inflation Factor (VIF) by Feature')
plt.ylabel('VIF Value')
plt.show()
Produzione :
Feature VIF
0 MedInc 1.120166
1 AveRooms 1.119797
2 AveOccup 1.000488
I valori VIF per ciascuna funzionalità sono i seguenti:
MedInc
: il valore VIF è 1.120166, indicando una correlazione molto bassa con altre variabili indipendenti. Ciò suggerisce cheMedInc
non è altamente correlato con altre variabili indipendenti nel modello.AveRooms
: il valore VIF è 1,119797, indicando una correlazione molto bassa con altre variabili indipendenti. Ciò suggerisce cheAveRooms
non è altamente correlato con altre variabili indipendenti nel modello.AveOccup
: il valore VIF è 1.000488, indicando alcuna correlazione con altre variabili indipendenti. Ciò suggerisce cheAveOccup
non è correlato ad altre variabili indipendenti nel modello.
In generale, questi valori VIF sono tutti inferiori a 5, indicando che non esiste una multicollinearità significativa tra le variabili indipendenti nel modello. Ciò suggerisce che il modello è stabile e affidabile e che i coefficienti delle variabili indipendenti non sono significativamente influenzati dalla multicollinearità.
Tecniche di convalida incrociata
La convalida incrociata è una tecnica utilizzata per valutare le prestazioni di un modello di machine learning. È una procedura di ricampionamento utilizzata per valutare un modello se si dispone di un campione di dati limitato. La procedura ha un unico parametro chiamato k
che si riferisce al numero di gruppi in cui deve essere suddiviso un dato campione di dati. In quanto tale, la procedura viene spesso chiamata convalida incrociata k-fold.
from sklearn.model_selection import cross_val_score
scores = cross_val_score(model, X_scaled, y, cv=5, scoring='r2')
print("Cross-Validation Scores:", scores)
print("Mean CV R^2:", scores.mean())
Line Plot for Cross-Validation Scores
plt.plot(range(1, 6), scores, marker='o', linestyle='--')
plt.xlabel('Fold')
plt.ylabel('R-squared')
plt.title('Cross-Validation R-squared Scores')
plt.show()
Produzione :
Cross-Validation Scores: [0.42854821 0.37096545 0.46910866 0.31191043 0.51269138]
Mean CV R^2: 0.41864482644003276
I punteggi di convalida incrociata indicano il rendimento del modello sui dati invisibili. I punteggi vanno da 0,31191043 a 0,51269138, indicando che la performance del modello varia a seconda delle diverse pieghe. Un punteggio più alto indica prestazioni migliori.
Il punteggio medio CV R^2 è 0,41864482644003276, il che suggerisce che, in media, il modello spiega circa il 41,86% della varianza nella variabile target. Si tratta di un livello di spiegazione moderato, che indica che il modello è in qualche modo efficace nel prevedere la variabile obiettivo, ma potrebbe beneficiare di ulteriori miglioramenti o perfezionamenti.
Questi punteggi possono essere utilizzati per valutare la generalizzabilità del modello e identificare potenziali aree di miglioramento.
Metodi di selezione delle caratteristiche
Il metodo Recursive Feature Elimination è una tecnica di selezione delle funzionalità che elimina ricorsivamente le funzionalità meno importanti fino al raggiungimento di un numero specificato di funzionalità. Questo metodo è particolarmente utile quando si ha a che fare con un gran numero di funzionalità e l'obiettivo è selezionare un sottoinsieme delle funzionalità più informative.
Nel codice fornito, importi prima la classe RFE
da sklearn.feature_selection
. Quindi crea un'istanza di RFE
con uno stimatore specificato (in questo caso, LinearRegression
) e imposta n_features_to_select
su 2, indicando che vogliamo selezionare le 2 caratteristiche principali.
Successivamente, adattiamo l'oggetto RFE
alle nostre feature in scala X_scaled
e targetizziamo la variabile y
. L'attributo support_
dell'oggetto RFE
restituisce una maschera booleana che indica quali funzionalità sono state selezionate.
Per visualizzare la classifica delle funzionalità, crea un DataFrame con i nomi delle funzionalità e le classifiche corrispondenti. L'attributo ranking_
dell'oggetto RFE
restituisce la classifica di ciascuna caratteristica, con valori più bassi che indicano caratteristiche più importanti. Quindi traccia un grafico a barre delle classifiche delle caratteristiche, ordinate in base ai valori di classificazione. Questo grafico ci aiuta a comprendere l'importanza relativa di ciascuna caratteristica nel modello.
from sklearn.feature_selection import RFE
rfe = RFE(estimator=LinearRegression(), n_features_to_select=3)
rfe.fit(X_scaled, y)
print("Selected Features:", rfe.support_)
Bar Plot of Feature Rankings
feature_ranking = pd.DataFrame({
'Feature': selected_features,
'Ranking': rfe.ranking_
})
feature_ranking.sort_values(by='Ranking').plot(kind='bar', x='Feature', y='Ranking', legend=False)
plt.title('Feature Ranking (Lower is Better)')
plt.ylabel('Ranking')
plt.show()
Produzione :
Selected Features: [ True True False]
In base alla tabella sopra, le 2 funzionalità più adatte sono MedInc
e AveRooms
. Ciò può essere verificato anche dall'output del modello riportato sopra poiché la variabile dipendente MedHouseValue
dipende principalmente da MedInc
e AveRooms
.
Domande frequenti
Come si implementa la regressione lineare multipla in Python?
Per implementare la regressione lineare multipla in Python, puoi utilizzare librerie come statsmodels
o scikit-learn
. Ecco una rapida panoramica utilizzando scikit-learn
:
from sklearn.linear_model import LinearRegression
import numpy as np
Example data
X = np.array([[1, 2], [2, 3], [3, 4], [4, 5]]) # Predictor variables
y = np.array([5, 7, 9, 11]) # Target variable
Create and fit the model
model = LinearRegression()
model.fit(X, y)
Get coefficients and intercept
print("Coefficients:", model.coef_)
print("Intercept:", model.intercept_)
Make predictions
predictions = model.predict(X)
print("Predictions:", predictions)
Ciò dimostra come adattare il modello, ottenere i coefficienti e fare previsioni.
Quali sono i presupposti della regressione lineare multipla in Python?
La regressione lineare multipla si basa su diverse ipotesi per garantire risultati validi:
- Linearità: la relazione tra i predittori e la variabile target è lineare.
- Indipendenza: le osservazioni sono indipendenti l'una dall'altra.
- Omoschedasticità: la varianza dei residui (errori) è costante su tutti i livelli delle variabili indipendenti.
- Normalità dei residui: i residui sono distribuiti normalmente.
- Nessuna multicollinearità: le variabili indipendenti non sono altamente correlate tra loro.
Puoi testare queste ipotesi utilizzando strumenti come i grafici dei residui, il fattore di inflazione della varianza (VIF) o test statistici.
Come si interpretano i risultati della regressione multipla in Python?
Le metriche chiave dei risultati della regressione includono:
- Coefficienti (coef_): indica la variazione nella variabile target per una variazione unitaria nel predittore corrispondente, mantenendo costanti le altre variabili.
Esempio: un coefficiente pari a 2 per X1 significa che la variabile target aumenta di 2 per ogni aumento di 1 unità in X1, mantenendo costanti le altre variabili.
2.Intercetta (intercept_): rappresenta il valore previsto della variabile di destinazione quando tutti i predittori sono zero.
3.R quadrato: spiega la proporzione della varianza nella variabile target spiegata dai predittori.
Esempio: un R^2 di 0,85 significa che l'85% della variabilità nella variabile target è spiegata dal modello.
4.Valori P (in statsmodels
): valuta la significatività statistica dei predittori. Un valore p <0,05 indica in genere che un predittore è significativo.
Qual è la differenza tra regressione lineare semplice e multipla in Python?
Feature | Simple Linear Regression | Multiple Linear Regression |
---|---|---|
Number of Independent Variables | One | More than one |
Model Equation | y = β0 + β1x + ε | y = β0 + β1x1 + β2x2 + … + βnxn + ε |
Assumptions | Same as multiple linear regression, but with a single independent variable | Same as simple linear regression, but with additional assumptions for multiple independent variables |
Interpretation of Coefficients | The change in the target variable for a unit change in the independent variable, while holding all other variables constant (not applicable in simple linear regression) | The change in the target variable for a unit change in one independent variable, while holding all other independent variables constant |
Model Complexity | Less complex | More complex |
Model Flexibility | Less flexible | More flexible |
Overfitting Risk | Lower | Higher |
Interpretability | Easier to interpret | More challenging to interpret |
Applicability | Suitable for simple relationships | Suitable for complex relationships with multiple factors |
Example | Predicting house prices based on the number of bedrooms | Predicting house prices based on the number of bedrooms, square footage, and location |
Conclusione
In questo tutorial completo, hai imparato a implementare la regressione lineare multipla utilizzando il set di dati sugli alloggi della California. Hai affrontato aspetti cruciali come la multicollinearità, la convalida incrociata, la selezione delle caratteristiche e la regolarizzazione, fornendo una comprensione approfondita di ciascun concetto. Hai anche imparato a incorporare visualizzazioni per illustrare i residui, l'importanza delle funzionalità e le prestazioni complessive del modello. Ora puoi costruire facilmente robusti modelli di regressione in Python e applicare queste competenze a problemi del mondo reale.