Heim  >  Artikel  >  Backend-Entwicklung  >  Erkennen und Behandeln von Multikollinearitätsproblemen bei der Regression mit Python

Erkennen und Behandeln von Multikollinearitätsproblemen bei der Regression mit Python

王林
王林nach vorne
2023-08-18 15:05:201647Durchsuche

Multikollinearität bezieht sich auf den hohen Grad an Interkorrelation zwischen den unabhängigen Variablen im Regressionsmodell. Dies kann zu ungenauen Koeffizienten im Modell führen, wodurch es schwierig wird, den Einfluss verschiedener unabhängiger Variablen auf die abhängige Variable zu beurteilen. In diesem Fall gilt es, die Multikollinearität des Regressionsmodells zu identifizieren und zu behandeln sowie verschiedene Verfahren und deren Ergebnisse zu kombinieren, was wir Schritt für Schritt erläutern werden.

Methode

  • Multikollinearität erkennen

  • Umgang mit Multikollinearität

Algorithmus

Schritt 1 − Erforderliche Bibliotheken importieren

Schritt 2 – Daten in Pandas Dataframes laden

Schritt 3 – Erstellen Sie eine Korrelationsmatrix mit Prädiktoren

Schritt 4 − Erstellen Sie eine Heatmap der Korrelationsmatrix, um die Korrelation zu visualisieren

Schritt 5 – Berechnen Sie den Varianzinflationsfaktor für jeden Prädiktor der Ausgabe

Schritt 6 − Prädiktor bestimmen

Schritt 7 – Der Prädiktor sollte entfernt werden

Schritt 8 – Führen Sie das Regressionsmodell erneut aus

Schritt 9 – Überprüfen Sie es erneut.

Methode 1: Multikollinearität erkennen

Verwenden Sie die Funktion corr() des Pandas-Pakets, um die Korrelationsmatrix der unabhängigen Variablen zu bestimmen. Verwenden Sie die Seaborn-Bibliothek, um Wärmekarten zur Anzeige der Korrelationsmatrix zu erstellen. Verwenden Sie die Funktion variance_inflation_factor() des Pakets statsmodels, um den Varianzinflationsfaktor (VIF) für jede unabhängige Variable zu bestimmen. Ein VIF größer als 5 oder 10 weist auf eine hohe Multikollinearität hin.

Die chinesische Übersetzung von

Beispiel-1

lautet:

Beispiel-1

In diesem Code werden die Prädiktorvariable X und die abhängige Variable y getrennt, sobald die Daten in den Pandas DataFrame geladen sind. Um den VIF für jede Prädiktorvariable zu berechnen, verwenden wir die Funktion „variation_inflation_factor()“ aus dem statsmodels-Paket. Im letzten Schritt des Prozesses speichern wir die VIF-Werte zusammen mit den Namen der Prädiktoren in einem brandneuen Pandas DataFrame und zeigen dann die Ergebnisse an. Mit diesem Code wird eine Tabelle generiert, die den Variablennamen und den VIF-Wert für jede Prädiktorvariable enthält. Wenn eine Variable einen hohen VIF-Wert hat (je nach Situation über 5 oder 10), ist es wichtig, die Variable weiter zu analysieren.

import pandas as pd
from statsmodels.stats.outliers_influence import variance_inflation_factor

# Load data into a pandas DataFrame
data = pd.read_csv("mydata.csv")

# Select independent variables
X = data[['independent_var1', 'independent_var2', 'independent_var3']]

# Calculate VIF for each independent variable
vif = pd.DataFrame()
vif["VIF Factor"] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
vif["features"] = X.columns

# Print the VIF results
print(vif)

Ausgabe

VIF  Factor      Features 
0    3.068988    Independent_var1
1    3.870567    Independent_var2
2    3.843753    Independent_var3

Methode 2: Umgang mit Multikollinearität

Schließen Sie eine oder mehrere stark korrelierte unabhängige Variablen aus dem Modell aus. Mithilfe der Hauptkomponentenanalyse (PCA) können hochkorrelierte unabhängige Variablen zu einer einzigen Variablen kombiniert werden. Regularisierungsmethoden wie die Ridge-Regression oder die Lasso-Regression können verwendet werden, um den Einfluss stark korrelierter unabhängiger Variablen auf die Modellkoeffizienten zu reduzieren. Mit dem oben genannten Ansatz kann der folgende Beispielcode verwendet werden, um Multikollinearitätsprobleme zu identifizieren und zu lösen −

