SVM分类器之一对多

3
当我运行下面提到的SVM分类器(一对所有)代码时,我在以下行收到以下错误:model{k} = svmtrain(double(trainLabel==k), trainData, '-c 1 -g 0.2 -b 1'); 在Matlab中:Y必须是向量或字符数组。
有人能帮我吗?
The code is:
%# Fisher Iris dataset
load fisheriris
[~,~,labels] = unique(species);   %# labels: 1/2/3
data = zscore(meas);              %# scale features
numInst = size(data,1);
numLabels = max(labels);

%# split training/testing
idx = randperm(numInst);
numTrain = 100; numTest = numInst - numTrain;
trainData = data(idx(1:numTrain),:);  testData = data(idx(numTrain+1:end),:);
trainLabel = labels(idx(1:numTrain)); testLabel = labels(idx(numTrain+1:end));

以下是用于多类SVM中的一对多方法的实现:

%# train one-against-all models
model = cell(numLabels,1);
for k=1:numLabels
    model{k} = svmtrain(double(trainLabel==k), trainData, '-c 1 -g 0.2 -b 1');
end

%# get probability estimates of test instances using each model
prob = zeros(numTest,numLabels);
for k=1:numLabels
    [~,~,p] = svmpredict(double(testLabel==k), testData, model{k}, '-b 1');
    prob(:,k) = p(:,model{k}.Label==1);    %# probability of class==k
end

%# predict the class with the highest probability
[~,pred] = max(prob,[],2);
acc = sum(pred == testLabel) ./ numel(testLabel)    %# accuracy
C = confusionmat(testLabel, pred)                   %# confusion matrix
1个回答

0

您混淆了libsvm库中的svmtrain函数和Matlab的Statistics Toolbox中同名函数的用法。

在libsvm库中,svmtrain的第三个输入是包含类似命令行选项的字符串。在Matlab版本中,选项使用名称/值对设置。您使用的字符串'-c 1 -g 0.2 -b 1'表示成本参数=1,径向基函数核的γ参数=0.2,并且您正在请求概率估计。要在Matlab实现中使用相同的SVM,我认为您必须指定选项'boxconstraint',1,'kernel_function''rbf','rbf_sigma',0.2。但是,Matlab实现不支持概率估计。

但由于您想要使用的代码显然基于libsvm库,使其工作的最简单方法是安装libsvm。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接