實驗二 使用SVM進行數據分類
【數據集名稱】Shuttle(來自UCI機器學習數據集)
【數據集描述】該數據集用於航天飛機的分類,包含兩個子集(shuttle_training_set和shuttle_testing_set),分別作爲訓練集和測試集。其中:訓練集有43500條數據,每條數據包含10個內容:前9項是特徵,第10項是類別標號(值爲1的類和值不爲1的類)。測試集有14500條數據,每條數據的含義與訓練集一致。該數據集中80%樣本的類別標號是1。
【實驗任務】在Matlab環境下,利用libsvm工具包設計一個兩類SVM分類器,在給定的訓練集(shuttle_training_set)上進行訓練,其中類別標號爲1的作爲正例,其他類別標號的數據作爲反例,然後在測試集(shuttle_testing_set)上統計你所設計的SVM分類器的性能。希望你的SVM分類器在測試集上的分類正確率能達到90%以上。
【注意事項】
(1)樣本數據需要規範化處理,如:類別標號應爲±1;
(2)核函數中參數最優值的選擇,可通過"SVMcgForClass.m"函數獲得。
clc
clear all
load('shuttle_training_set.mat', 'shuttle')
train_num=size(shuttle)
for i=1:train_num(1)
if(i<5)
shuttle(i,10)
end
if(shuttle(i,train_num(2))~=1)
shuttle(i,train_num(2))=-1;
end
end
save my_training_set.mat shuttle
load('shuttle_testing_set.mat', 'shuttle_test')
test_num=size(shuttle_test);
for i=1:test_num(1)
if(shuttle_test(i,train_num(2))~=1)
shuttle_test(i,train_num(2))=-1;
end
end
save my_testing_set.mat shuttle_test
clc
clear all
load('my_training_set.mat','shuttle') %載入訓練數據
fprintf('開始訓練');%訓練的也太久了吧!!!!
model=svmtrain(shuttle(:,10),shuttle(:,1:9)); %訓練模型
save my_model.mat model
clc
clear all;
load('my_testing_set.mat');%載入測試的數據
load('my_model.mat')%載入訓練的模型
[predict_label,accuracy]=svmpredict(shuttle_test(:,10),shuttle_test(:,1:9),model)