clc;
clear all;
close all;
%% SVM分类器
n=2;%选择前面n个特征
Traindata=importdata('train.data');
Testdata=importdata('test.data');
Train=Traindata(:,1:10);
%% 随机上采样
up=Traindata(randint(1,7819-466,[1 466]),:);
Traindata_up=[Traindata(1:466,:);up;Traindata(467:8285,:)];
%%
Traindataclass_up=Traindata_up(:,11);
Trainclass=Traindata(:,11);
Train2(find(Trainclass==-1))=-1;
Train1(find(Trainclass==1))=1;
Test=Testdata(:,1:10);
Testclass=Testdata(:,11);
Test2(find(Testclass==-1))=-1;
Test1(find(Testclass==1))=1;
%% training
SVMStruct = svmtrain(Traindata_up(:,1:n), Traindataclass_up,'method', 'SMO','kernelcachelimit',50000);
%% testing
%Group = svmclassify(SVMStruct, Test(:,1:n));
Group = svmclassify(SVMStruct, Train(:,1:n));
%验证正确率(总)
rightnumber=0;
for i=1:size(Group,1)
if Group(i)==Trainclass(i)
%if Group(i)==Testclass(i)
rightnumber=rightnumber+1;
end
end
rightratio=rightnumber/size(Group,1)*100;
sprintf('验证准确率(总)=%0.2f',rightratio)
%验证正类正确率(1)
rightnumber=0;
for i=1:size(Train1,2)
if Group(i)==Train1(i)
rightnumber=rightnumber+1;
end
end
rightratio=rightnumber/size(Train1,2)*100;
sprintf('验证正类准确率=%0.2f',rightratio)
%验证负类正确率(1)
rightnumber=0;
for i=size(Train1,2)+1:size(Train2,2)
if Group(i)==Train2(i)
rightnumber=rightnumber+1;
end
end
rightratio=rightnumber/size(Train2,2)*100;
sprintf('验证负类准确率=%0.2f',rightratio)
%%
%测试正确率(总)
Group = svmclassify(SVMStruct, Test(:,1:n));
rightnumber=0;
for i=1:size(Group,1)
if Group(i)==Testclass(i)
rightnumber=rightnumber+1;
end
end
rightratio=rightnumber/size(Group,1)*100;
sprintf('测试准确率(总)=%0.2f',rightratio)
%测试正类正确率(1)
rightnumber=0;
for i=1:size(Test1,2)
if Group(i)==Test1(i)
rightnumber=rightnumber+1;
end
end
rightratio=rightnumber/size(Test1,2)*100;
sprintf('测试正类准确率=%0.2f',rightratio)
%测试负类正确率(1)
rightnumber=0;
for i=size(Test1,2)+1:size(Test2,2)
if Group(i)==Test2(i)
rightnumber=rightnumber+1;
end
end
rightratio=rightnumber/size(Test2,2)*100;
sprintf('测试负类准确率=%0.2f',rightratio)