1
votes

I use svmtrain to train my data set and svmclassify to predict test set. I want to look at the optimization process, the error vs. epochs (iterations) plot. I look into the usage and the code and find out that there are no information regarding such problem. The only thing I can get is control of the Maximum Iteration.

How to get the error vs. epochs (iterations) plot in matlab when using SVM classification?

Here is the code I modified. But not the one I want, I want the error at each epoch. Anybody did such analysis before? Thank you. Best regards!

%# 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));
1
Can you provide some level of runnable example?Fantastic Mr Fox
Hi Ben, I added an example. Thank you for your help.Jack Lee

1 Answers

0
votes

You do it all correct, the problem is SVM is finding solution every time! So each epoch has CorrectRate=1, try and type cp.CorrectRate in your codes to see it.

The problem is in below line:

 Groups = ismember(species,'setosa');          

The data is so simple for SVM to solve.

and also plot it like this:

plot(ErrVsIter(200:MaxIterValue,1),ErrVsIter(200:MaxIterValue,2));