libsvm cross validation with precomputed kernel in matlab -
i trying 5 fold cross validation libsvm (matlab) using precomputed kernel, but, following error message : undefined function 'ge' input arguments of type 'struct'. because libsvm return structure instead of value in cross validation, how can solve problem, code:
load('iris.dat') data=iris(:,1:4); class=iris(:,5); % normalize data range=repmat((max(data)-min(data)),size(data,1),1); data=(data-repmat(min(data),size(data,1),1))./range; % train tr_data=[data(1:5,:);data(52:56,:);data(101:105,:)]; tr_lbl=[ones(5,1);2*ones(5,1);3*ones(5,1)]; % kernel computation sigma=.8 rbfkernel = @(x,y,sigma) exp((-pdist2(x,y,'euclidean').^2)./(2*sigma^2)); ktr=[(1:15)',rbfkernel(tr_data,tr_data,sigma)]; kts=[ (1:150)',rbfkernel(data,tr_data,sigma)]; % svmptrain bestcv = 0; log2c = -1:3 cmd = ['ktr -t 4 -v 5 -c ', num2str(2^log2c)]; cv = svmtrain2(tr_lbl,tr_data, cmd); if (cv >= bestcv) bestcv = cv; bestc = 2^log2c; end end cmd=['-s 0 -c ', num2str(bestc), 'ktr -t 4'] model=svmtrain2(tr_lbl,tr_data,cmd) % svm predict labels=svmpredict(class,data,model,kts)
the function svmtrain2 using not part of standard matlab , output of function not structure. if insist use that, can calculate score data using other existing function:
[f,k] = svmeval(x_eval,varargin)
that evaluates trained svm using outputs svmtrain2. prefer use first standard functions embedded in matlab. in standard matlab library there is:
svmstruct = svmtrain(training,group)
that returns structure, svmstruct, containing information trained support vector machine (svm) classifier. or
svmmodel = fitcsvm(x,y)
that returns support vector machine classifier svmmodel, trained predictors x , class labels y one- or two-class classification. , can score each prediction using:
[label,score] = predict(svmmodel,x)
that returns class likelihood measures, i.e., either scores or posterior probabilities.
Comments
Post a Comment