我在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
我无法通过我的代码找出错误。 任何帮助都将深表感谢。
答案 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');