MATLAB

2010-06-18 48 views
20

'da 10-kat SVM sınıflandırması örneği İki sınıf bir veri kümesinde 10-kat SVM sınıflandırmasının nasıl yapıldığını gösteren açıklayıcı bir örneğe ihtiyacım var. MATLAB belgelerinde sadece bir örnek var, ancak 10 kat değil. Birisi bana yardım edebilir mi? SVMTRAIN, SVMCLASSIFY, CLASSPERF, CROSSVALIND:MATLAB

cevap

39

İşte Biyoinformatik Toolbox aşağıdaki işlevleri kullanarak, tam bir örnek. sadece bir 'setosa' örneği 'olmayan setosa'


UPDATE olarak yanlış sınıflandırılır ile 99.33% doğruluk elde

ans = 
     0.99333 
ans = 
    100  1 
    0 49 
    0  0 

: SVM çıkış

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 

işlevler R2013a

+0

'daki İstatistik araç kutusuna taşındı t için teşekkürler o güzel örnek. Sahip olduğum biraz kafa karışıklığı. Sanırım 50 girişim var. Yukarıdaki kod, her biri 5 girdiden oluşan 10 kümeye böldükten sonra 9'u eğitmek ve her yinelemede test etmek için 1'i kullanır. Fakat normal akış biraz farklı olabilir, yani 1. tren 2. çapraz validate yukarıdakileri tekrarlayın ve sonra test edin? ya da fark yaratmıyor mu? –

+0

@ user488652: Sorunuzda açık değilim, ancak yukarıdaki kod [n katlama çapraz doğrulama] standart yöntemini izler (http://en.wikipedia.org/wiki/Cross-validation_%28statistics%29 # K-fold_cross-validation) – Amro

+0

@Amro Grupları = ismember (türler, 'setosa'); 'Neden' setosa 'kullandınız ve diğer iki tür çıktı kullanmıyor musunuz? Ayrıca, 25X5 matrisinde saklanan veri kümem için bunu nasıl kullanabilir ve iki çıkışlı 25X1 matrisiyle sonuçlanabilir. – MaxSteel