Pages

Saturday 11 December 2021

Splitting dataset dan k-fold cross validation



Tantangan utama dalam merancang model pembelajaran mesin adalah membuatnya bekerja secara akurat pada data yang tidak terlihat. Untuk mengetahui apakah model yang dirancang berfungsi dengan baik atau tidak, kita harus mengujinya terhadap titik-titik data yang tidak ada selama pelatihan model. Titik data ini akan melayani tujuan data yang tidak terlihat untuk model, dan menjadi mudah untuk mengevaluasi akurasi model. Salah satu teknik terbaik untuk memeriksa efektivitas model pembelajaran mesin adalah teknik validasi silang yang dapat dengan mudah diimplementasikan dengan menggunakan bahasa pemrograman R.Dalam hal ini, sebagian dari kumpulan data dicadangkan yang tidak akan digunakan dalam pelatihan model. Setelah model siap, kumpulan data yang dicadangkan itu digunakan untuk tujuan pengujian. Nilai variabel dependen diprediksi selama fase pengujian dan akurasi model dihitung berdasarkan kesalahan prediksi yaitu, perbedaan nilai aktual dan nilai prediksi variabel dependen. Ada beberapa metrik statistik yang digunakan untuk mengevaluasi keakuratan model regresi:

  1. Root Mean Squared Error (RMSE) : Seperti namanya, ini adalah akar kuadrat dari perbedaan kuadrat rata-rata antara nilai aktual dan nilai prediksi dari variabel target. Ini memberikan rata-rata kesalahan prediksi yang dibuat oleh model, sehingga menurunkan nilai RMSE untuk meningkatkan akurasi model.
  2. Mean Absolute Error (MAE): Metrik ini memberikan perbedaan mutlak antara nilai aktual dan nilai yang diprediksi oleh model untuk variabel target. Jika nilai outlier tidak banyak berhubungan dengan akurasi model, maka MAE dapat digunakan untuk mengevaluasi kinerja model. Nilainya harus lebih kecil untuk membuat model yang lebih baik.
  3. 2 Error: Nilai metrik R-squared memberikan gambaran tentang seberapa besar persentase varians dalam variabel dependen dijelaskan secara kolektif oleh variabel independen. Dengan kata lain, mencerminkan kekuatan hubungan antara variabel target dan model pada skala 0 – 100%. Jadi, model yang lebih baik harus memiliki nilai R-kuadrat yang tinggi.

Jenis Cross-Validasi


Selama proses mempartisi dataset lengkap ke dalam set pelatihan dan set validasi, ada kemungkinan kehilangan beberapa poin data penting dan krusial untuk tujuan pelatihan. Karena data tersebut tidak termasuk dalam set pelatihan, model tidak memiliki kesempatan untuk mendeteksi beberapa pola. Situasi ini dapat menyebabkan overfitting atau underfitting pada model. Untuk menghindari hal ini, ada berbagai jenis teknik validasi silang yang menjamin pengambilan sampel acak dari kumpulan data pelatihan dan validasi dan memaksimalkan keakuratan model. Beberapa teknik validasi silang yang paling populer adalah

  • Validation Set Approach
  • Leave one out cross-validation(LOOCV)
  • K-fold cross-Validation
  • Repeated K-fold cross-validation

Memuat Dataset

Untuk mengimplementasikan regresi linier, kita menggunakan dataset pemasaran (marketing) yang merupakan dataset bawaan dalam bahasa pemrograman R. Di bawah ini adalah kode untuk mengimpor dataset ini ke lingkungan pemrograman R Anda. 

# loading required packages
 
# package to perform data manipulation
# and visualization
library(tidyverse)
 
# package to compute
# cross - validation methods
library(caret)
 
# installing package to
# import desired dataset
install.packages("datarium")
 
# loading the dataset
data("marketing", package = "datarium")
 
# inspecting the dataset
head(marketing)

Output:

