методы перекрестной проверки в Matlab - PullRequest
0 голосов
/ 22 марта 2019

Пока я работал над проблемой бинарной классификации с использованием SVM, я нашел два способа перекрестной проверки, и я не знаю, какой из них лучше всего работает?

первый способ с использованием crossvalind и цикл:

k = 10;
cvFolds = crossvalind('Kfold', data_lables, k);   %# get indices of 10-fold
cp = classperf(data_lables);  

for i = 1:k                                  %# for each fold
   testIdx = (cvFolds == i);                %# get indices of test instances
   trainIdx = ~testIdx;                     %# get indices training instances

   %# train an SVM model over training instances
   X= features(trainIdx,:);
   Y = data_lables(trainIdx);
   svmModel = fitcsvm(X,Y,'Standardize',true,'KernelFunction','RBF','KernelScale','auto');

   %# test using test instances
   Z = features(testIdx,:);
   pred = predict(svmModel,Z);

   %# evaluate and update performance object
   cp = classperf(cp, pred, testIdx);

end

В то время как другой, используя cvpartition

X =Data_Features;
Y = Data_Labels;

%randomize
rand_num = randperm(100);

x_train = X(rand_num(1:80), :);
y_train = Y(rand_num(1:80), :);

x_test = X(rand_num(81: end),:);
y_test = Y(rand_num(81: end),:);

c= cvpartition(y_train, 'k', 10 );

%train SVM
svmModel = fitcsvm(X,Y,'Standardize',true,'KernelFunction','RBF','KernelScale','auto');

pre = predict(svmmodel,xtest);
...