我无法理解如何使用多类SVM进行k折交叉验证测试

时间:2015-02-01 00:58:06

标签: matlab validation svm cross-validation

我是matlab和SVM的新手,我正在从strach http://bioinformatics.oxfordjournals.org/content/19/13/1656.full.pdf再现这个实验

*在那里他们说“在SVM的训练中,我们使用一对一的方法 其他人,或者一个人与其他人一起“。确定有12个班级,所以他们产生了12个SVM。他们训练每个人的积极性与其他所有人。

*但随后他们说“通过5倍交叉验证测试检验预测性能”

我的noob问题是,他们怎么能在之后进行k-fold交叉验证!他们训练SVM。我认为(可能是错误的)当你进行k折交叉验证时,你从头开始构建一个新的svm。它们可能类似,但svm模型在每个循环中都是不同的。有k种不同的svm模型。但是,如果他们事先训练svm模型,他们如何进行交叉验证测试?我错过了什么?请帮助并非常感谢

1 个答案:

答案 0 :(得分:1)

首先,他们生成交叉验证的数据集。然后他们训练5个模型(每个折叠一个)并重复训练测试。您可以按如下方式执行此操作:

% I assume use of LIBSVM for svm training-testing in this code snippet
% Create a random data
data=1+2*randn(1000,10);
labels=randi(12,[1000,1]);

%do 5-fold cross-validation
ind=crossvalind('Kfold',labels,5);

for i=1:5
    % (4/5)^th random data for training
    trainingData=data(ind~=5,:); %notice ~=
    trainingLabels=labels(ind~=5); 

    % (1/5)^th random data for testing
    testingData=data(ind==5,:); %notice ==
    testingLabels=labels(ind==5); 

   % train svm
    model{i,1}=svmtrain(trainingLabels,trainingData);

   %test svm
   [predLabels{i,1},accuracy(i,1)]=svmpredict(testingLabels,testingData,model{i,1});
end

% I think this is what they mean when they say, we analyze the performance
% using 5 -fold cross validation

% following two things is what you will report
plot(accuracy);  %how accuracy varies over random selection of data
avgAccuracy=mean(accuracy); %what is the average accuracy over 5 runs?