youtube facebook newspaper sales
1  276.12    45.36     83.04 26.52
2   53.40    47.16     54.12 12.48
3   20.64    55.08     83.16 11.16
4  181.80    49.56     70.20 22.20
5  216.96    12.96     70.08 15.48
6   10.44    58.68     90.00  8.64



Validation Set Approach (data split)

Dalam metode ini, dataset dibagi secara acak menjadi training dan testing set. Langkah-langkah berikut dilakukan untuk menerapkan teknik ini:

  1. Pengambilan sampel acak dari kumpulan data
  2. Model dilatih pada kumpulan data pelatihan
  3. Model yang dihasilkan diterapkan pada kumpulan data pengujian
  4. Hitung kesalahan prediksi dengan menggunakan metrik kinerja model

Di bawah ini adalah implementasi dari metode ini:


# R program to implement
# validation set approach
 
# setting seed to generate a
# reproducible random sampling
set.seed(123)
 
# creating training data as 80% of the dataset
random_sample <- createDataPartition(marketing $ sales,
                                p = 0.8, list = FALSE)
 
# generating training dataset
# from the random_sample
training_dataset  <- marketing[random_sample, ]
 
# generating testing dataset
# from rows which are not
# included in random_sample
testing_dataset <- marketing[-random_sample, ]
 
# Building the model
 
# training the model by assigning sales column
# as target variable and rest other columns
# as independent variables
model <- lm(sales ~., data = training_dataset)
 
# predicting the target variable
predictions <- predict(model, testing_dataset)
 
# computing model performance metrics
data.frame( R2 = R2(predictions, testing_dataset $ sales),
            RMSE = RMSE(predictions, testing_dataset $ sales),
            MAE = MAE(predictions, testing_dataset $ sales))


Output:

       R2 RMSE MAE
1 0.9049049 1.965508 1.433609

Keuntungan:

  • Salah satu teknik paling dasar dan sederhana untuk menemukan model.
  • Tidak ada langkah yang rumit untuk implementasi.

kekurangan:

  • Prediksi yang dilakukan oleh model sangat penting pada subset observasi yang digunakan untuk pelatihan dan validasi.
  • Menggunakan hanya satu subset data untuk tujuan pelatihan dapat membuat model menjadi bias.

Leave One Out Cross-Validation (LOOCV)

Metode ini juga membagi kumpulan data menjadi 2 bagian tetapi mengatasi pendekatan kumpulan Validasi. LOOCV melakukan validasi silang dengan cara sebagai berikut:

  1. Model latih pada titik data N-1
  2. Menguji model terhadap satu titik data yang tersisa di langkah sebelumnya
  3. hitung kesalahan prediksi
  4. Ulangi 3 langkah di atas hingga model tidak dilatih dan diuji pada semua titik data
  5. Hasilkan kesalahan prediksi keseluruhan dengan mengambil rata-rata kesalahan prediksi dalam setiap kasus

Di bawah ini adalah implementasi dari metode ini:


# R program to implement
# Leave one out cross validation
 
# defining training control
# as Leave One Out Cross Validation
train_control <- trainControl(method = "LOOCV")
 
# training the model by assigning sales column
# as target variable and rest other column
# as independent variable
model <- train(sales ~., data = marketing,
               method = "lm",
               trControl = train_control)
 
# printing model performance metrics
# along with other details
print(model)

Output: 

Linear Regression 

200 samples
  3 predictor

No pre-processing
Resampling: Leave-One-Out Cross-Validation 
Summary of sample sizes: 199, 199, 199, 199, 199, 199, ... 
Resampling results:

  RMSE      Rsquared   MAE     
  2.059984  0.8912074  1.539441

Tuning parameter 'intercept' was held constant at a value of TRUE

Kekurangan:

  • Melatih model N kali menyebabkan waktu komputasi yang mahal jika kumpulan datanya besar.


K-fold Cross-Validation


