基于相空间重构的混沌背景下微弱信号检测算法matlab仿真,对比SVM,PSO-SVM以及GA-PSO-SVM

115 阅读5分钟

1.算法运行效果图预览

1.jpeg

2.jpeg

3.jpeg  

 

SVM:

 

4.jpeg

5.jpeg

  PSO-SVM:

  3056247359742c0b4ebe8fb056025d68_82780907_202311070005240302786843_Expires=1699287324&Signature=uL6aZr0U%2F%2FNCpQTJThEX0OnbFIM%3D&domain=8.jpeg   da728a1eacff869b2af8057522969aa8_82780907_202311070005240333890898_Expires=1699287324&Signature=bqOAZt1RoB1bXqczv%2FqqmB%2BPOPs%3D&domain=8.jpeg

GA-PSO-SVM:

b48a2dd3185d90fbba3c0c1acd8e2443_82780907_202311070006360224785228_Expires=1699287396&Signature=qWHkrIQ5GFgUnQEdS5HY6EXLMMY%3D&domain=8.jpeg

a163eb8b540283e9625602bfce85c271_82780907_202311070006360302243528_Expires=1699287396&Signature=IVmlLXlfhSs%2BXSgDAmgm16FSdoE%3D&domain=8.jpeg  

 以上仿真图参考文献《基于相空间重构的混沌背景下微弱信号检测方法研究》

 

2.算法运行软件版本

MATLAB2022a

 

3.算法理论概述

3.1 SVM

       支持向量机(Support Vector Machine,SVM)是一种用于分类和回归的机器学习方法,其原理基于寻找一个最优超平面(或者曲线在非线性情况下)来划分不同类别的数据点。SVM 的目标是找到一个能够最大化不同类别之间的间隔(margin)的超平面,从而在未知数据上取得良好的泛化能力。

 

        SVM 的目标是找到一个超平面,使得距离超平面最近的数据点(支持向量)到超平面的距离(间隔)最大。这个间隔可以用数据点到超平面的函数距离来表示,即:

 

d8abc4d0d9625742650f2a22ccc16fc4_82780907_202311070007380333622162_Expires=1699287458&Signature=5rFSy4nWdGpHuSL%2FWyWKlswEfUI%3D&domain=8.png

 

SVM 的目标是解决以下优化问题:

 

8a3628f0e6a6eb818a379c91bb9869ed_82780907_202311070008200567251351_Expires=1699287500&Signature=a%2BAa4h85EN1DOZrlxoI11Qcxbi0%3D&domain=8.png

 

        在非线性情况下,SVM 可以通过引入核函数将数据从原始特征空间映射到高维特征空间,从而找到一个在高维空间中的超平面来进行分类。常见的核函数包括线性核、多项式核、高斯核(RBF核)等。

        总结起来,SVM 的原理在于寻找一个最优的超平面或曲线,使得不同类别之间的间隔最大化,从而实现分类任务。它的优势在于能够处理高维数据、非线性问题,并且在一定程度上能够抵抗过拟合。

 

3.2 PSO-SVM

       在将PSO应用于SVM的优化过程中,我们主要关注SVM的超参数,如核函数类型、正则化参数C等。PSO算法可以帮助我们找到一组超参数,使得SVM在训练数据上的性能最佳。

 

f7c7552912c20e21f960fe00ccc420ce_82780907_202311070009120988991668_Expires=1699287553&Signature=XfZlkcG2Zvg2gz%2F5p1fbe2jgGHw%3D&domain=8.png

 

        在PSO-SVM中,适应度函数通常是SVM在训练集上的性能指标,如准确率、F1分数等。通过PSO算法优化SVM的超参数,可以帮助我们找到一组最优的超参数配置,从而提高SVM在分类问题中的性能表现。这种方法可以在一定程度上自动搜索超参数空间,避免了手动调整的繁琐过程。

 

3.3 GA-PSO-SVM

       GA-PSO结合了遗传算法的群体进化和粒子群优化的局部搜索能力。遗传算法通过模拟生物进化的过程,通过交叉、变异等操作对种群中的个体进行优化。粒子群优化模拟了鸟群或鱼群等自然界中群体行为,通过个体历史最优和群体历史最优来调整粒子的位置。

 

        在将GA-PSO应用于SVM的优化过程中,我们主要关注SVM的超参数,如核函数类型、正则化参数C等。GA-PSO算法可以帮助我们在超参数空间中搜索到更优的解,以提高SVM在训练数据上的性能。GA-PSO的公式包括遗传算法的选择、交叉和变异操作,以及粒子群优化的速度和位置更新公式。这些公式可以根据具体的算法变体进行调整。

 

        总体而言,GA-PSO算法将遗传算法和粒子群优化结合起来,通过遗传算法的全局搜索和粒子群优化的局部搜索,以及SVM的性能评估,实现对SVM超参数的优化。这种方法可以更全面地搜索超参数空间,从而提高SVM在分类问题中的性能。

 

 

 

