Matlab 一对一
当我运行下面提到的SVM分类器(一对一)代码时,我在第行得到以下错误: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)
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