Teknik validasi silang ini membagi data menjadi K subset (lipatan) dengan ukuran yang hampir sama. Dari lipatan K ini, satu subset digunakan sebagai set validasi, dan sisanya terlibat dalam pelatihan model. Berikut ini adalah prosedur kerja lengkap dari metode ini:

  1. Pisahkan dataset menjadi subset K secara acak
  2. Gunakan subset K-1 untuk melatih model
  3. Uji model terhadap satu bagian yang tersisa di langkah sebelumnya
  4. langkah di atas untuk K kali yaitu, sampai model belum diuji dan diuji pada semua himpunan bagian
  5. Hasilkan kesalahan prediksi total dengan mengambil rata-rata kesalahan prediksi dalam setiap kasus

Di bawah ini adalah implementasi dari metode ini:

# R program to implement
# K-fold cross-validation
 
# setting seed to generate a
# reproducible random sampling
set.seed(125)
 
# defining training control
# as cross-validation and
# value of K equal to 10
train_control <- trainControl(method = "cv",
                              number = 10)
 
# training the model by assigning sales column
# as target variable and rest other column
# as independent variable
model <- train(sales ~., data = marketing,
               method = "lm",
               trControl = train_control)
 
# printing model performance metrics
# along with other details
print(model)

Output:

Linear Regression 

200 samples
  3 predictor

No pre-processing
Resampling: Cross-Validated (10 fold) 
Summary of sample sizes: 181, 180, 180, 179, 180, 180, ... 
Resampling results:

  RMSE      Rsquared   MAE     
  2.027409  0.9041909  1.539866

Tuning parameter 'intercept' was held constant at a value of TRUE

Keuntungan:

  • Kecepatan komputasi yang cepat.
  • Metode yang sangat efektif untuk memperkirakan perkiraan dan akurasi suatu model.

kekurangan:

  • Nilai K yang lebih rendah mengarah ke model yang bias dan K yang lebih tinggi dapat menyebabkan variabilitas dalam metrik kinerja model. Jadi, sangat penting untuk menggunakan nilai K yang benar untuk model (umumnya K = 5 dan K = 10 yang diinginkan).

Repeated K-fold cross-validation:

Seperti namanya, dalam metode ini validasi silang K-fold diulang beberapa kali. Di bawah ini adalah implementasi dari metode ini:

# R program to implement
# repeated K-fold cross-validation
 
# setting seed to generate a
# reproducible random sampling
set.seed(125)
 
# defining training control as
# repeated cross-validation and
# value of K is 10 and repetition is 3 times
train_control <- trainControl(method = "repeatedcv",
                            number = 10, repeats = 3)
 
# training the model by assigning sales column
# as target variable and rest other column
# as independent variable
model <- train(sales ~., data = marketing,
               method = "lm",
               trControl = train_control)
 
# printing model performance metrics
# along with other details
print(model)

Output:

Linear Regression 

200 samples
  3 predictor

No pre-processing
Resampling: Cross-Validated (10 fold, repeated 3 times) 
Summary of sample sizes: 181, 180, 180, 179, 180, 180, ... 
Resampling results:

  RMSE      Rsquared   MAE     
  2.020061  0.9038559  1.541517

Tuning parameter 'intercept' was held constant at a value of TRUE

Keuntungan:

  • Dalam setiap pengulangan, sampel data dikocok yang menghasilkan pengembangan pemisahan data sampel yang berbeda.

Kekurangan:

  • Dengan setiap pengulangan, algoritma harus melatih model dari awal yang berarti waktu komputasi untuk mengevaluasi model meningkat seiring dengan waktu pengulangan.

Catatan: Teknik validasi silang (cross-validation) yang paling disukai adalah repeated K-fold cross-validation untuk model pembelajaran mesin regresi dan klasifikasi.

Splitting dataset dan k-fold cross validation

Tantangan utama dalam merancang model pembelajaran mesin adalah membuatnya bekerja secara akurat pada data yang tidak terlihat. Untuk menget...