SVM實例及Matlab代碼

********************************************************

***數據集下載地址 :http://pan.baidu.com/s/1geb8CQf****

*********************************************************

 [email protected]

一次模式識別課中的關於SVM用法的一個簡單的實例(訓練集和測試集簡單的劃分):

一、實驗目的

1.掌握支持向量機(SVM)的原理、核函數類型選擇以及核參數選擇原則等;

2.熟悉基於libSVM二分類的一般流程與方法;

二、實驗內容

    1.對“bedroom, forest”兩組數據進行分類(二分類);

    2.得到試驗分類準確率;

三、實驗條件

1.LibSVM軟件包,3.17版本;

2. Matlab 2013a。

四、實驗方法與流程

(1) 試驗流程:

Step1: 根據給定的數據,選定訓練集和測試集;

Step2: 爲訓練集與測試集選定標籤集;

Step3: 利用訓練集進行訓練分類器得到model;

Step4: 根據model,對測試集進行測試集得到accuracyrate;

(2) 實驗數據準備:

“bedroom.mat”10*15的矩陣,分別代表了不同的十張有關於bedroom的圖片的15維屬性;

“forest.mat”10*15矩陣,分別代表了不同的十張有關於forest的圖片的15維屬性特徵;

訓練集:trainset(); 分別取bedroom(1:5,:)和forse(1:5,:)作爲訓練集;

測試集:testset();  分別取bedroom(6:10,:)和forse(6:10,:)作爲測試集;

標籤集:label(); 取bedroom的數據爲正類標籤爲1;forse的數據爲負類標籤爲-1.

(3) Matlab程序與實驗結果:

 

附錄:matlab代碼

%% SVM數據分類預測---作業數據

%

%

%*****write by Taozhang 2014.04.16

%%

clear all;

clc;

%%

% 作業中提供的數據已做整理,不在單獨導入;

load dataset.mat                 %導入要分類的數據集

load labelset.mat                %導入分類集標籤集

 

% 選定訓練集和測試集

 

% 將第一類的1-5,第二類的11-15做爲訓練集

train_set =[dataset(1:5,:);dataset(11:15,:)];

% 相應的訓練集的標籤也要分離出來

train_set_labels =[lableset(1:5);lableset(11:15)];

% 將第一類的6-10,第二類的16-20,做爲測試集

test_set =[dataset(6:10,:);dataset(16:20,:)];

% 相應的測試集的標籤也要分離出來

test_set_labels =[lableset(6:10);lableset(16:20)];

 

% 數據預處理,將訓練集和測試集歸一化到[0,1]區間

 

[mtrain,ntrain] = size(train_set);

[mtest,ntest] = size(test_set);

 

test_dataset = [train_set;test_set];

% mapminmax爲MATLAB自帶的歸一化函數

[dataset_scale,ps] =mapminmax(test_dataset',0,1);

dataset_scale = dataset_scale';

 

train_set = dataset_scale(1:mtrain,:);

test_set = dataset_scale((mtrain+1):(mtrain+mtest),: );

 

%% SVM網絡訓練

model = svmtrain(train_set_labels,train_set, '-s 2 -c 1 -g 0.07');

 

%% SVM網絡預測

[predict_label] =svmpredict(test_set_labels, test_set, model);

 

%% 結果分析

 

% 測試集的實際分類和預測分類圖

% 通過圖可以看出只有一個測試樣本是被錯分的

figure;

hold on;

plot(test_set_labels,'o');

plot(predict_label,'r*');

xlabel('測試集樣本','FontSize',12);

ylabel('類別標籤','FontSize',12);

legend('實際測試集分類','預測測試集分類');

title('測試集的實際分類和預測分類圖','FontSize',12);

grid on;




 

程序運行結果:

optimization finished, #iter = 5

nu = 0.643949

obj = -4.304693, rho = -0.008725

nSV = 8, nBSV = 6

Total nSV = 8

Accuracy = 100% (10/10) (classification)

 關於支持向量機(SVM)的一個簡單應用實例及matlab代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章