实验二 使用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)