【问题标题】:Libsvm giving number of support vectors as zeroLibsvm 将支持向量的数量设为零
【发布时间】:2017-05-18 14:57:20
【问题描述】:

我在 MATLAB 中使用 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

我的代码找不到错误。 任何帮助将不胜感激。

【问题讨论】:

    标签: matlab libsvm


    【解决方案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');
    

    【讨论】:

    • 是的,我的数据有一些 Inf (Infinity) 值。不得不清理那些东西。现在运行正常谢谢
    猜你喜欢
    • 2013-04-04
    • 2014-06-28
    • 2014-01-23
    • 2011-08-09
    • 1970-01-01
    • 2013-02-26
    • 2016-06-05
    • 2013-05-25
    • 2015-09-08
    相关资源
    最近更新 更多