Menggunakan Function KFold di Matlab

By | January 15, 2021
Print Friendly, PDF & Email
2,005 Views

Sinopsis

Cross Validation merupakan salah satu teknik untuk menilai/memvalidasi keakuratan sebuah model yang dibangun berdasarkan dataset tertentu, yang melibatkan proses K-buah partisi secara acak. Kemudian dilakukan sejumlah K-kali eksperimen, dimana masing-masing eksperimen menggunakan data partisi ke-K sebagai data testing dan memanfaatkan sisa partisi lainnya sebagai data training.

Kelebihan dari metode ini adalah tidak adanya masalah dalam pembagian data. Setiap data akan menjadi test set sebanyak satu kali dan akan menjadi training set sebanyak K-1 kali. Kekurangan dari metode ini adalah algoritma pembelajaran harus dilakukan sebanyak K kali yang berarti menggunakan K kali waktu komputasi. Berikut contoh Kfold sebanyak Kfold-3.

Arti penting dari Kfold adalah semua dataset akan memiliki peluang yang sama sebagai anggota data training maupun data testing.

Pada pembahasan sebelumnya kalian bisa menggunakan kode yang ditulis sendiri untuk KFOLD, nah kali ini kalian bisa menggunakan function built in nya Matlab dalam menerapakan KFOLD validation. Penggunaan KFold validation telah banyak digunakan untuk menguji proses pelatihan. Adapun secara umum ilustrasi KFold akan membagi 80% sebagai data latih dan 20% sebagai data uji, misalkan saja kita punya 12 data dengan jumlah KFOLD sebanyak 4 irisan, maka gunakan perintah berikut di Matlab

n = 1:12;
c = cvpartition(n,'KFold',4);
display(c)

Kalian bisa melihat tampilan c berikut

c = 

K-fold cross validation partition
   NumObservations: 12
       NumTestSets: 4
         TrainSize: 9  9  9  9
          TestSize: 3  3  3  3

Artinya ada 4 fold yang masing2 terdiri dari 9 data latih dan 3 data uji. Maka untuk mengetahui index/no mana saja yang termasuk data latih dan uji, gunakan perintah berikut:

for i = 1:c.NumTestSets
    index_training = c.training(i);
    index_testing = c.test(i);
    disp(['Kfold ke ' num2str(i)])
    disp('index latih')
    disp(n(index_training))
    disp('index uji')
    disp(n(index_testing))
 
end

hasilnya

Kfold ke 1
index latih
     1     2     3     5     6     7     9    10    11

index uji
     4     8    12

Kfold ke 2
index latih
     2     3     4     6     7     8    10    11    12

index uji
     1     5     9

Kfold ke 3
index latih
     1     3     4     5     7     8     9    11    12

index uji
     2     6    10

Kfold ke 4
index latih
     1     2     4     5     6     8     9    10    12

index uji
     3     7    11

Kalian bisa lihat pada bahwa tiap KFold antara index data latih dan uji masing-masing tidak mempunyai index yang sama, pemilihan jumlah KFOLD sangat penting. Bila kita ubah KFOld 3 maka menjadi berikut hasilnya.

n = 1:12;
c = cvpartition(n,'KFold',3);

for i = 1:c.NumTestSets
    index_training = c.training(i);
    index_testing = c.test(i);
    disp(['Kfold ke ' num2str(i)])
    disp('index latih')
    disp(n(index_training))
    disp('index uji')
    disp(n(index_testing))
end

hasil

Kfold ke 1
index latih
     1     2     4     5     7     8    10    11

index uji
     3     6     9    12

Kfold ke 2
index latih
     2     3     5     6     8     9    11    12

index uji
     1     4     7    10

Kfold ke 3
index latih
     1     3     4     6     7     9    10    12

index uji
     2     5     8    11

Leave a Reply