Validasi silang k-fold dengan python (langkah demi langkah)
Untuk mengevaluasi performa suatu model pada kumpulan data, kita perlu mengukur seberapa cocok prediksi yang dibuat oleh model tersebut dengan data yang diamati.
Metode yang umum digunakan untuk melakukan hal ini dikenal sebagai k-fold cross-validation , yang menggunakan pendekatan berikut:
1. Bagi kumpulan data secara acak menjadi k kelompok, atau “lipatan”, yang ukurannya kira-kira sama.
2. Pilih salah satu lipatan sebagai set penahan. Sesuaikan template dengan sisa k-1 lipatan. Hitung uji MSE pada pengamatan pada lapisan yang dikencangkan.
3. Ulangi proses ini sebanyak k kali, setiap kali menggunakan himpunan berbeda sebagai himpunan pengecualian.
4. Hitung UMK uji keseluruhan sebagai rata-rata UMK uji k .
Tutorial ini memberikan contoh langkah demi langkah tentang cara melakukan validasi silang k-fold untuk model tertentu dengan Python.
Langkah 1: Muat Perpustakaan yang Diperlukan
Pertama, kita akan memuat fungsi dan perpustakaan yang diperlukan untuk contoh ini:
from sklearn. model_selection import train_test_split
from sklearn. model_selection import KFold
from sklearn. model_selection import cross_val_score
from sklearn. linear_model import LinearRegression
from numpy import means
from numpy import absolute
from numpy import sqrt
import pandas as pd
Langkah 2: Buat datanya
Selanjutnya, kita akan membuat pandas DataFrame yang berisi dua variabel prediktor, x1 dan x2 , dan satu variabel respons y.
df = pd.DataFrame({' y ': [6, 8, 12, 14, 14, 15, 17, 22, 24, 23],
' x1 ': [2, 5, 4, 3, 4, 6, 7, 5, 8, 9],
' x2 ': [14, 12, 12, 13, 7, 8, 7, 4, 6, 5]})
Langkah 3: Lakukan Validasi Silang K-Fold
Selanjutnya, kita akan menyesuaikan model regresi linier berganda ke kumpulan data dan melakukan LOOCV untuk mengevaluasi performa model.
#define predictor and response variables
X = df[[' x1 ', ' x2 ']]
y = df[' y ']
#define cross-validation method to use
cv = KFold ( n_splits = 10 , random_state = 1 , shuffle = True )
#build multiple linear regression model
model = LinearRegression()
#use k-fold CV to evaluate model
scores = cross_val_score(model, X, y, scoring=' neg_mean_absolute_error ',
cv=cv, n_jobs=-1)
#view mean absolute error
mean(absolute(scores))
3.6141267491803646
Dari hasilnya terlihat mean absolute error (MAE) adalah 3,614 . Artinya, rata-rata kesalahan absolut antara prediksi model dan data pengamatan sebenarnya adalah 3,614.
Secara umum, semakin rendah MAE, semakin baik suatu model mampu memprediksi observasi aktual.
Metrik lain yang umum digunakan untuk mengevaluasi kinerja model adalah root mean square error (RMSE). Kode berikut menunjukkan cara menghitung metrik ini menggunakan LOOCV:
#define predictor and response variables
X = df[[' x1 ', ' x2 ']]
y = df[' y ']
#define cross-validation method to use
cv = KFold ( n_splits = 5 , random_state = 1 , shuffle = True )
#build multiple linear regression model
model = LinearRegression()
#use LOOCV to evaluate model
scores = cross_val_score(model, X, y, scoring=' neg_mean_squared_error ',
cv=cv, n_jobs=-1)
#view RMSE
sqrt(mean(absolute(scores)))
4.284373111711816
Dari hasilnya terlihat bahwa root mean square error (RMSE) adalah 4.284 .
Semakin rendah RMSE, semakin baik suatu model mampu memprediksi observasi aktual.
Dalam praktiknya, kami biasanya menyesuaikan beberapa model berbeda dan membandingkan RMSE atau MAE masing-masing model untuk memutuskan model mana yang menghasilkan tingkat kesalahan pengujian terendah dan oleh karena itu merupakan model terbaik untuk digunakan.
Perhatikan juga bahwa dalam contoh ini kami memilih untuk menggunakan k=5 lipatan, namun Anda dapat memilih jumlah lipatan berapa pun yang Anda inginkan.
Dalam praktiknya, kami biasanya memilih antara 5 dan 10 lapis, karena ini terbukti merupakan jumlah lapis optimal yang menghasilkan tingkat kesalahan pengujian yang dapat diandalkan.
Anda dapat menemukan dokumentasi lengkap untuk fungsi KFold() sklearn di sini .
Sumber daya tambahan
Pengantar Validasi Silang K-Fold
Panduan Lengkap Regresi Linier dengan Python
Validasi Silang Tinggalkan Satu Keluar dengan Python