Rumah > pembangunan bahagian belakang > Tutorial Python > Mengesan dan mengendalikan isu multikolineariti dalam regresi menggunakan Python

Mengesan dan mengendalikan isu multikolineariti dalam regresi menggunakan Python

王林
Lepaskan: 2023-08-18 15:05:20
ke hadapan
1745 orang telah melayarinya

Multikolineariti merujuk kepada tahap saling korelasi yang tinggi antara pembolehubah bebas dalam model regresi. Ini boleh membawa kepada pekali yang tidak tepat dalam model, menjadikannya sukar untuk menilai kesan pembolehubah bebas yang berbeza ke atas pembolehubah bersandar. Dalam kes ini, adalah perlu untuk mengenal pasti dan menangani multikolineariti model regresi dan menggabungkan prosedur yang berbeza dan outputnya, yang akan kami jelaskan langkah demi langkah.

Kaedah

  • Kesan multikolineariti

  • Mengendalikan multikolineariti

Algoritma

Langkah 1 − Import perpustakaan yang diperlukan

Langkah 2 - Muatkan data ke dalam Bingkai Data panda

Langkah 3 - Buat matriks korelasi menggunakan peramal

Langkah 4 − Buat peta haba bagi matriks korelasi untuk menggambarkan korelasi

Langkah 5 - Kira faktor inflasi varians untuk setiap peramal keluaran

Langkah 6 − Tentukan peramal

Langkah 7 - Peramal harus dialih keluar

Langkah 8 - Jalankan semula model regresi

Langkah 9 - Semak semula.

Kaedah 1: Mengesan multikolineariti

Gunakan fungsi corr() pakej panda untuk menentukan matriks korelasi pembolehubah bebas. Gunakan perpustakaan seaborn untuk menjana peta haba untuk memaparkan matriks korelasi. Gunakan fungsi varians_inflation_factor() bagi pakej model statistik untuk menentukan faktor inflasi varians (VIF) bagi setiap pembolehubah bebas. VIF yang lebih besar daripada 5 atau 10 menunjukkan multikolineariti tinggi.

Terjemahan bahasa Cina bagi

Contoh-1

ialah:

Contoh-1

Dalam kod ini, setelah data dimuatkan ke dalam Pandas DataFrame, pembolehubah peramal X dan pembolehubah bersandar y dipisahkan. Untuk mengira VIF bagi setiap pembolehubah peramal, kami menggunakan fungsi variation_inflation_factor() daripada pakej statsmodels. Dalam langkah terakhir proses, kami menyimpan nilai VIF bersama-sama dengan nama peramal dalam Pandas DataFrame serba baharu dan kemudian memaparkan hasilnya. Menggunakan kod ini, jadual yang mengandungi nama pembolehubah dan nilai VIF untuk setiap pembolehubah peramal akan dijana. Apabila pembolehubah mempunyai nilai VIF yang tinggi (melebihi 5 atau 10, bergantung pada keadaan), adalah penting untuk menganalisis pembolehubah itu dengan lebih lanjut.

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)
Salin selepas log masuk

Output

VIF  Factor      Features 
0    3.068988    Independent_var1
1    3.870567    Independent_var2
2    3.843753    Independent_var3
Salin selepas log masuk

Kaedah 2: Menangani multikolineariti

Kecualikan satu atau lebih pembolehubah bebas berkorelasi kuat daripada model. Analisis komponen utama (PCA) boleh digunakan untuk menggabungkan pembolehubah bebas yang sangat berkorelasi menjadi pembolehubah tunggal. Kaedah penyelarasan seperti regresi rabung atau regresi laso boleh digunakan untuk mengurangkan kesan pembolehubah bebas berkorelasi kuat ke atas pekali model. Menggunakan pendekatan di atas, kod contoh berikut boleh digunakan untuk mengenal pasti dan menyelesaikan isu multikolineariti −

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)
Salin selepas log masuk

Fungsi ini tidak menjana sebarang output lain selain daripada mengeluarkan nilai VIF setiap pembolehubah bebas. Menjalankan kod ini hanya akan mengeluarkan nilai VIF untuk setiap pembolehubah bebas tiada graf atau prestasi model akan dicetak.

Dalam contoh ini, data mula-mula dimuatkan ke dalam DataFrame panda, kemudian matriks korelasi dikira, dan akhirnya peta haba dicipta untuk memaparkan matriks korelasi. Kami kemudian menghapuskan faktor bebas dengan korelasi yang tinggi selepas menguji VIF setiap pembolehubah bebas. Kami menggunakan regresi rabung untuk mengurangkan kesan pembolehubah bebas berkorelasi tinggi ke atas pekali model dan menggunakan analisis komponen utama untuk menggabungkan pembolehubah bebas berkorelasi tinggi menjadi satu pembolehubah.

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)
Salin selepas log masuk

Output

   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
Salin selepas log masuk

Menggunakan pakej Pandas, struktur data tatasusunan yang dipanggil DataFrame boleh dijana melalui program Python ini. Dimensi khusus termasuk empat lajur berbeza: bantuan, lantunan, mata dan penilaian. Perpustakaan diimport pada permulaan kod dan dipanggil "pd" selepas itu untuk mengurangkan kerumitan. DataFrame akhirnya dibina dengan melaksanakan kaedah pd.DataFrame() dalam baris kedua kod.

Gunakan kaedah print() pada baris ketiga kod untuk mencetak DataFrame ke konsol. Nilai setiap lajur membentuk definisi senarai dan berfungsi sebagai kunci dan nilai untuk fungsi input kamus. Maklumat untuk setiap pemain dipaparkan dalam format jadual, dengan statistik termasuk mata, bantuan dan lantunan disusun dalam lajur, dengan setiap baris mewakili pemain.

Kesimpulan

Ringkasnya, apabila dua atau lebih pembolehubah peramal dalam model berkorelasi kuat antara satu sama lain, ini dipanggil multikolineariti. Keadaan ini boleh menyukarkan pentafsiran hasil model. Dalam kes ini, sukar untuk menentukan bagaimana setiap pembolehubah peramal unik mempengaruhi pembolehubah hasil.

Atas ialah kandungan terperinci Mengesan dan mengendalikan isu multikolineariti dalam regresi menggunakan Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan