Exemple de classification 10 fois SVM dans MATLAB

j'ai besoin d'un d'une certaine manière descriptive exemple montrant comment le faire 10 fois de classification SVM sur deux classe d'ensemble de données. il n'y a qu'un exemple dans la documentation de MATLAB, mais il n'est pas avec 10-fold. Quelqu'un peut-il m'aider?

21
demandé sur Amro 2010-06-18 19:08:39

1 réponses

voici un exemple complet, en utilisant les fonctions suivantes de la boîte à outils bioinformatiques: 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

avec la sortie:

ans =
      0.99333
ans =
   100     1
     0    49
     0     0

nous avons obtenu la précision 99.33% avec une seule instance "setosa" mal classée comme "non-setosa "


UPDATE : les fonctions SVM sont passées à la boîte à outils statistiques en R2013a

42
répondu Amro 2013-04-20 22:37:59