优化算法优化支持向量机(SVM)进行分类

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、部分效果展示

 

 

 

猜你喜欢

转载自blog.csdn.net/m0_61363749/article/details/126136601