Regresi ridge dengan python (langkah demi langkah)


Regresi ridge adalah metode yang dapat kita gunakan untuk menyesuaikan model regresi ketika terdapat multikolinearitas dalam data.

Singkatnya, regresi kuadrat terkecil berupaya menemukan estimasi koefisien yang meminimalkan jumlah sisa kuadrat (RSS):

RSS = Σ(y saya – ŷ saya )2

Emas:

  • Σ : Simbol Yunani yang berarti jumlah
  • y i : nilai respon sebenarnya untuk observasi ke-i
  • ŷ i : Nilai respons yang diprediksi berdasarkan model regresi linier berganda

Sebaliknya, regresi ridge berupaya meminimalkan hal-hal berikut:

RSS + λΣβ j 2

dimana j beralih dari 1 ke p variabel prediktor dan λ ≥ 0.

Suku kedua dalam persamaan ini dikenal sebagai penalti penarikan . Dalam regresi ridge, kami memilih nilai λ yang menghasilkan uji MSE (mean square error) serendah mungkin.

Tutorial ini memberikan contoh langkah demi langkah tentang cara melakukan regresi ridge dengan Python.

Langkah 1: Impor paket yang diperlukan

Pertama, kita akan mengimpor paket yang diperlukan untuk melakukan regresi ridge dengan Python:

 import pandas as pd
from numpy import arange
from sklearn. linear_model import Ridge
from sklearn. linear_model import RidgeCV
from sklearn. model_selection import RepeatedKFold

Langkah 2: Muat data

Untuk contoh ini, kita akan menggunakan kumpulan data bernama mtcars , yang berisi informasi tentang 33 mobil berbeda. Kita akan menggunakan hp sebagai variabel respon dan variabel berikut sebagai prediktor:

  • mpg
  • berat
  • kotoran
  • qdetik

Kode berikut menunjukkan cara memuat dan menampilkan kumpulan data ini:

 #define URL where data is located
url = "https://raw.githubusercontent.com/Statorials/Python-Guides/main/mtcars.csv"

#read in data
data_full = pd. read_csv (url)

#select subset of data
data = data_full[["mpg", "wt", "drat", "qsec", "hp"]]

#view first six rows of data
data[0:6]

	mpg wt drat qsec hp
0 21.0 2.620 3.90 16.46 110
1 21.0 2.875 3.90 17.02 110
2 22.8 2.320 3.85 18.61 93
3 21.4 3.215 3.08 19.44 110
4 18.7 3,440 3.15 17.02 175
5 18.1 3.460 2.76 20.22 105

Langkah 3: Sesuaikan Model Regresi Ridge

Selanjutnya, kita akan menggunakan fungsi RidgeCV() sklearn agar sesuai dengan model regresi ridge dan menggunakan fungsi RepeatedKFold() untuk melakukan validasi silang k-fold guna menemukan nilai alpha optimal yang akan digunakan untuk istilah penalti.

Catatan: Istilah “alpha” digunakan sebagai pengganti “lambda” di Python.

Untuk contoh ini, kita akan memilih k = 10 kali lipat dan mengulangi proses validasi silang sebanyak 3 kali.

Perhatikan juga bahwa RidgeCV() hanya menguji nilai alfa 0,1, 1, dan 10 secara default. Namun, kita dapat mengatur rentang alpha kita sendiri dari 0 hingga 1 dengan kelipatan 0,01:

 #define predictor and response variables
X = data[["mpg", "wt", "drat", "qsec"]]
y = data["hp"]

#define cross-validation method to evaluate model
cv = RepeatedKFold(n_splits= 10 , n_repeats= 3 , random_state= 1 )

#define model
model = RidgeCV(alphas= arange (0, 1, 0.01), cv=cv, scoring=' neg_mean_absolute_error ')

#fit model
model. fit (x,y)

#display lambda that produced the lowest test MSE
print( model.alpha_ )

0.99

Nilai lambda yang meminimalkan MSE pengujian tersebut ternyata 0,99 .

Langkah 4: Gunakan model untuk membuat prediksi

Terakhir, kita dapat menggunakan model regresi ridge akhir untuk membuat prediksi tentang observasi baru. Misalnya, kode berikut menunjukkan cara mendefinisikan mobil baru dengan atribut berikut:

  • mpg: 24
  • berat: 2,5
  • harga: 3,5
  • qdetik: 18.5

Kode berikut menunjukkan cara menggunakan model regresi ridge yang dipasang untuk memprediksi nilai hp dari observasi baru ini:

 #define new observation
new = [24, 2.5, 3.5, 18.5]

#predict hp value using ridge regression model
model. predict ([new])

array([104.16398018])

Berdasarkan nilai yang dimasukkan, model memperkirakan mobil ini akan memiliki nilai hp sebesar 104.16398018 .

Anda dapat menemukan kode Python lengkap yang digunakan dalam contoh ini di sini .

Tambahkan komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *