Пока я работал над проблемой бинарной классификации с использованием 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);