Pregunta

Necesito un ejemplo descriptivo de alguna manera que muestre cómo hacer una clasificación SVM de 10 veces en un conjunto de datos de dos clases. Solo hay un ejemplo en la documentación de MATLAB, pero no es con 10 veces. ¿Alguien me puede ayudar?

¿Fue útil?

Solución

Aquí hay un ejemplo completo, utilizando las siguientes funciones de la caja de herramientas BioInformatics: Svmtrain, Svmclassify, Clase, Válvula cruzada.

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

con la salida:

ans =
      0.99333
ans =
   100     1
     0    49
     0     0

obtuvimos 99.33% precisión con una sola instancia de 'setosa' mal clasificada como 'no setosa'


ACTUALIZAR: Las funciones SVM se han trasladado a la caja de herramientas de estadística en R2013A

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top