我在做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函数的参数,迭代次数的增加肯定会延长跑代码的时间,在大数据挖掘中,这样会非常耗时。