我是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模型,他们如何进行交叉验证测试?我错过了什么?请帮助并非常感谢
答案 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?