Multiple Lineare Regression in Python: Ein umfassender Leitfaden
Einführung
Die multiple lineare Regression ist eine grundlegende statistische Technik, die verwendet wird, um die Beziehung zwischen einer abhängigen Variablen und mehreren unabhängigen Variablen zu modellieren. In Python bieten Werkzeuge wie scikit-learn und statsmodels robuste Implementierungen für die Regressionsanalyse. Dieses Tutorial wird Sie durch die Implementierung, Interpretation und Bewertung von modellen der multiplen linearen Regression mit Python führen.
Voraussetzungen
Bevor Sie mit der Implementierung beginnen, stellen Sie sicher, dass Sie Folgendes haben:
- Grundlegendes Verständnis von Python. Sie können sich auf das Python-Tutorial für Anfänger beziehen.
- Vertrautheit mit scikit-learn für Aufgaben im Bereich des maschinellen Lernens. Sie können auf das Python scikit-learn-Tutorial verweisen.
- Verständnis von Konzepten der Datenvisualisierung in Python. Sie können sich auf "Wie man Daten in Python 3 mit matplotlib plottet" und "Datenanalyse und -visualisierung mit pandas und Jupyter Notebook in Python 3" beziehen.
- Python 3.x wurde mit den folgenden Bibliotheken installiert:
numpy,pandas,matplotlib,seaborn,scikit-learnundstatsmodels.
Was ist multiple lineare Regression?
Multiple lineare Regression (MLR) ist ein statistisches Verfahren, das die Beziehung zwischen einer abhängigen Variablen und zwei oder mehr unabhängigen Variablen modelliert. Es ist eine Erweiterung der einfachen linearen Regression, die die Beziehung zwischen einer abhängigen Variablen und einer einzelnen unabhängigen Variablen modelliert. Bei der MLR wird die Beziehung mit der folgenden Formel modelliert:
Wo:
Beispiel: Die Vorhersage des Preises eines Hauses basierend auf seiner Größe, der Anzahl der Schlafzimmer und der Lage. In diesem Fall gibt es drei unabhängige Variablen, d.h. Größe, Anzahl der Schlafzimmer und Lage, und eine abhängige Variable, d.h. den Preis, der vorhergesagt werden soll.
Annahmen der multiplen linearen Regression
Bevor man eine multiple lineare Regression durchführt, ist es wichtig sicherzustellen, dass die folgenden Annahmen erfüllt sind:
Linearität: Die Beziehung zwischen der abhängigen Variablen und den unabhängigen Variablen ist linear.
Unabhängigkeit der Fehler: Residuen (Fehler) sind unabhängig voneinander. Dies wird oft mit dem Durbin-Watson-Test überprüft.
Homoskedastizität: Die Varianz der Residuen ist konstant über alle Niveaus der unabhängigen Variablen. Ein Residuenplot kann dabei helfen, dies zu überprüfen.
Keine Multikollinearität: Unabhängige Variablen sind nicht stark korreliert. Der Varianzaufblähungsfaktor (VIF) wird häufig verwendet, um Multikollinearität zu erkennen.
Normalität der Residuen: Residuen sollten einer Normalverteilung folgen. Dies kann mit einem Q-Q-Diagramm überprüft werden.
Ausreißer-Einfluss: Ausreißer oder Punkte mit hohem Hebel sollten das Modell nicht übermäßig beeinflussen.
Diese Annahmen stellen sicher, dass das Regressionsmodell gültig und die Ergebnisse zuverlässig sind. Wenn diese Annahmen nicht erfüllt werden, kann dies zu verzerrten oder irreführenden Ergebnissen führen.
Die Daten vorbereiten
In diesem Abschnitt werden Sie lernen, das Multiple Lineare Regressionsmodell in Python zu verwenden, um Hauspreise basierend auf Merkmalen aus dem California Housing Dataset vorherzusagen. Sie werden lernen, wie man Daten vorverarbeitet, ein Regressionsmodell anpasst und dessen Leistung bewertet, während Sie häufige Herausforderungen wie Multikollinearität, Ausreißer und Merkmalsauswahl angehen.
Schritt 1 - Laden Sie den Datensatz
Sie werden den California Housing Dataset verwenden, ein beliebter Datensatz für Regressionsaufgaben. Dieser Datensatz enthält 13 Merkmale über Häuser in den Vororten von Boston und deren entsprechenden medianen Hauspreis.
Zuerst installieren wir die notwendigen Pakete:
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())
Sie sollten die folgende Ausgabe des Datensatzes beobachten:
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
Hier ist, was jedes der Attribute bedeutet:
| Variabel | Beschreibung |
|---|---|
| MedInc | Mittleres Einkommen im Block |
| HouseAge | Medianalter der Häuser im Block |
| AveRooms | Durchschnittliche Anzahl der Zimmer |
| AveBedrms | Durchschnittliche Anzahl der Schlafzimmer |
| Bevölkerung | Blockbevölkerung |
| AveOccup | Durchschnittliche Hausbelegung |
| Breitengrad | Hausblockbreite |
| Längengrad | Hausblock Längengrad |
Schritt 2 - Die Daten vorverarbeiten
Überprüfen Sie auf fehlende Werte
Stellt sicher, dass im Datensatz keine fehlenden Werte vorhanden sind, die die Analyse beeinträchtigen könnten.
print(housing_df.isnull().sum())
Ausgabe :
MedInc 0
HouseAge 0
AveRooms 0
AveBedrms 0
Population 0
AveOccup 0
Latitude 0
Longitude 0
MedHouseValue 0
dtype: int64
Merkmalsauswahl
Lass uns zunächst eine Korrelationsmatrix erstellen, um die Abhängigkeiten zwischen den Variablen zu verstehen.
correlation_matrix = housing_df.corr()
print(correlation_matrix['MedHouseValue'])
Ausgabe :
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
Sie können die obenstehende Korrelationsmatrix analysieren, um die abhängigen und unabhängigen Variablen für unser Regressionsmodell auszuwählen. Die Korrelationsmatrix bietet Einblicke in die Beziehungen zwischen jedem Paar von Variablen im Datensatz.
In der gegebenen Korrelationsmatrix ist MedHouseValue die abhängige Variable, da es die Variable ist, die wir vorherzusagen versuchen. Die unabhängigen Variablen haben eine signifikante Korrelation mit MedHouseValue.
Basierend auf der Korrelationsmatrix können Sie die folgenden unabhängigen Variablen identifizieren, die eine signifikante Korrelation mit MedHouseValue aufweisen:
MedInc: Diese Variable hat eine starke positive Korrelation (0.688075) mitMedHouseValue, was darauf hindeutet, dass mit steigendem mittlerem Einkommen auch der mittlere Hauswert tendenziell zunimmt.AveRooms: Diese Variable hat eine moderate positive Korrelation (0.151948) mitMedHouseValue, was darauf hindeutet, dass mit zunehmender durchschnittlicher Anzahl von Zimmern pro Haushalt auch der Median Hauswert tendenziell steigt.AveOccup: Diese Variable hat eine schwache negative Korrelation (-0.023737) mitMedHouseValue, was darauf hinweist, dass mit steigendem durchschnittlichen Belegungsgrad pro Haushalt der Medianhauswert tendenziell sinkt, aber der Effekt relativ gering ist.
Durch die Auswahl dieser unabhängigen Variablen können Sie ein Regressionsmodell erstellen, das die Beziehungen zwischen diesen Variablen und MedHouseValue erfasst und es uns ermöglicht, Vorhersagen über den medianen Hauswert basierend auf dem mittleren Einkommen, der durchschnittlichen Anzahl der Zimmer und der durchschnittlichen Belegung zu treffen.
Sie können auch die Korrelationsmatrix in Python mit dem Folgenden plotten:
import seaborn as sns
import matplotlib.pyplot as plt
Assuming 'housing_df' is the DataFrame containing the data
Plotting the correlation matrix
plt.figure(figsize=(10, 8))
sns.heatmap(housing_df.corr(), annot=True, cmap='coolwarm')
plt.title('Correlation Matrix')
plt.show()
Sie werden sich auf einige Schlüsselmerkmale zur Vereinfachung basierend auf dem oben genannten konzentrieren, wie MedInc (Median-Einkommen), AveRooms (durchschnittliche Zimmer pro Haushalt) und AveOccup (durchschnittliche Belegung pro Haushalt).
selected_features = ['MedInc', 'AveRooms', 'AveOccup']
X = housing_df[selected_features]
y = housing_df['MedHouseValue']
Der obige Codeblock wählt bestimmte Merkmale aus dem housing_df Datenrahmen für die Analyse aus. Die ausgewählten Merkmale sind MedInc, AveRooms und AveOccup, die in der Liste selected_features gespeichert sind.
Der DataFrame housing_df wird dann auf diese ausgewählten Merkmale beschränkt und das Ergebnis wird in der X Liste gespeichert.
Die Zielvariable MedHouseValue wird aus housing_df extrahiert und in der y-Liste gespeichert.
Funktionen skalieren
Sie werden die Standardisierung verwenden, um sicherzustellen, dass alle Merkmale auf demselben Maßstab sind, was die Modellleistung und Vergleichbarkeit verbessert.
Die Standardisierung ist eine Vorverarbeitungstechnik, die numerische Merkmale so skaliert, dass sie einen Mittelwert von 0 und eine Standardabweichung von 1 haben. Dieser Prozess stellt sicher, dass alle Merkmale auf demselben Maßstab liegen, was für Maschinenlernmodelle, die empfindlich auf den Maßstab der Eingabemerkmale reagieren, von entscheidender Bedeutung ist. Durch die Standardisierung der Merkmale können Sie die Modellleistung und die Vergleichbarkeit verbessern, indem Sie den Einfluss von Merkmalen mit großen Bereichen, die das Modell dominieren, verringern.
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)
Ausgabe :
[[ 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]]
Die Ausgabe stellt die skalierten Werte der Merkmale MedInc, AveRooms und AveOccup nach Anwendung des StandardScalers dar. Die Werte sind nun um 0 zentriert mit einer Standardabweichung von 1, wodurch sichergestellt wird, dass alle Merkmale auf dem gleichen Maßstab sind.
Die erste Zeile [ 2.34476576 0.62855945 -0.04959654] zeigt an, dass der skalierte MedInc-Wert für den ersten Datenpunkt 2.34476576 beträgt, AveRooms 0.62855945 ist und AveOccup -0.04959654 beträgt. Ebenso repräsentiert die zweite Zeile [ 2.33223796 0.32704136 -0.09251223] die skalierten Werte für den zweiten Datenpunkt und so weiter.
Die skalierten Werte reichen von etwa -1,14259331 bis 2,34476576, was darauf hinweist, dass die Merkmale jetzt normalisiert und vergleichbar sind. Dies ist entscheidend für maschinelle Lernmodelle, die empfindlich auf den Maßstab der Eingangsmerkmale reagieren, da es verhindert, dass Merkmale mit großen Reichweiten das Modell dominieren.
Mehrfache lineare Regression implementieren
Jetzt, da Sie mit der Datenvorverarbeitung fertig sind, lassen Sie uns die multiple lineare Regression in Python implementieren.
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))
Die train_test_split-Funktion wird verwendet, um die Daten in Trainings- und Testmengen zu teilen. Hierbei werden 80 % der Daten für das Training und 20 % für den Test verwendet.
Das Modell wird mit dem mittleren quadratischen Fehler und R-Quadrat bewertet. Der mittlere quadratische Fehler (MSE) misst den Durchschnitt der Quadrate der Fehler oder Abweichungen.
Das Bestimmtheitsmaß (R-Quadrat, R2) ist ein statistisches Maß, das den Anteil der Varianz einer abhängigen Variable darstellt, der durch eine oder mehrere unabhängige Variablen in einem Regressionsmodell erklärt wird.
Ausgabe :
Mean Squared Error: 0.7006855912225249
R-squared: 0.4652924370503557
Die obige Ausgabe liefert zwei wichtige Kennzahlen zur Bewertung der Leistung des multiplen linearen Regressionsmodells:
Mittlerer quadratischer Fehler (MSE): 0.7006855912225249 Der MSE misst die durchschnittliche quadrierte Abweichung zwischen den vorhergesagten und den tatsächlichen Werten der Zielvariablen. Ein niedrigerer MSE weist auf eine bessere Modellleistung hin, da dies bedeutet, dass das Modell genauere Vorhersagen trifft. In diesem Fall beträgt der MSE 0.7006855912225249, was darauf hinweist, dass das Modell nicht perfekt ist, aber ein angemessenes Maß an Genauigkeit aufweist. Die MSE-Werte sollten typischerweise näher bei 0 liegen, wobei niedrigere Werte eine bessere Leistung anzeigen.
R-Quadrat (R2): 0.4652924370503557 R-Quadrat misst den Anteil der Varianz der abhängigen Variable, der durch die unabhängigen Variablen vorhergesagt werden kann. Es reicht von 0 bis 1, wobei 1 perfekte Vorhersage und 0 keine lineare Beziehung bedeutet. In diesem Fall beträgt der R-Quadrat-Wert 0.4652924370503557, was bedeutet, dass etwa 46,53 % der Varianz der Zielvariablen durch die im Modell verwendeten unabhängigen Variablen erklärt werden kann. Dies deutet darauf hin, dass das Modell in der Lage ist, einen signifikanten Teil der Beziehungen zwischen den Variablen zu erfassen, jedoch nicht alle davon.
Lass uns einige wichtige Handlungsstränge anschauen:
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()
Verwendung von statsmodels
Die Statsmodels-Bibliothek in Python ist ein leistungsstarkes Werkzeug für die statistische Analyse. Sie bietet eine Vielzahl von statistischen Modellen und Tests, einschließlich linearer Regression, Zeitreihenanalyse und nichtparametrischen Methoden.
Im Kontext der multiplen linearen Regression kann statsmodels verwendet werden, um ein lineares Modell an die Daten anzupassen und anschließend verschiedene statistische Tests und Analysen an dem Modell durchzuführen. Dies kann besonders nützlich sein, um die Beziehungen zwischen den unabhängigen und abhängigen Variablen zu verstehen und um Vorhersagen basierend auf dem Modell zu treffen.
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()
Ausgabe :
==============================================================================
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
==============================================================================
Hier ist die Zusammenfassung der obigen Tabelle:
Modellzusammenfassung
Das Modell ist ein gewöhnliches kleinste-Quadrate-Regressionsmodell, das eine Art von linearem Regressionsmodell ist. Die abhängige Variable ist MedHouseValue, und das Modell hat einen R-Quadrat-Wert von 0,485, was darauf hindeutet, dass etwa 48,5 % der Variation in MedHouseValue durch die unabhängigen Variablen erklärt werden kann. Der angepasste R-Quadrat-Wert beträgt 0,484, was eine modifizierte Version von R-Quadrat ist, die das Modell dafür bestraft, dass zusätzliche unabhängige Variablen einbezogen werden.
Modellanpassung
Das Modell wurde mit der Methode der kleinsten Quadrate angepasst, und die F-Statistik beträgt 5173, was darauf hindeutet, dass das Modell gut passt. Die Wahrscheinlichkeit, eine F-Statistik zu beobachten, die mindestens so extrem ist wie die beobachtete, unter der Annahme, dass die Nullhypothese wahr ist, beträgt ungefähr 0. Dies deutet darauf hin, dass das Modell statistisch signifikant ist.
Modellkoeffizienten
Die Modellkoeffizienten sind wie folgt:
- Der konstante Term beträgt 2.0679, was bedeutet, dass, wenn alle unabhängigen Variablen 0 sind, der vorhergesagte
MedHouseValueungefähr 2.0679 beträgt. - Der Koeffizient für
x1(in diesem FallMedInc) beträgt 0,8300, was bedeutet, dass bei einem Anstieg von einer Einheit inMedIncder vorhergesagteMedHouseValueum ungefähr 0,83 Einheiten ansteigt, vorausgesetzt, dass alle anderen unabhängigen Variablen konstant gehalten werden. - Der Koeffizient für
x2(in diesem FallAveRooms) beträgt -0,1000, was bedeutet, dass für jede Einheitserhöhung inx2der vorhergesagteMedHouseValueum etwa 0,10 Einheiten sinkt, vorausgesetzt, alle anderen unabhängigen Variablen bleiben konstant. - Der Koeffizient für
x3(in diesem FallAveOccup) beträgt -0,0397, was bedeutet, dass für jede Einheitserhöhung inx3der vorhergesagteMedHouseValueum etwa 0,04 Einheiten sinkt, vorausgesetzt, alle anderen unabhängigen Variablen bleiben konstant.
Modelldiagnosen
Die Modelldiagnosen sind wie folgt:
- Die Omnibus-Teststatistik beträgt 3981,290, was darauf hindeutet, dass die Residuen nicht normalverteilt sind.
- Die Durbin-Watson-Statistik beträgt 1,983, was darauf hindeutet, dass es keine signifikante Autokorrelation in den Residuen gibt.
- Die Jarque-Bera-Teststatistik beträgt 11583,284, was darauf hindeutet, dass die Residuen nicht normalverteilt sind.
- Die Schiefe der Residuen beträgt 1,260, was darauf hinweist, dass die Residuen nach rechts schief sind.
- Die Kurtosis der Residuen beträgt 6,239, was darauf hindeutet, dass die Residuen leptokurtisch sind (d.h. sie haben einen höheren Gipfel und schwerere Schwänze als eine Normalverteilung).
- Die Bedingungszahl beträgt 1,42, was darauf hinweist, dass das Modell nicht empfindlich auf kleine Änderungen der Daten reagiert.
Umgang mit Multikollinearität
Multikollinearität ist ein häufiges Problem in der multiplen linearen Regression, bei dem zwei oder mehr unabhängige Variablen stark miteinander korreliert sind. Dies kann zu instabilen und unzuverlässigen Schätzungen der Koeffizienten führen.
Um Multikollinearität zu erkennen und zu handhaben, können Sie den Varianz-Inflationsfaktor (VIF) verwenden. Der VIF misst, wie stark die Varianz eines geschätzten Regressionskoeffizienten zunimmt, wenn Ihre Prädiktoren korreliert sind. Ein VIF von 1 bedeutet, dass keine Korrelation zwischen einem bestimmten Prädiktor und den anderen Prädiktoren besteht. VIF-Werte über 5 oder 10 deuten auf eine problematische Menge an Kollinearität hin.
Im folgenden Codeblock berechnen wir den VIF für jede unabhängige Variable in unserem Modell. Wenn ein VIF-Wert über 5 liegt, sollten Sie in Betracht ziehen, die Variable aus dem Modell zu entfernen.
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()
Ausgabe :
Feature VIF
0 MedInc 1.120166
1 AveRooms 1.119797
2 AveOccup 1.000488
Die VIF-Werte für jedes Merkmal sind wie folgt:
MedInc: Der VIF-Wert beträgt 1.120166, was auf eine sehr geringe Korrelation mit anderen unabhängigen Variablen hinweist. Dies deutet darauf hin, dassMedIncnicht stark mit anderen unabhängigen Variablen im Modell korreliert.AveRooms: Der VIF-Wert beträgt 1.119797, was auf eine sehr geringe Korrelation mit anderen unabhängigen Variablen hinweist. Dies deutet darauf hin, dassAveRoomsnicht stark mit anderen unabhängigen Variablen im Modell korreliert.AveOccup: Der VIF-Wert beträgt 1.000488, was auf keine Korrelation mit anderen unabhängigen Variablen hinweist. Dies deutet darauf hin, dassAveOccupnicht mit anderen unabhängigen Variablen im Modell korreliert.
Im Allgemeinen liegen diese VIF-Werte alle unter 5, was darauf hinweist, dass es keine signifikante Multikollinearität zwischen den unabhängigen Variablen im Modell gibt. Dies deutet darauf hin, dass das Modell stabil und zuverlässig ist und dass die Koeffizienten der unabhängigen Variablen nicht signifikant von der Multikollinearität betroffen sind.
Kreuzvalidierungstechniken
Die Kreuzvalidierung ist eine Technik zur Bewertung der Leistung eines maschinellen Lernmodells. Es handelt sich um ein Resampling-Verfahren, das verwendet wird, um ein Modell zu bewerten, wenn wir eine begrenzte Datenprobe haben. Das Verfahren hat einen einzigen Parameter namens k, der sich auf die Anzahl der Gruppen bezieht, in die eine gegebene Datenprobe aufgeteilt werden soll. Daher wird das Verfahren oft als k-fache Kreuzvalidierung bezeichnet.
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()
Ausgabe :
Cross-Validation Scores: [0.42854821 0.37096545 0.46910866 0.31191043 0.51269138]
Mean CV R^2: 0.41864482644003276
Die Kreuzvalidierungsergebnisse zeigen, wie gut das Modell auf unbekannten Daten abschneidet. Die Werte reichen von 0,31191043 bis 0,51269138, was darauf hinweist, dass die Leistung des Modells über verschiedene Folds hinweg variiert. Ein höherer Wert deutet auf eine bessere Leistung hin.
Der durchschnittliche CV R^2-Wert beträgt 0,41864482644003276, was darauf hindeutet, dass das Modell im Durchschnitt etwa 41,86 % der Varianz in der Zielvariablen erklärt. Dies ist ein moderates Erklärungsniveau, was darauf hindeutet, dass das Modell einigermaßen effektiv ist, um die Zielvariablen vorherzusagen, jedoch möglicherweise von weiteren Verbesserungen oder Verfeinerungen profitieren kann.
Diese Werte können verwendet werden, um die Generisierbarkeit des Modells zu bewerten und potenzielle Verbesserungsbereiche zu identifizieren.
Merkmalsauswahlmethoden
Die Methode der rekursiven Merkmalselimination ist eine Technik zur Merkmalsauswahl, die rekursiv die am wenigsten wichtigen Merkmale entfernt, bis eine bestimmte Anzahl von Merkmalen erreicht ist. Diese Methode ist besonders nützlich, wenn man mit einer großen Anzahl von Merkmalen zu tun hat und das Ziel darin besteht, eine Teilmenge der informativsten Merkmale auszuwählen.
In dem bereitgestellten Code importieren Sie zunächst die RFE-Klasse aus sklearn.feature_selection. Dann erstellen Sie eine Instanz von RFE mit einem angegebenen Schätzer (in diesem Fall LinearRegression) und setzen n_features_to_select auf 2, was bedeutet, dass wir die besten 2 Merkmale auswählen möchten.
Als nächstes passen wir das RFE-Objekt an unsere skalierten Merkmale X_scaled und die Zielvariable y an. Das Attribut support_ des RFE-Objekts gibt eine boolesche Maske zurück, die angibt, welche Merkmale ausgewählt wurden.
Um das Ranking der Merkmale zu visualisieren, erstellen Sie ein DataFrame mit den Namen der Merkmale und ihren entsprechenden Rankings. Das Attribut ranking_ des RFE-Objekts gibt das Ranking jedes Merkmals zurück, wobei niedrigere Werte auf wichtigere Merkmale hinweisen. Anschließend zeichnen Sie ein Balkendiagramm der Merkmalsrankings, sortiert nach ihren Rangwerten. Dieses Diagramm hilft uns, die relative Wichtigkeit jedes Merkmals im Modell zu verstehen.
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()
Ausgabe :
Selected Features: [ True True False]
Basierend auf dem obigen Diagramm sind die 2 am besten geeigneten Merkmale MedInc und AveRooms. Dies kann auch durch die Ausgabe des Modells oben verifiziert werden, da die abhängige Variable MedHouseValue hauptsächlich von MedInc und AveRooms abhängt.
Häufig gestellte Fragen
Wie implementiert man multiple lineare Regression in Python?
Um multiple lineare Regression in Python zu implementieren, können Sie Bibliotheken wie statsmodels oder scikit-learn verwenden. Hier ist ein schneller Überblick über die Verwendung von 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)
Dies zeigt, wie man das Modell anpasst, die Koeffizienten erhält und Vorhersagen trifft.
Was sind die Annahmen der multiplen linearen Regression in Python?
Die multiple lineare Regression basiert auf mehreren Annahmen, um gültige Ergebnisse zu gewährleisten:
- Linearität: Die Beziehung zwischen den Prädiktoren und der Zielvariable ist linear.
- Unabhängigkeit: Beobachtungen sind unabhängig voneinander.
- Homoskedastizität: Die Varianz der Residuen (Fehler) ist über alle Ebenen der unabhängigen Variablen konstant.
- Normalität der Residuen: Die Residuen sind normal verteilt.
- Keine Multikollinearität: Unabhängige Variablen korrelieren nicht stark miteinander.
Sie können diese Annahmen mit Werkzeugen wie Residualdiagrammen, dem Variance Inflation Factor (VIF) oder statistischen Tests überprüfen.
Wie interpretieren Sie die Ergebnisse einer multiplen Regression in Python?
Wichtige Kennzahlen aus den Regressions Ergebnissen umfassen:
- Koeffizienten (coef_): Geben die Veränderung der Zielvariable für eine Einheit Veränderung im entsprechenden Prädiktor an, wobei die anderen Variablen konstant gehalten werden.
Ein Koeffizient von 2 für X1 bedeutet, dass die Zielvariable um 2 zunimmt für jede Erhöhung von 1 Einheit in X1, wobei die anderen Variablen konstant gehalten werden.
2.Intercept (intercept_): Stellt den vorhergesagten Wert der Zielvariable dar, wenn alle Prädiktoren null sind.
3.R-Quadrat: Erklärt den Anteil der Varianz der Zielvariable, der durch die Prädiktoren erklärt wird.
Ein R^2 von 0,85 bedeutet, dass 85% der Variabilität der Zielvariable durch das Modell erklärt werden.
4.P-Werte (in statsmodels): Bewerten Sie die statistische Signifikanz von Prädiktoren. Ein p-Wert < 0,05 deutet typischerweise darauf hin, dass ein Prädiktor signifikant ist.
Was ist der Unterschied zwischen einfacher und mehrfacher linearer Regression in Python?
| Merkmal | Einfache lineare Regression | Multiple lineare Regression |
|---|---|---|
| Anzahl der unabhängigen Variablen | Eins | Mehr als eins |
| Modellgleichung | ||
| Annahmen | Wie bei der multiplen linearen Regression, aber mit einer einzigen unabhängigen Variablen. | Ähnlich wie bei der einfachen linearen Regression, jedoch mit zusätzlichen Annahmen für mehrere unabhängige Variablen. |
| Interpretation der Koeffizienten | Die Veränderung der Zielvariablen für eine Einheit Veränderung der unabhängigen Variable, während alle anderen Variablen konstant gehalten werden (nicht anwendbar in der einfachen linearen Regression) | Die Änderung der Zielvariable für eine Einheit Änderung in einer unabhängigen Variable, während alle anderen unabhängigen Variablen konstant gehalten werden. |
| Modellkomplexität | Weniger komplex | Komplexer |
| Modellflexibilität | Weniger flexibel | Flexibler |
| Überanpassungsrisiko | Tiefer | Höher |
| Interpretierbarkeit | Leichter zu interpretieren | Schwieriger zu interpretieren |
| Anwendbarkeit | Geeignet für einfache Beziehungen | Geeignet für komplexe Beziehungen mit mehreren Faktoren |
| Beispiel | Vorhersage der Immobilienpreise basierend auf der Anzahl der Schlafzimmer | Vorhersage der Immobilienpreise basierend auf der Anzahl der Schlafzimmer, der Quadratmeterzahl und der Lage |
Schlussfolgerung
In diesem umfassenden Tutorial haben Sie gelernt, die Multiple Lineare Regression mit dem California Housing Dataset zu implementieren. Sie haben wichtige Aspekte wie Multikollinearität, Kreuzvalidierung, Merkmalsauswahl und Regularisierung behandelt und ein umfassendes Verständnis jedes Konzepts entwickelt. Sie haben auch gelernt, Visualisierungen zu integrieren, um Residuen, die Wichtigkeit der Merkmale und die Gesamtleistung des Modells darzustellen. Sie können jetzt problemlos robuste Regressionsmodelle in Python erstellen und diese Fähigkeiten auf reale Probleme anwenden.









