Matlab 一对一

Matlab 一对一,matlab,machine-learning,svm,Matlab,Machine Learning,Svm,当我运行下面提到的SVM分类器(一对一)代码时,我在第行得到以下错误:model{k}=svmtrain(double(trainLabel==k),trainData,'-c1-g0.2-b1') 在matlab中:Y必须是向量或字符数组 有人能帮我吗 The code is: %# Fisher Iris dataset load fisheriris [~,~,labels] = unique(species); %# labels: 1/2/3 data = zscore(meas)

当我运行下面提到的SVM分类器(一对一)代码时,我在第行得到以下错误:
model{k}=svmtrain(double(trainLabel==k),trainData,'-c1-g0.2-b1')

在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

将库中的函数
svmtrain
与Matlab中包含的同名函数混用

在libsvm库中,
svmtrain
的第三个输入是一个字符串,其中包含类似命令行的选项。在Matlab版本中,使用名称/值对设置选项。您使用的字符串,
'-c1-g0.2-b1'
,表示成本参数=1,径向基函数核的伽马参数=0.2,并且您正在请求概率估计。要在Matlab实现中使用相同的SVM,我认为您必须指定选项
'boxconstraint',1',kernel\u function''rbf',rbf\u sigma',0.2
。不过,Matlab实现不支持概率估计

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