import pandas as pd
import seaborn as sns
from statsmodels.stats.outliers_influence import variance_inflation_factor
from sklearn.decomposition import PCA
from sklearn.linear_model import Ridge

# Load the data into a pandas DataFrame
data = pd.read_csv('data.csv')

# Calculate the correlation matrix
corr_matrix = data.corr()

# Create a heatmap to visualize the correlation matrix
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')

# Check for VIF for each independent variable
for i in range(data.shape[1]-1):
   vif = variance_inflation_factor(data.values, i)
   print('VIF for variable {}: {:.2f}'.format(i, vif))

# Remove highly correlated independent variables
data = data.drop(['var1', 'var2'], axis=1)

# Use PCA to combine highly correlated independent variables
pca = PCA(n_components=1)
data['pca'] = pca.fit_transform(data[['var1', 'var2']])

# Use Ridge regression to reduce the impact of highly correlated independent variables
X = data.drop('dependent_var', axis=1)
y = data['dependent_var']
ridge = Ridge(alpha=0.1)
ridge.fit(X, y)

Diese Funktion generiert keine andere Ausgabe als die Ausgabe des VIF-Werts jeder unabhängigen Variablen. Beim Ausführen dieses Codes werden nur die VIF-Werte für jede unabhängige Variable ausgegeben; es werden keine Diagramme oder Modellleistungen gedruckt.

In diesem Beispiel werden die Daten zunächst in einen Pandas DataFrame geladen, dann wird die Korrelationsmatrix berechnet und schließlich wird eine Heatmap erstellt, um die Korrelationsmatrix anzuzeigen. Anschließend haben wir unabhängige Faktoren mit hohen Korrelationen eliminiert, nachdem wir den VIF jeder unabhängigen Variablen getestet hatten. Wir verwendeten die Ridge-Regression, um den Einfluss hochkorrelierter unabhängiger Variablen auf die Modellkoeffizienten zu reduzieren, und nutzten die Hauptkomponentenanalyse, um hochkorrelierte unabhängige Variablen in einer Variablen zu kombinieren.

import pandas as pd

#create DataFrame
df = pd.DataFrame({'rating': [90, 85, 82, 18, 14, 90, 16, 75, 87, 86],
         'points': [22, 10, 34, 46, 27, 20, 12, 15, 14, 19],
         'assists': [1, 3, 5, 6, 5, 7, 6, 9, 9, 5],
         'rebounds': [11, 8, 10, 6, 3, 4, 4, 10, 10, 7]})

#view DataFrame
print(df)

Ausgabe

   rating  points  assists  rebounds
0      90      22        1        11
1      85      10        3         8
2      82      34        5        10
3      18      46        6         6
4      14      27        5         3
5      90      20        7         4
6      16      12        6         4
7      75      15        9        10
8      87      14        9        10
9      86      19        5         7

Mit dem Pandas-Paket kann über dieses Python-Programm eine Array-Datenstruktur namens DataFrame generiert werden. Die spezifischen Dimensionen umfassen vier verschiedene Spalten: Assists, Rebounds, Punkte und Bewertungen. Die Bibliothek wird am Anfang des Codes importiert und wird danach „pd“ genannt, um die Komplexität zu reduzieren. Ein DataFrame wird schließlich erstellt, indem die Methode pd.DataFrame() in der zweiten Codezeile ausgeführt wird.

Verwenden Sie die print()-Methode in der dritten Codezeile, um den DataFrame auf der Konsole zu drucken. Die Werte jeder Spalte bilden die Definition der Liste und dienen als Schlüssel und Werte für die Wörterbucheingabefunktion. Informationen zu jedem Spieler werden in einem Tabellenformat angezeigt, wobei die Statistiken einschließlich Punkte, Assists und Rebounds in Spalten angeordnet sind, wobei jede Zeile einen Spieler darstellt.

Fazit

Zusammenfassend spricht man von Multikollinearität, wenn zwei oder mehr Prädiktorvariablen in einem Modell stark miteinander korrelieren. Diese Situation kann die Interpretation von Modellergebnissen erschweren. In diesem Fall ist es schwierig zu bestimmen, wie sich jede einzelne Prädiktorvariable auf die Ergebnisvariable auswirkt.

Das obige ist der detaillierte Inhalt vonErkennen und Behandeln von Multikollinearitätsproblemen bei der Regression mit Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen