0、前言
采用优化算法优化SVM参数进行分类。包含GWO、WOA、AFSA、AO、BAT、GTO、HBA、MPA、POA、SSA、SMA、jSSA、HHO、EO、AOA、SO等优化算法对SVM的改进。
2、实现步骤
SVM 为典型的核方法,首先选定核函数,确定待优化的核参数;其次,限定待优化参数的范围,设置适应度函数,应用优化算法寻优得到最佳参数;最终采用最优参数的SVM模型实现分类。以AOA优化SVM为例,如下图所示:
%% 优化SVM kerneltype=2;%核函数选择[xx,trace,process]=AOASVM(P_train,P_test,T_train,T_test,kerneltype);%采用AOA优化算法优化SVM核参数save result/AOASVMpara xx trace process%保存参数 下次就可注释掉,不用优化浪费时间 直接加载load result/AOASVMpara figureplot(1-trace)legend('寻优进化曲线')xlabel('寻优代数')ylabel('适应度值')%% 采用优化的值重新训练svmgam=xx(1)sig2=xx(2)cmd=['-s 0 -t ',num2str(kerneltype),' -c ',num2str(sig2),' -g ',num2str(gam)];model=svmtrain(T_train,P_train,cmd); % SVM模型训练%% SVM网络预测y_pre_train=svmpredict(zeros(size(P_train,1),1),P_train,model); y_pre_test=svmpredict(zeros(size(P_test,1),1),P_test,model); clctrain_acc=sum(y_pre_train==T_train)/length(T_train)test_acc=sum(y_pre_test==T_test)/length(T_test)
图中 :函数AOASVM的功能为采用AOA算法确定最佳适应度值对应的SVM核参数值
function [Best_P,Conv_curve,process]=AOASVM(P_train,P_test,T_train,T_test,kerneltype)display('AOA Working');%Two variables to keep the positions and the fitness value of the best-obtained solutionDim=2;N=5;%种群数量M_Iter=10;%寻优代数%范围LB=[1e-3 1e-3];UB=[1 1];
在函数AOASVM中设置种群数量、寻优代数、参数维度及限制范围。
for i=1:N%随机初始化速度,随机初始化位置for j=1:DimX( i, j ) = (UB(j)-LB(j))*rand+LB(j); endendXnew=X;Ffun=zeros(1,size(X,1));% (fitness values)Ffun_new=zeros(1,size(Xnew,1));% (fitness values)%%设置AOA参数MOP_Max=1;MOP_Min=0.2;C_Iter=1;Alpha=5;Mu=0.499;%% 计算初始适应度值for i=1:size(X,1)Ffun(1,i)=fitnesssvm(X(i,:),P_train,P_test,T_train,T_test,kerneltype); %Calculate the fitness values of solutionsif Ffun(1,i)<Best_FFBest_FF=Ffun(1,i);Best_P=X(i,:);endend
初始化种群及AOA参数值,然后开始计算适应度函数值,并在适应度值得指引下迭代更新种群,最终获取最优种群。