Python-实战:基于白鲸BWO算法的VMD超参数优化

目录

1、白鲸优化算法

 2、BWO优化VMD参数

3、实战

3.1 原始时间序列数据

 3.2 VMD分解--直接设置参数

 3.3 采用BWO优化VMD

4、代码


        在博客的基础上,本文利用白鲸优化算法对VMD的参数进行优化,采用python实现。

1、白鲸优化算法

        白鲸优化算法([Beluga whale optimization,BWO)是由是由 Changting Zhong 等于2022 年提出的一种群体智能优化算法。其灵感来源于白鲸的群体觅食行为,具有3个阶段,分别是:探索、开发、鲸落,如下

Python-实战:基于白鲸BWO算法的VMD超参数优化_第1张图片

 2、BWO优化VMD参数

        时间序列越复杂,包络熵的计算值越大,反之亦然。因此,应用VMD对信号进行分解后,计算每个子序列的包络值,包络最小的序列为所分解序列的趋势项。

        当分解数K较小时,可能导致信号分解不足,趋势项中混入其他干扰项,导致包络熵值变大。当取适当的K值时,趋势项的包络熵变小。因此,将分解出的IMF中的最小的那个熵(局部包络熵)最小化时,VMD分解为最佳。

        那么如何去找到局部包络熵,就需要用到白鲸优化算法,当前其他的优化算法都是可以实现的。适应度函数如下:

'''适应度函数,最小化各VMD分量的局部包络熵'''
def fitness(pop,data):
    np.random.seed(0)
    
    K = int(pop[0])
    alpha = int(pop[1])
    #print(K,alpha)
    tau = 0  
    DC = 0         
    init = 1         
    tol = 1e-7
    imf,res,u_hat,omega=VMD(data, alpha, tau, K, DC, init, tol)
    comp=np.vstack([imf,res.reshape(1,-1)])
    SE = 0
    se_imf=[]
    for i in range(comp.shape[0]):
        temp= BaoLuoShang(comp[i,:])
        SE +=temp
        se_imf.append(temp)
    # fit = SE
    # fit = SE/K
    fit = min(se_imf)
    
    
    np.random.seed(int(time.time()))
    return fit 

3、实战

3.1 原始时间序列数据

Python-实战:基于白鲸BWO算法的VMD超参数优化_第2张图片

 3.2 VMD分解--直接设置参数

alpha = 10.0
K = 3    
tau = 0  
DC = 0         
init = 1         
tol = 1e-7
imf,res,u_hat,omega=VMD(data, alpha, tau, K, DC, init, tol)

Python-实战:基于白鲸BWO算法的VMD超参数优化_第3张图片

 3.3 采用BWO优化VMD

Python-实战:基于白鲸BWO算法的VMD超参数优化_第4张图片

Python-实战:基于白鲸BWO算法的VMD超参数优化_第5张图片

最优的k和alpha为5和4

t:1 ,best fit=2.7628 ,best pop= [2, 108]
t:2 ,best fit=2.7628 ,best pop= [2, 108]
t:3 ,best fit=2.7538 ,best pop= [4, 51]
t:4 ,best fit=2.7538 ,best pop= [4, 51]
t:5 ,best fit=2.7441 ,best pop= [2, 20]
t:6 ,best fit=2.7288 ,best pop= [5, 4]
t:7 ,best fit=2.7288 ,best pop= [5, 4]
t:8 ,best fit=2.7288 ,best pop= [5, 4]
t:9 ,best fit=2.7288 ,best pop= [5, 4]
t:10 ,best fit=2.7288 ,best pop= [5, 4]

4、代码

详细代码见评论区

你可能感兴趣的:(特征选择,python,算法,人工智能)