數據集下載地址 :http://pan.baidu.com/s/1geb8CQf網絡
1、實驗目的函數
1.掌握支持向量機(SVM)的原理、核函數類型選擇以及核參數選擇原則等;測試
2.熟悉基於libSVM二分類的通常流程與方法;spa
2、實驗內容.net
1.對「bedroom, forest」兩組數據進行分類(二分類);rest
2.獲得試驗分類準確率;code
3、實驗條件blog
1.LibSVM軟件包,3.17版本;圖片
2. Matlab 2013a。get
4、實驗方法與流程
(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;