支持向量機(SVM)的一個簡單應用實例及matlab代碼
阿新 • • 發佈:2018-05-15
.com 自帶 under 內容 AD 軟件 tex 分類器 ref
數據集下載地址 :http://pan.baidu.com/s/1geb8CQf
一、實驗目的
1.掌握支持向量機(SVM)的原理、核函數類型選擇以及核參數選擇原則等;
2.熟悉基於libSVM二分類的一般流程與方法;
二、實驗內容
1.對“bedroom, forest”兩組數據進行分類(二分類);
2.得到試驗分類準確率;
三、實驗條件
1.LibSVM軟件包,3.17版本;
2. Matlab 2013a。
四、實驗方法與流程
(1) 試驗流程:
Step1: 根據給定的數據,選定訓練集和測試集;
Step2: 為訓練集與測試集選定標簽集;
Step3: 利用訓練集進行訓練分類器得到model;
Step4: 根據model,對測試集進行測試集得到accuracy rate;
(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代碼
clear all; clc; %% %% dataset是將bedroom和forest合並;dataset = [bedroom;forset];這行代碼可以實現合並 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;
轉載自https://blog.csdn.net/mushiheng/article/details/52491104
支持向量機(SVM)的一個簡單應用實例及matlab代碼