Regresi linear murni menentukan bobotnya sepenuhnya dari data, sehingga pada data dengan banyak fitur atau banyak derau bobotnya mudah membengkak dan model kehilangan ketepatan pada data baru. Regularisasi (regularization), yaitu penambahan penalti terhadap besarnya bobot pada tujuan pelatihan, menahan gejala tersebut. Topik ini membahas Ridge dengan penalti L2, Lasso dengan penalti L1, pengaruh parameter alpha, serta perbandingan keduanya pada dataset diabetes melalui perulangan kecil atas beberapa nilai alpha.
Penalti L2 pada Ridge#
Ridge menambahkan penalti berupa kuadrat panjang vektor bobot ke dalam tujuan pelatihan. Tujuan pelatihannya menjadi:
Suku pertama mengukur ketepatan prediksi, sedangkan suku kedua menghukum bobot yang besar. Karena kuadratnya naik makin cepat untuk bobot besar, penalti ini mendorong seluruh bobot menyusut secara merata tanpa membuat bobot mana pun tepat nol. Efek yang dihasilkan disebut shrinkage, yaitu pengecilan bobot menuju nol, sehingga prediksi menjadi kurang peka terhadap perubahan kecil pada data latih. Parameter menetapkan kekuatan penalti, dengan mengembalikan Ridge menjadi regresi linear biasa.
Penalti L1 pada Lasso#
Lasso mengganti penalti kuadrat dengan penalti berupa jumlah nilai mutlak bobot. Tujuan pelatihannya menjadi:
Bentuk penalti ini mengubah perilaku hasilnya secara mendasar. Lasso dapat menurunkan bobot hingga tepat nol, sehingga fitur yang bersangkutan benar-benar dikeluarkan dari model. Sifat ini menjadikan Lasso alat seleksi fitur sekaligus model prediksi, yaitu daftar fitur yang dipertahankan dapat dibaca langsung dari koefisien yang tidak nol. Konsekuensinya, ketika banyak fitur saling berkorelasi kuat, Lasso cenderung memilih satu di antaranya dan membuang sisanya secara sembarangan, sedangkan Ridge membagi bobot ke seluruh fitur yang serupa itu.
Menala alpha pada dataset diabetes#
Program pertama membandingkan regresi linear biasa dengan Ridge pada empat nilai alpha. Metrik yang dibaca adalah MSE pada data uji dan panjang vektor koefisien yang dihitung dengan np.linalg.norm.
import numpy as np
from sklearn.datasets import load_diabetes
from sklearn.linear_model import LinearRegression, Ridge
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
data = load_diabetes()
X, y = data.data, data.target
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=42
)
linreg = LinearRegression().fit(X_train, y_train)
mse_lin = mean_squared_error(y_test, linreg.predict(X_test))
norm_lin = np.linalg.norm(linreg.coef_)
print(f"LinearRegression : MSE uji {mse_lin:.1f}, panjang koefisien {norm_lin:.1f}")
for alpha in (0.1, 1.0, 10.0, 100.0):
ridge = Ridge(alpha=alpha).fit(X_train, y_train)
mse = mean_squared_error(y_test, ridge.predict(X_test))
norm = np.linalg.norm(ridge.coef_)
print(f"Ridge alpha={alpha:<6}: MSE uji {mse:.1f}, panjang koefisien {norm:.1f}")LinearRegression : MSE uji 2848.3, panjang koefisien 1470.6
Ridge alpha=0.1 : MSE uji 2810.0, panjang koefisien 793.8
Ridge alpha=1.0 : MSE uji 3105.5, panjang koefisien 467.7
Ridge alpha=10.0 : MSE uji 4664.7, panjang koefisien 115.9
Ridge alpha=100.0 : MSE uji 5479.5, panjang koefisien 14.1Keluaran memperlihatkan peran alpha secara utuh. Alpha 0.1 memangkas panjang koefisien dari 1470.6 menjadi 793.8 dan turut memperbaiki MSE uji menjadi 2810.0, karena pengecilan bobot meniadakan sebagian derau yang dihafal regresi murni. Alpha yang makin besar membuat model makin kaku, yaitu bobotnya terhimpit sehingga prediksi mendekati konstanta dan MSE uji memburuk hingga 5479.5. Keadaan di antara keduanya menimbulkan kompromi bias dan variansi, yaitu penalti yang terlalu lemah kurang menahan, sedangkan penalti yang terlalu kuat menyembunyikan sinyal.
Program kedua mengulangi latihan yang sama dengan Lasso, dan jumlah koefisien nol menjadi fokus utamanya.
import numpy as np
from sklearn.datasets import load_diabetes
from sklearn.linear_model import Lasso
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
data = load_diabetes()
X, y = data.data, data.target
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.25, random_state=42
)
for alpha in (0.1, 1.0, 5.0, 10.0):
lasso = Lasso(alpha=alpha).fit(X_train, y_train)
n_nol = int(np.sum(lasso.coef_ == 0))
mse = mean_squared_error(y_test, lasso.predict(X_test))
print(f"alpha {alpha:>4}: koefisien nol {n_nol} dari 10, MSE uji {mse:.1f}")alpha 0.1: koefisien nol 3 dari 10, MSE uji 2753.9
alpha 1.0: koefisien nol 7 dari 10, MSE uji 3433.2
alpha 5.0: koefisien nol 10 dari 10, MSE uji 5607.2
alpha 10.0: koefisien nol 10 dari 10, MSE uji 5607.2Alpha 0.1 membuang tiga fitur sekaligus memberikan MSE uji terbaik pada latihan ini, yaitu 2753.9 yang lebih rendah daripada Ridge dan regresi murni. Alpha 1.0 membuang tujuh fitur dengan konsekuensi MSE yang naik. Alpha 5.0 dan 10.0 membuang seluruh sepuluh fitur, sehingga model hanya tersisa intersep dan prediksinya berupa rata-rata target pada data latih untuk semua pasien. Nilai MSE 5607.2 yang sama pada dua baris terakhir menegaskan keadaan itu, dan angka tersebut tidak berubah lagi karena model sudah tidak memperhatikan fitur apa pun.
Memilih antara Ridge dan Lasso#
Keduanya menahan kompleksitas, tetapi dengan karakter yang berbeda. Ridge lebih cocok apabila sebagian besar fitur berkontribusi kecil secara serentak atau antarfitur saling berkorelasi, karena penalti kuadrat membagi bobot secara merata tanpa membuang fitur. Lasso lebih cocok apabila jumlah fitur yang benar-benar berpengaruh diperkirakan sedikit dan model yang ringkas lebih diutamakan, karena koefisien nolnya menyederhanakan penjelasan. Keduanya membutuhkan fitur pada skala yang sebanding, karena penalti menghukum bobot tanpa melihat satuan fiturnya, sehingga standarisasi dari modul Praproses menjadi langkah wajib sebelum kedua model digunakan pada data nyata. Nilai alpha yang tepat selalu ditentukan dari data melalui penalaan, bukan dari kebiasaan, dan urutan besarnya biasanya ditelaah secara logaritmik seperti pada keluaran di atas.
Kesalahan umum#
Kesalahan pertama adalah menerapkan Ridge atau Lasso pada fitur yang skalanya timpang. Penalti menghukum besarnya bobot, sedangkan fitur berskala kecil membutuhkan bobot besar untuk memberi pengaruh yang sama, sehingga fitur tersebut terhukum berlebihan. Standarisasi fitur meniadakan perbedaan satuan sebelum penalti bekerja.
Kesalahan kedua adalah membaca koefisien nol Lasso sebagai bukti fitur tidak relevan secara umum. Pada fitur yang berkorelasi kuat, Lasso memilih salah satu secara sewenang-wenang, sehingga fitur yang dibuang dapat tetap bermakna. Kesimpulan seleksi fitur perlu ditelaah ulang pada pemecahan data yang berbeda.
Kesalahan ketiga adalah menyamakan perilaku kedua penalti pada batas ekstrem. Alpha nol mengembalikan keduanya menjadi regresi linear biasa, sedangkan alpha sangat besar menjadikan prediksi konstanta berupa rata-rata data latih pada kedua model. Kegunaan keduanya justru berada di wilayah alpha menengah yang harus ditala dari data.
Ringkasan#
- Ridge menambahkan penalti yang menyusutkan seluruh bobot secara merata tanpa membuatnya nol, sedangkan Lasso menambahkan penalti yang dapat membuat bobot tepat nol.
- Alpha menetapkan kekuatan penalti, dengan alpha nol mengembalikan regresi linear biasa dan alpha besar menjadikan model kaku hingga hanya memprediksi rata-rata data latih.
- Pada dataset diabetes, Ridge alpha 0.1 memperbaiki MSE uji dari 2848.3 menjadi 2810.0, sedangkan Lasso alpha 0.1 membuang tiga fitur sekaligus mencapai MSE 2753.9.
- Fitur wajib disetarakan skalanya sebelum dipenalti, dan alpha ditentukan melalui validasi atau cross-validation.
Referensi#
- 1.1. Linear Models — scikit-learn documentation — Mengulas Ridge dan Lasso beserta tujuan matematikanya dan peran parameter alpha.
- Ridge — scikit-learn documentation — Rujukan parameter dan atribut Ridge beserta contoh pemakaiannya.
- Lasso — scikit-learn documentation — Rujukan parameter dan atribut Lasso beserta catatan konvergensinya.
- Glossary of Common Terms — scikit-learn documentation — Definisi baku istilah seperti L1 dan L2 yang digunakan konsisten di dokumentasi.