我使用svmtrain
来训练我的数据集,并svmclassify
来预测测试集。我想看一下优化过程,错误与时期(迭代)的关系。我查看了用法和代码,发现没有关于此类问题的信息。我唯一能得到的就是控制最大迭代次数。
如何在使用SVM分类时在matlab中获取错误与时期(迭代)的关系图?
这是我修改过的代码。但不是我想要的那个,我想在每个时代都有错误。以前有人做过这样的分析吗?谢谢。 最好的问候!
%# load dataset
load fisheriris %# load iris dataset
Groups = ismember(species,'setosa'); %# create a two-class problem
MaxIterValue = 210; %# maximum iterations
ErrVsIter = zeros(MaxIterValue, 2); %# store error data
%# Control maximum iterations
for N = 200: MaxIterValue
% options.MaxIter = N;
option = statset('MaxIter', N);
%# 5-fold Cross-validation
k = 5;
cvFolds = crossvalind('Kfold', Groups, k); %# get indices of 5-fold CV
cp = classperf(Groups); %# init performance tracker
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
svmModel = svmtrain(meas(trainIdx,:), Groups(trainIdx), ...
'options',option, 'Autoscale',true, 'Showplot',false, 'Method','QP', ...
'BoxConstraint',2e-1, 'kernel_function','linear');
%#plotperform(svmModel);
%# test using test instances
pred = svmclassify(svmModel, meas(testIdx,:), 'Showplot',false);
%# evaluate and update performance object
cp = classperf(cp, pred, testIdx);
end
%# get error rate
ErrVsIter(N, 1) = N;
ErrVsIter(N, 2) = cp.ErrorRate;
end
plot(ErrVsIter(1:MaxIterValue,1),ErrVsIter(1:MaxIterValue,2));
答案 0 :(得分:0)
你做的都是正确的,问题是 SVM 每次都找到解决方案!因此,每个纪元都有 CorrectRate = 1 ,请尝试在代码中输入 cp.CorrectRate 进行查看。
问题出在下面一行:
Groups = ismember(species,'setosa');
数据非常简单, SVM 可以解决。
并将其绘制成如下:
plot(ErrVsIter(200:MaxIterValue,1),ErrVsIter(200:MaxIterValue,2));