MATLAB實現支援向量機演算法(MNIST資料集)

2021-10-06 04:20:42 字數 1650 閱讀 9154

svm 是通過學習樣本尋找分類間隔邊界,把這一過程轉化為了

乙個優化問題。眾所周知,分類間隔是由距離分類決策邊界最近的那些少量樣本決定的,而比這些樣本距離分類決策邊界更遠的大量樣本,其實都不會影響到最優權向量的求取,這些作用十分特殊的樣本,就被稱為「支援向量」,表示是他們支撐起了線性分類器在最大分類間隔意義下的最優解。這也是為什麼這種演算法被稱為「支援向量機(support vector machine,svm)」的原因。

svm.m 程式**主要實現了資料集讀入,定義 svm 分類器模板、訓練,測試及結果輸出幾個部分。

clear variables

clcload ('./test_images.mat');

load ('./test_labels.mat');

load ('./train_images.mat');

load ('./train_labels.mat');%資料集的讀入

train_num =2000;

test_num = 200;

data_train = mat2vector(train_images(:,:,1:train_num),train_num);%影象轉向量

data_test = mat2vector(test_images(:,:,1:test_num),test_num);%mnist資料集影象為28*28

% 這裡我們用最簡單的線性模型做演示;svm中可調的超引數非常多,如損失函式以及選用的核函式等

% 如果需要進一步設定,可以參考幫助文件,如設定t =

% templatesvm('standardize',1,'kernelfunction','gaussian');,將t送入fitcecoc即可

% templatesvm()定義分類器模板

% fitcecoc()定義分類器訓練

t = templatesvm('kernelfunction','linear');%這裡採用了線性核函式

svm_model = fitcecoc(data_train,train_labels1(1:train_num),'learners',t);

%訓練模型,由於是多分類,不能直接呼叫fitcsvm,用多分類訓練函式fitcecoc

%測試結果

%predict()定義分類器**,對待識別樣本利用指定的模板進行分類識別

result = predict(svm_model,data_test);

result = result.';

fprintf('**結果:');

result(1:20)%取20個列印出來對比

fprintf('真實分布:');

test_labels1(1:20)

acc = 0.;

for i = 1:test_num

if result(i)==test_labels1(i)

acc = acc+1;

endendfprintf('精確度為:%5.2f%%\n',(acc/test_num)*100);

當訓練樣本數量為2000時,貝葉斯分類器對mnist手寫數字的識別精確度是96%

Libsvm實現支援向量機(Matlab)

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

支援向量機(SVM)演算法的matlab的實現

支援向量機是一種分類演算法之一,matlab中也有相應的函式來對其進行求解 下面貼乙個小例子,這個例子 於我們實際的專案。clc clear n 10 下面的資料是我們實際專案中的訓練樣例 樣例中有8個屬性 correctdata 0,0.2,0.8,0,0,0,2,2 errordata reve...

支援向量機(SVM)演算法的matlab的實現

支援向量機是一種分類演算法之一,matlab中也有相應的函式來對其進行求解 下面貼乙個小例子,這個例子 於我們實際的專案。clc clear n 10 下面的資料是我們實際專案中的訓練樣例 樣例中有8個屬性 correctdata 0,0.2,0.8,0,0,0,2,2 errordata reve...