www.gusucode.com > BP神经网络用于人脸识别 > BP神经网络用于人脸识别/006-Face_Angle_BP/program/LibSVM_Classify.m

    function LibSVM_Classify
%% 训练数据和测试数据的准备
mid = 1/2*nSample;

train_data_N = db(New_Final_Level_Mean_Energy_N(1:mid,:));
train_data_O = db(New_Final_Level_Mean_Energy_O(1:mid,:));
train_data_I = db(New_Final_Level_Mean_Energy_I(1:mid,:));
train_data_B = db(New_Final_Level_Mean_Energy_B(1:mid,:));

test_data_N = db(New_Final_Level_Mean_Energy_N(mid+1:end,:));
test_data_O = db(New_Final_Level_Mean_Energy_O(mid+1:end,:));
test_data_I = db(New_Final_Level_Mean_Energy_I(mid+1:end,:));
test_data_B = db(New_Final_Level_Mean_Energy_B(mid+1:end,:));

train_data = [train_data_N;train_data_O;train_data_I;train_data_B];
test_data = [test_data_N;test_data_O;test_data_I;test_data_B];

%% 训练数据和测试数据标签
train_label=[ones(tn1,1);zeros(tn1,1)];
test_label=[ones(tn0,1);zeros(tn0,1)];

%% LibSVM分类
%% GA参数优化c,g——gaSVMcgForClass
% maxgen:最大的进化代数,默认为200,一般取值范围为[100,500]
% sizepop:种群最大数量,默认为20,一般取值范围为[20,100]
% cbound = [cmin,cmax],参数c的变化范围,默认为(0,100]
% gbound = [gmin,gmax],参数g的变化范围,默认为[0,1000]
% v:SVM Cross Validation参数,默认为5
ga_option.maxgen = 300;
ga_option.sizepop = 60;
ga_option.cbound = [0,100];
ga_option.gbound = [0,1000];
ga_option.v = 5;
ga_option.ggap = 0.9;
[bestacc,bestc,bestg] = gaSVMcgForClass(train_label,train_data,ga_option);

%% 网格参数优化c,g——SVMcgForClass
%%function [bestacc,bestc,bestg] = SVMcgForClass(train_label,train,cmin,cmax,gmin,gmax,v,cstep,gstep,accstep)
%[train_scale,test_scale,ps] = scaleForSVM(train_data,test_data,0,1);
%[bestacc,bestc,bestg]=SVMcgForClass(train_label,train_data,0.1,32,0,100,5,1,1,4.5);
%% 
fprintf('(best c=%g,g=%g,rate=%g)\n',bestc,bestg,bestacc);
% cmd = ['-c',num2str(bestc),'-g',num2mstr(bestg)];
% model = svmtrain(train_label, train_data, cmd);
% [predict_label, accuracy, dec_values] = svmpredict(test_label, test_data, model);

%% SVM可视化
% w = model.SVs' * model.sv_coef;
% b = -model.rho;
% [mm,mn] = size(model.SVs);
% 
% figure;
% hold on;
% [m,n] = size(train_data);
% for run = 1:m
%     if train_label(run) == 1
%         h1 = plot( train_data(run,1),train_data(run,2),'r+' );
%     else
%         h2 = plot( train_data(run,1),train_data(run,2),'g*' );
%     end
%     for i = 1:mm
%         if model.SVs(i,1)==train_data(run,1) && model.SVs(i,2)==train_data(run,2)
%             h3 = plot( train_data(run,1),train_data(run,2),'o' );
%         end
%     end
% end
% legend([h1,h2,h3],'1','0','Support Vectors');
% hold off;
%