Jumat, 17 Mei 2019

Matlab - membuat KFold pada dataset



Kfold Validation banyak digunakan untuk menguji kestabilan sebuah algoritma terhadap beberapa kasus yang bersifat klasifikasi yaitu dengan melipat data sebanyak K dan mengulangi (men-iterasi) experimennya sebanyak K juga. Seperti ilustrasi berikut




Biasanya proporsi yang digunakan 80% training  dan 20% testing. Misalkan kita mempunyai dataset yaitu x dengan jumlah data sebesar 10, maka seperti berikut gambarannya.


function [test_data,train_data] = KFoldCrossValidation(data,fold_size)
 
    % code which is used to shuffle all the rows of the data set
    sort_array = randperm(size(data,1));
    for i = 1: size(data,1)
        randomized_data(i,:) = data(sort_array(i),:);
    end
    % code to divide the dataset int k sub data sets.
    no_of_rows = size(data,1);
 
    test_data{fold_size,1} = [];
    train_data{fold_size,1} = [];
 
  block = floor(no_of_rows/fold_size);
 
  test_data{1} = randomized_data(1:block,:);
  train_data{1} = randomized_data(block+1:end,:);
 
  for f = 2:fold_size
      test_data{f} = randomized_data((f-1)*block+1:(f)*block,:);
      train_data{f} = [randomized_data(1:(f-1)*block,:); randomized_data(f*block+1:end, :)];
  end
end



Penggunaan


close all;clear all;clc;
% Reading data from text files;
data = csvread('hand_26.txt');
data =data';
No_of_folds = 5;
[test_data,train_data] = KFoldCrossValidation(data,No_of_folds);
 
KNN = zeros(No_of_folds,1);
for i =1 : No_of_folds
    knn_result = Knn(train_data{i},test_data{i},3);
    KNN(i) = Accuracy(knn_result);
 
end
Iteration = 1 : No_of_folds;
Iteration = Iteration';
Accuracy_Iteration_Level = table(Iteration , KNN)


Hasilnya


    Iteration      KNN  
    _________    _______

        1        0.74752
        2        0.74257
        3        0.77723
        4        0.74257
        5        0.71782


Silahkan untuk kunjungi link berikut
Ref:
https://github.com/sBavisetti/K-fold-Cross-Validation




Tidak ada komentar: