2017-01-04 4 views
2

私はバイナリ分類を行うためにMATLABでlibsvmを使用しています。Libsvmはサポートベクトルの数をゼロとして与えます

私はさまざまなパラメータで相互検証を行っていましたが、すべてのパラメータが同じ精度と結果を示しているようです。

また、サポートベクトルの数は、すべてのパラメータでゼロになっています。

folds = 5; 
[C,gam] = meshgrid(-5:2:15, -15:2:3); 
cv_acc = zeros(numel(C),1); 


for ii = 1:numel(C) 
    cv_acc(ii) = svmtrain(class, data, ... 
          sprintf('-c %f -g %f -v %d ',... 
            2^C(ii), 2^gam(ii), folds) 
         ); 
end 

しかし、私は次のようになり、すべての私の反復とパラメータ値のための同じ結果になっています:ここで

は、私が試したものです私は見つけることができません

optimization finished, #iter = 1 
nu = -1.#IND00 
obj = -1.#IND00, rho = -1.#IND00 
nSV = 0, nBSV = 0 
Total nSV = 0 

を私のコードでエラーを出してください。 ご協力いただければ幸いです。

答えて

1

データに問題があるようです。 あなたのコードをこの例と比較してみましょう:

%% Preparing data 
load('fisheriris.mat'); 
[class,~,classValue] = grp2idx(species); 
[data, dataMu, dataSigma] = zscore(meas); 

%% Cost-Gamma optimization preparation 
folds = 5; 
[C,gam] = meshgrid(-5:2:15, -15:2:3); 
cv_acc = cell(size(C)); 

%% Actual performance estimation 
for ii = 1:numel(C) 
    cv_acc{ii} = svmtrain(classIndex, data, ... 
     sprintf('-c %f -g %f -v %d ',... 
      pow2(C(ii)), pow2(gam(ii)), folds)); 
end 

%% Results displaying 
cv_acc_mat = cellfun(@(x) sum(x(:)==classIndex(:))/numel(x), cv_acc); 
figure; 
surf(unique(C), unique(gam), cv_acc_mat); 
xlabel('log(Cost)'); 
ylabel('log(Gamma)'); 
zlabel('Accuracy'); 
+0

本当に私のデータにはInf(Infinity)値があります。それらのものをきれいにしなければならなかった。今それは正常に実行されていますありがとう – mathkid

関連する問題