支援向量機多分類

2021-06-21 03:48:14 字數 2387 閱讀 5251

支援向量機多分類可以採用兩種方式,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);%個數 150

numlabels = max(iris_label);%個數3

%# split training/testing

idx = randperm(numinst); %隨機選擇數字,打亂次序

numtrain = 100;%訓練個數100

numtest = numinst - numtrain;%測試個數50

traindata = iris_data(idx(1:numtrain),:); %從打亂後的數字選擇前100個

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); %模型的個數3個

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);

參考:

支援向量機多分類libSVM

支援向量機多分類可以採用兩種方式,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...

分類 SVM 支援向量機

svm,support vector machine,可用於模式分類和非線性回歸。支援向量機的主要思想是建立乙個分類超平面作為決策曲面,使得正例和反例之間的隔離邊緣被最大化。支援向量機的理論基礎是統計學習理論,更精確的說,支援向量機是結構風險最小化的近似實現。這個原理基於這樣的事實 學習機器在測試資...

支援向量機分類器

1 支援向量機分類器 根據訓練樣本的分布,搜尋所有可能的線性分類器中最佳的那個。本文是利用支援向量機進行手寫體數字影象的分類任務。2 實驗 及結果截圖 coding utf 8 支援向量機分類器 手寫體資料讀取 從slearn.datasets裡匯入手寫數字載入器 from sklearn.data...