解决python使用pyhht库里的EMD分解函数爆出错误:Emd:warning, Forced stop of sifting - Maximum iteration limit reached.

我在做EMD分解的时候总会爆出一些奇奇怪怪的提示:

Mode 1, Iteration 600
1 minima > 0; 1039 maxima < 0.
Mode 1, Iteration 800
1 minima > 0; 1041 maxima < 0.
Mode 1, Iteration 1000
3 minima > 0; 1040 maxima < 0.
Mode 1, Iteration 1200
5 minima > 0; 1042 maxima < 0.
Mode 1, Iteration 1400
1 minima > 0; 1040 maxima < 0.
Mode 1, Iteration 1600
0 minima > 0; 1040 maxima < 0.
Mode 1, Iteration 1800
1 minima > 0; 1043 maxima < 0.

在这里插入图片描述
反映到结果上就是别的都分解成很多imf,但是在某一个epoch里只能分解出两个imf(图中的第一行是原数据)
在这里插入图片描述
这个是正常分解的
在这里插入图片描述
这个是不正常的

我在百度上找了很久都没有找到解决方法,大部分是MATLAB的,但是MATLAB那个函数要改的参数跟这个不一样,我就很不解,今天跑代码很意外的出现了这个错误:Emd:warning, Forced stop of sifting - Maximum iteration limit reached.翻译过来应该就是:达到了最大迭代次数。
在这里插入图片描述
然后伴随着就是这个分解imf的数量很少,我就去谷歌上搜这个错误,看到了两个人的对话,说是可以通过改最大迭代次数,来解决迭代次数超限制这个问题,我就点进了pyhht库里的EMD函数里去找这个错误的触发条件,我就看到了这个:

if (self.nbit == (self.maxiter - 1)) and not(self.fixe) and (self.nbit > 100):
                    warnings.warn("Emd:warning, Forced stop of sifting - " +
                                  "Maximum iteration limit reached.")

我猜这个maxiter就是这个最大迭代迭代次数的限制,我就去找,在函数里哪里定义了这个变量,我就找到了开头的部分有这么一部分代码:

def __init__(self, x, t=None, threshold_1=0.05, threshold_2=0.5, alpha=0.05,
                 is_mode_complex=None, ndirs=4, fixe=0, maxiter=2000,
                 fixe_h=0, n_imfs=0, nbsym=2):
        """Empirical mode decomposition.

然后我就尝试了一下把这个maxiter改了一下,改到了8000,然后看了看实验结果:
在这里插入图片描述
针不戳!
但是建议跑正常的数据的时候别动原来EMD函数的参数,迭代次数的增加肯定会延长跑代码的时间,在大数据挖掘中,这样会非常耗时。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值