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 figure plot(1-trace) legend('寻优进化曲线') xlabel('寻优代数') ylabel('适应度值') %% 采用优化的值重新训练svm gam=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); clc train_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 solution
Dim=2;
N=5;%种群数量
M_Iter=10;%寻优代数
%范围
LB=[1e-3 1e-3];
UB=[1 1];
在函数AOASVM中设置种群数量、寻优代数、参数维度及限制范围。
for i=1:N%随机初始化速度,随机初始化位置
for j=1:Dim
X( i, j ) = (UB(j)-LB(j))*rand+LB(j);
end
end
Xnew=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 solutions
if Ffun(1,i)<Best_FF
Best_FF=Ffun(1,i);
Best_P=X(i,:);
end
end
初始化种群及AOA参数值,然后开始计算适应度函数值,并在适应度值得指引下迭代更新 种群,最终获取最优种群。
3、部分效果展示
扫描二维码关注公众号,回复:
14714974 查看本文章