Regresi lasso dengan python (langkah demi langkah)
Regresi laso 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 laso berupaya meminimalkan hal-hal berikut:
RSS + λΣ|β j |
dimana j beralih dari 1 ke p variabel prediktor dan λ ≥ 0.
Suku kedua dalam persamaan ini dikenal sebagai penalti penarikan . Dalam regresi laso, kami memilih nilai λ yang menghasilkan uji MSE (mean square error) serendah mungkin.
Tutorial ini memberikan contoh langkah demi langkah tentang cara melakukan regresi laso dengan Python.
Langkah 1: Impor paket yang diperlukan
Pertama, kita akan mengimpor paket yang diperlukan untuk melakukan regresi laso dengan Python:
import pandas as pd
from numpy import arange
from sklearn. linear_model import LassoCV
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 Lasso
Selanjutnya, kita akan menggunakan fungsi LassoCV() sklearn agar sesuai dengan model regresi laso dan menggunakan fungsi RepeatedKFold() untuk melakukan validasi silang k-fold guna menemukan nilai alfa 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 LassoCV() 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 = LassoCV(alphas= arange (0, 1, 0.01), cv=cv, n_jobs= -1 ) #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 laso final 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 laso 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 lasso regression model
model. predict ([new])
array([105.63442071])
Berdasarkan nilai yang dimasukkan, model memperkirakan mobil ini akan memiliki nilai hp sebesar 105.63442071 .
Anda dapat menemukan kode Python lengkap yang digunakan dalam contoh ini di sini .