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; %