4.部分核心程序 `while gen < MAXGEN;  

      gen

      w       = wmax-gen*(wmax-wmin)/MAXGEN;

      FitnV = ranking(Objv);   

      Selch = select('sus',Chrom,FitnV);   

      Selch = recombin('xovsp',Selch,0.9);  

      Selch = mut(Selch,0.1);  

      phen1 = bs2rv(Selch,FieldD);  

      %基于粒子群的速度更新

      for i=1:1:NIND

          if gen > 1

              va(i)  = wva(i) + c1rand(1)(phen1(i,1)-taos2)   + c2rand(1)*(taos-taos2);

              vb(i)  = wvb(i) + c1rand(1)(phen1(i,2)-ms2)     + c2rand(1)*(ms-ms2);

              vc(i)  = wvc(i) + c1rand(1)(phen1(i,3)-Cs2)     + c2rand(1)*(Cs-Cs2);

              vd(i)  = wvd(i) + c1rand(1)(phen1(i,4)-gammas2) + c2rand(1)*(gammas-gammas2);

          else

              va(i)  = 0;

              vb(i)  = 0;

              vc(i)  = 0;

              vd(i)  = 0;

          end

      end

     

      for a=1:1:NIND 

          Data1(a,:) = phen1(a,:);     

          tao        = round(Data1(a,1) + 0.15*va(i));%遗传+PSO

          m          = round(Data1(a,2) + 0.15*vb(i));

          C          = Data1(a,3)       + 0.15*vc(i);

          gamma      = Data1(a,4)       + 0.15*vd(i);

         

            if tao >= max1

               tao  = max1;

            end

            if tao <= min1

               tao  = min1;

            end    

            if m >= max2

               m = max2;

            end

            if m <= min2

               m = min2;

            end 

            if C >= max3

               C = max3;

            end

            if C <= min3

               C = min3;

            end 

            if gamma >= max4

               gamma = max4;

            end

            if gamma <= min4

               gamma = min4;

            end  

 

           

          %计算对应的目标值

          [epls,tao,m,C,gamma] = func_fitness(X_train,X_test,tao,m,C,gamma);

          E                    = epls;

          JJ(a,1)              = E;

      end

     

      Objvsel=(JJ);   

      [Chrom,Objv]=reins(Chrom,Selch,1,1,Objv,Objvsel);  

      gen=gen+1;

 

      %保存参数收敛过程和误差收敛过程以及函数值拟合结论

      Error(gen) = mean(JJ);

      pause(0.2);

      [V,I] = min(Objvsel);

      JI      = I;

      tmpps    = Data1(JI,:);

      taos2    = round(tmpps(1));

      ms2      = round(tmpps(2));

      Cs2      = tmpps(3);

      gammas2  = tmpps(4);

end

 

[V,I] = min(Objvsel);

JI      = I;

tmpps   = Data1(JI,:);

tao0    = round(tmpps(1));

m0      = round(tmpps(2));

C0      = tmpps(3);

gamma0  = tmpps(4);

 

 

%save GAPSO.mat tao0 m0 C0 gamma0

end

 

 

 

 

if SEL == 2

load GAPSO.mat

%调用四个最优的参数

tao   = tao0;

m     = m0;

C     = C0;

gamma = gamma0;

 

 

 

%先进行相空间重构

[Xn ,dn ] = func_CC(X_train,tao,m);

[Xn1,dn1] = func_CC(X_test,tao,m);

 

t  = 1/1:1/1:length(dn1)/1;

f  = 0.05;

sn = 0.0002sin(2pift);

%叠加

dn1 = dn1 + sn';

 

%SVM训练%做单步预测

cmd = ['-s 3',' -t 2',[' -c ', num2str(C)],[' -g ',num2str(gamma)],' -p 0.000001'];

model = svmtrain(dn,Xn,cmd);

%SVM预测

[Predict1,error1] = svmpredict(dn1,Xn1,model);

RMSE              = sqrt(sum((dn1-Predict1).^2)/length(Predict1));

Err               = dn1-Predict1;

%误差获取

clc;

RMSE

 

figure;

plot(Err,'b');

title('混沌背景信号的预测误差');

xlabel('样本点n');

ylabel('误差幅值');

Fs = 1;

y  = fftshift(abs(fft(Err)));

N  = length(y)

fc = [-N/2+1:N/2]/N*Fs;

figure;

plot(fc(N/2+2:N),y(N/2+2:N));

xlabel('归一化频率');

ylabel('频谱');

text(0.06,0.07,'f=0.05Hz');

end`