Website-Suche

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-learn und statsmodels.

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:

  1. Linearität: Die Beziehung zwischen der abhängigen Variablen und den unabhängigen Variablen ist linear.

  2. Unabhängigkeit der Fehler: Residuen (Fehler) sind unabhängig voneinander. Dies wird oft mit dem Durbin-Watson-Test überprüft.

  3. Homoskedastizität: Die Varianz der Residuen ist konstant über alle Niveaus der unabhängigen Variablen. Ein Residuenplot kann dabei helfen, dies zu überprüfen.

  4. Keine Multikollinearität: Unabhängige Variablen sind nicht stark korreliert. Der Varianzaufblähungsfaktor (VIF) wird häufig verwendet, um Multikollinearität zu erkennen.

  5. Normalität der Residuen: Residuen sollten einer Normalverteilung folgen. Dies kann mit einem Q-Q-Diagramm überprüft werden.

  6. 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:

VariabelBeschreibung
MedIncMittleres Einkommen im Block
HouseAgeMedianalter der Häuser im Block
AveRoomsDurchschnittliche Anzahl der Zimmer
AveBedrmsDurchschnittliche Anzahl der Schlafzimmer
BevölkerungBlockbevölkerung
AveOccupDurchschnittliche Hausbelegung
BreitengradHausblockbreite
LängengradHausblock 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) mit MedHouseValue, was darauf hindeutet, dass mit steigendem mittlerem Einkommen auch der mittlere Hauswert tendenziell zunimmt.
  • AveRooms: Diese Variable hat eine moderate positive Korrelation (0.151948) mit MedHouseValue, 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) mit MedHouseValue, 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 MedHouseValue ungefähr 2.0679 beträgt.
  • Der Koeffizient für x1 (in diesem Fall MedInc) beträgt 0,8300, was bedeutet, dass bei einem Anstieg von einer Einheit in MedInc der vorhergesagte MedHouseValue um ungefähr 0,83 Einheiten ansteigt, vorausgesetzt, dass alle anderen unabhängigen Variablen konstant gehalten werden.
  • Der Koeffizient für x2 (in diesem Fall AveRooms) beträgt -0,1000, was bedeutet, dass für jede Einheitserhöhung in x2 der vorhergesagte MedHouseValue um etwa 0,10 Einheiten sinkt, vorausgesetzt, alle anderen unabhängigen Variablen bleiben konstant.
  • Der Koeffizient für x3 (in diesem Fall AveOccup) beträgt -0,0397, was bedeutet, dass für jede Einheitserhöhung in x3 der vorhergesagte MedHouseValue um 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, dass MedInc nicht 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, dass AveRooms nicht 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, dass AveOccup nicht 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:

  1. Linearität: Die Beziehung zwischen den Prädiktoren und der Zielvariable ist linear.
  2. Unabhängigkeit: Beobachtungen sind unabhängig voneinander.
  3. Homoskedastizität: Die Varianz der Residuen (Fehler) ist über alle Ebenen der unabhängigen Variablen konstant.
  4. Normalität der Residuen: Die Residuen sind normal verteilt.
  5. 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:

  1. 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?

MerkmalEinfache lineare RegressionMultiple lineare Regression
Anzahl der unabhängigen VariablenEinsMehr als eins
Modellgleichung
AnnahmenWie 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 KoeffizientenDie 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ätWeniger komplexKomplexer
ModellflexibilitätWeniger flexibelFlexibler
ÜberanpassungsrisikoTieferHöher
InterpretierbarkeitLeichter zu interpretierenSchwieriger zu interpretieren
AnwendbarkeitGeeignet für einfache BeziehungenGeeignet für komplexe Beziehungen mit mehreren Faktoren
BeispielVorhersage der Immobilienpreise basierend auf der Anzahl der SchlafzimmerVorhersage 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.