支援向量機多分類libSVM

2021-06-07 05:37:55 字數 2346 閱讀 4559

支援向量機多分類可以採用兩種方式,1.一對一  one vs one 2.一對多 one vs rest 

1.one vs rest 

clc;

clear all;

[iris_label,iris_data] = libsvmread('iris.scale');%讀取資料到matlab格式

% [~,~,labels] = unique(species); %# labels: 1/2/3

% data = zscore(meas); %# scale features

numinst = size(iris_data,1);

numlabels = max(iris_label);

%# split training/testing

idx = randperm(numinst);

numtrain = 100;

numtest = numinst - numtrain;

traindata = iris_data(idx(1:numtrain),:);

testdata = iris_data(idx(numtrain+1:end),:);

trainlabel = iris_label(idx(1:numtrain));

testlabel = iris_label(idx(numtrain+1:end));

%# train one-against-all models

model = cell(numlabels,1); %模型的個數

for k=1:numlabels

model = 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, '-b 1');

prob(:,k) = p(:,model.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

2.one vs one 

clc;

clear all;

[iris_label,iris_data] = libsvmread('iris.scale');%讀取資料到matlab格式

% [~,~,labels] = unique(species); %# labels: 1/2/3

% data = zscore(meas); %# scale features

numinst = size(iris_data,1);

numlabels = max(iris_label);

%# split training/testing

idx = randperm(numinst);

numtrain = 100;

numtest = numinst - numtrain;

traindata = iris_data(idx(1:numtrain),:);

testdata = iris_data(idx(numtrain+1:end),:);

trainlabel = iris_label(idx(1:numtrain));

testlabel = iris_label(idx(numtrain+1:end));

model= svmtrain(trainlabel, traindata, '-c 1 -g 0.2 -b 1');

[predict_label, accuracy, prob] = svmpredict(testlabel,testdata, model,'-b 1');

% fprintf('準確率為%d.....\n',accuracy);

複製搜尋 複製

搜尋

支援向量機多分類

支援向量機多分類可以採用兩種方式,1.一對一 one vs one 2.一對多 one vs rest 1.one vs rest clc clear all iris label,iris data libsvmread iris.scale 讀取資料到matlab格式 labels unique...

libsvm 多分類情況

svm是乙個二分類器,當遇到多類別的時候,一般採取如下兩種策略。a.一對多法 one versus rest,簡稱1 v r svms 訓練時依次把某個類別的樣本歸為一類,其他剩餘的樣本歸為另一類,這樣k個類別的樣本就構造出了k個svm。分類時將未知樣本分類為具有最大分類函式值的那類。b.一對一法 ...

Libsvm實現支援向量機(Matlab)

1.trainlable,traininstance libsvmread b.txt 讀入歸一化的資料 model svmtrain trainlable,traininstance,訓練模型 主要含有三個引數,第乙個為類別標籤,第二個為訓練樣本,內設定引數。引數選擇如下 parameters s...