1 模型
支持向量机(SVM)是在分类问题下建立的一个运算小型数据集,可实现非线性高纬度分类,有很好的扩展能力.但是,在传统SVM的训练过程中,SVM运算结果的好坏与参数选择关系密切,而且目前使用的参数选择算法有很多缺陷.因此,针对上述问题,在灰狼算法(GWO)中加入混沌序列,改变狼群初始分布规律,构建混沌灰狼优化算法(CGWO),增强狼群分布均匀性以及狼群查找遍历性,极大提高GWO算法的运算速度和运算准确性,最终更好地优化SVM.使用Mirjalili提供的开源数据与原有数据混合作为向量机的测试集进行实验对比分析,实验结果表明,CGWO算法具有明显的性能提高;用混沌灰狼算法优化的SVM和灰狼优化算法SVM,人工蜂群SVM,万有引力搜索SVM以及传统算法优化的SVM相比,其运算准确率更高,误差更低,花费时间更少.
2 部分代码
tic % 计时器 %% 清空环境变量 close all clear clc format compact %% 数据提取 % 载入测试数据wine,其中包含的数据为classnumber = 3,wine:178*13的矩阵,wine_labes:178*1的列向量 load wine.mat % 选定训练集和测试集 % 将第一类的1-30,第二类的60-95,第三类的131-153做为训练集 train_wine = [wine(1:30,:);wine(60:95,:);wine(131:153,:)]; % 相应的训练集的标签也要分离出来 train_wine_labels = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)]; % 将第一类的31-59,第二类的96-130,第三类的154-178做为测试集 test_wine = [wine(31:59,:);wine(96:130,:);wine(154:178,:)]; % 相应的测试集的标签也要分离出来 test_wine_labels = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)]; %% 数据预处理 % 数据预处理,将训练集和测试集归一化到[0,1]区间 [mtrain,ntrain] = size(train_wine); [mtest,ntest] = size(test_wine); dataset = [train_wine;test_wine]; % mapminmax为MATLAB自带的归一化函数 [dataset_scale,ps] = mapminmax(dataset',0,1); dataset_scale = dataset_scale'; train_wine = dataset_scale(1:mtrain,:); l=l+1; Convergence_curve(l)=Alpha_score; end bestc=Alpha_pos(1,1); bestg=Alpha_pos(1,2); bestGWOaccuarcy=Alpha_score; %% 打印参数选择结果 disp('打印选择结果'); str=sprintf('Best Cross Validation Accuracy = %g%%,Best c = %g,Best g = %g',bestGWOaccuarcy*100,bestc,bestg); disp(str) %% 利用最佳的参数进行SVM网络训练 cmd_gwosvm = ['-c ',num2str(bestc),' -g ',num2str(bestg)]; model_gwosvm = svmtrain(train_wine_labels,train_wine,cmd_gwosvm); %% SVM网络预测 [predict_label,accuracy,~] = svmpredict(test_wine_labels,test_wine,model_gwosvm); % 打印测试集分类准确率 total = length(test_wine_labels); right = sum(predict_label == test_wine_labels); disp('打印测试集分类准确率'); str = sprintf( 'Accuracy = %g%% (%d/%d)',accuracy(1),right,total); disp(str); %% 结果分析 % 测试集的实际分类和预测分类图 figure; hold on; plot(test_wine_labels,'o'); plot(predict_label,'r*'); xlabel('测试集样本','FontSize',12); ylabel('类别标签','FontSize',12); legend('实际测试集分类','预测测试集分类'); title('测试集的实际分类和预测分类图','FontSize',12); grid on snapnow %% 显示程序运行时间 toc
3 仿真结果
4 参考文献
[1]王岩, 裴世春, 王存堂,等. 基于蝙蝠算法的支持向量机参数优化[J]. 宝鸡文理学院学报:自然科学版, 2015.
[2]王志华, 罗齐, and 刘绍廷. "基于混沌灰狼优化算法的SVM分类器研究." 计算机工程与科学 40.11(2018):138-144.