********************************************************網絡
***數據集下載地址 :http://pan.baidu.com/s/1geb8CQf****函數
*********************************************************測試
zhangtao1698@126.comrest
一次模式識別課中的關於SVM用法的一個簡單的實例(訓練集和測試集簡單的劃分):圖片
1、實驗目的it
1.掌握支持向量機(SVM)的原理、核函數類型選擇以及核參數選擇原則等;io
2.熟悉基於libSVM二分類的通常流程與方法;class
2、實驗內容test
1.對「bedroom, forest」兩組數據進行分類(二分類);原理
2.獲得試驗分類準確率;
3、實驗條件
1.LibSVM軟件包,3.17版本;
2. Matlab 2013a。
4、實驗方法與流程
(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代碼