Example of 10-fold SVM classification in MATLAB

后端 未结 1 1394
盖世英雄少女心
盖世英雄少女心 2020-11-29 01:31

I need a somehow descriptive example showing how to do a 10-fold SVM classification on a two class set of data. there is just one example in the MATLAB documentation but it

相关标签:
1条回答
  • 2020-11-29 01:45

    Here's a complete example, using the following functions from the Bioinformatics Toolbox: SVMTRAIN, SVMCLASSIFY, CLASSPERF, CROSSVALIND.

    load fisheriris                              %# load iris dataset
    groups = ismember(species,'setosa');         %# create a two-class problem
    
    %# number of cross-validation folds:
    %# If you have 50 samples, divide them into 10 groups of 5 samples each,
    %# then train with 9 groups (45 samples) and test with 1 group (5 samples).
    %# This is repeated ten times, with each group used exactly once as a test set.
    %# Finally the 10 results from the folds are averaged to produce a single 
    %# performance estimation.
    k=10;
    
    cvFolds = crossvalind('Kfold', groups, k);   %# get indices of 10-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), ...
                     'Autoscale',true, 'Showplot',false, 'Method','QP', ...
                     'BoxConstraint',2e-1, 'Kernel_Function','rbf', 'RBF_Sigma',1);
    
        %# test using test instances
        pred = svmclassify(svmModel, meas(testIdx,:), 'Showplot',false);
    
        %# evaluate and update performance object
        cp = classperf(cp, pred, testIdx);
    end
    
    %# get accuracy
    cp.CorrectRate
    
    %# get confusion matrix
    %# columns:actual, rows:predicted, last-row: unclassified instances
    cp.CountingMatrix
    

    with the output:

    ans =
          0.99333
    ans =
       100     1
         0    49
         0     0
    

    we obtained 99.33% accuracy with only one 'setosa' instance mis-classified as 'non-setosa'


    UPDATE: SVM functions have moved to Statistics toolbox in R2013a

    0 讨论(0)
提交回复
热议问题