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...