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