码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 基于WOA的VMD超参数优化


    目录

    1 原理

    2 实战

    2.1 原始时间序列

     2.2 直接设置参数进行VMD分解

     2.3 WOA优化VMD超参数

     2.4 利用优化的参数进行VMD分解

     3 代码


    在VMD--变分模态分解的使用中,他的k和alpha对分解结果影响很大,大量文章对这两个参数进行 了优化选择,比如通过分析模态的fft频谱,有通过优化算法的优化选择,网上也有少量matlab案例,但python的基本上没有,针对这个,本人写了一个python版本的。

    1 原理

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

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

    当然样本熵有其局限性,所以目前又有很多方法,比如最小化包络熵、最小化谱相关峭度等,本文依旧以最小化局部样本熵为出发点编程

    1. '''适应度函数,最小化各VMD分量的局部样本熵'''
    2. def fitness(pop,data):
    3. np.random.seed(0)
    4. K = int(pop[0])
    5. alpha = int(pop[1])
    6. #print(K,alpha)
    7. tau = 0
    8. DC = 0
    9. init = 1
    10. tol = 1e-7
    11. imf,res,u_hat,omega=VMD(data, alpha, tau, K, DC, init, tol)
    12. comp=np.vstack([imf,res.reshape(1,-1)])
    13. SE = 0
    14. se_imf=[]
    15. for i in range(comp.shape[0]):
    16. temp= sampEn(comp[i,:], np.std(comp[i,:]),2, 0.15)
    17. SE +=temp
    18. se_imf.append(temp)
    19. # fit = SE
    20. # fit = SE/K
    21. fit = min(se_imf)
    22. np.random.seed(int(time.time()))
    23. return fit

    2 实战

    2.1 原始时间序列

     2.2 直接设置参数进行VMD分解

     2.3 WOA优化VMD超参数

            由于我们是最小化局部样本熵,所以适应度曲线是一条下降的曲线

    最优的k和alpha为9和65

    1. iteration 1 = 0.03475234914892587 [6, 715]
    2. iteration 2 = 0.03474872927521434 [6, 721]
    3. iteration 3 = 0.03423725134060173 [8, 882]
    4. iteration 4 = 0.034142069286057515 [9, 920]
    5. iteration 5 = 0.015960969553223837 [9, 65]
    6. iteration 6 = 0.015960969553223837 [9, 65]
    7. iteration 7 = 0.015960969553223837 [9, 65]
    8. iteration 8 = 0.015960969553223837 [9, 65]
    9. iteration 9 = 0.015960969553223837 [9, 65]
    10. iteration 10 = 0.015960969553223837 [9, 65]

     2.4 利用优化的参数进行VMD分解

     3 代码

    看我的博客评论区

  • 相关阅读:
    freeswitch sofia协议栈调试
    【BI看板】Superset2.0+图表二次开发初探
    学习JavaScript由浅到深【含案例源码】
    Google | Google Kubernetes Engine 集群实战
    Ruby on Rails 实践:课程导读
    Windows Server 2016 ServU-v6.30
    欧拉路径与欧拉回路
    【Python】Labelme/PIL读取图片朝向错误解决
    计算机组成原理——中央处理器-指令执行过程(课程笔记)
    LeetCode每日一题——2678. Number of Senior Citizens
  • 原文地址:https://blog.csdn.net/qq_41043389/article/details/127762397
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号