• Ogłoszenie:

Matlab i błędy z svmtrain i własną funkcją jądra.

Wszystko na temat programów: skąd pobrać, instalacja, użytkowanie, problemy, poszukiwane programy.

Matlab i błędy z svmtrain i własną funkcją jądra.

Postprzez Mars 20 Kwi 2009, 18:35

reklama
Witam

Zajmuję się trochę SVM-ami i w matlabie 7.7.0 wraz z bioinformatic toolbox zauważyłem funkcję svmtrain(). W helpie wyczytałem że można utworzyć własne funkcje jądra, zmodyfikowałem trochę typową rbf, i chciałem wstawić ją jako funkcję jądra do svmtrain. Za pomocą help svmtrain i zamieszczonymi tam informacjami i zmodyfikowałem przykładowy program.
Moje dane to szachownica.

Kod: Zaznacz wszystko
data =

    1.0000    1.0000
    2.0000    1.0000
    3.0000    1.0000
    1.5000    1.5000
    2.5000    1.5000
    1.0000    2.0000
    2.0000    2.0000
    3.0000    2.0000
    1.5000    2.5000
    2.5000    2.5000
    1.0000    3.0000
    2.0000    3.0000
    3.0000    3.0000
    4.0000    1.0000
    5.0000    1.0000
    6.0000    1.0000
    4.5000    1.5000
    5.5000    1.5000
    4.0000    2.0000
    5.0000    2.0000
    6.0000    2.0000
    4.5000    2.5000
    5.5000    2.5000
    4.0000    3.0000
    5.0000    3.0000
    6.0000    3.0000
    1.0000    4.0000
    2.0000    4.0000
    3.0000    4.0000
    1.5000    4.5000
    2.5000    4.5000
    1.0000    5.0000
    2.0000    5.0000
    3.0000    5.0000
    1.5000    5.5000
    2.5000    5.5000
    1.0000    6.0000
    2.0000    6.0000
    3.0000    6.0000
    4.0000    4.0000
    5.0000    4.0000
    6.0000    4.0000
    4.5000    4.5000
    5.5000    4.5000
    4.0000    5.0000
    5.0000    5.0000
    6.0000    5.0000
    4.5000    5.5000
    5.5000    5.5000
    4.0000    6.0000
    5.0000    6.0000
    6.0000    6.0000

groups =

     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1
     1

Stworzyłem funkcję jądra nazwana erbf i umieściłem w pliku erbf.m
Kod: Zaznacz wszystko
function k = erbf(u,v)
k = exp(-sqrt((u-v)*(u-v)')/(2*10^2));

Następnie staram się uruchomić zmodyfikowany przykładowy program
Kod: Zaznacz wszystko
% Randomly select training and test sets
        [train, test] = crossvalind('holdOut',groups);
        cp = classperf(groups);
        % Use a linear support vector machine classifier
        svmStruct = svmtrain(data(train,:),groups(train),'showplot',true,'KERNEL_FUNCTION',@erbf);
        % Add a title to the plot
        title(sprintf('Kernel Function: %s',...
              func2str(svmStruct.KernelFunction)),...
              'interpreter','none');
        % Classify the test set using svmclassify
        classes = svmclassify(svmStruct,data(test,:),'showplot',true);
        % See how well the classifier performed
        classperf(cp,classes,test);
        cp.CorrectRate

Wtedy wyskakują mi następujące błędy:
Kod: Zaznacz wszystko
??? Error using ==> minus
Matrix dimensions must agree.

Error in ==> erbf at 2
        k = exp(-sqrt((u-v)*(u-v)')/(2*10^2));

Error in ==> svmdecision at 13
f = (feval(kfun,sv,Xnew,kfunargs{:})'*alphaHat(:)) + bias;

Error in ==> svmplotsvs at 30
[dummy, Z] = svmdecision([X(:),Y(:)],svm_struct);

Error in ==> svmtrain at 522
    hSV = svmplotsvs(hAxis,hLines,groupString,svm_struct);


Niestety nie wiem skąd one się wzięły i co należy zmodyfikować aby one zniknęły. Mógłby ktoś pomóc, lub dać jakieś wskazówki? Wiem że to musi być coś z moją funkcją jądra. Na oryginalnych (np 'rbf') działa dobrze.

Z góry wielkie dzięki i przepraszam jeśli umieściłem temat w złym dziale.
Mars
~user
 
Posty: 25
Dołączenie: 02 Gru 2007, 19:10
Miejscowość: Rzeszów



Powróć do Programy

Kto jest na forum

Użytkownicy przeglądający to forum: nifaley oraz 14 gości