
16种时间序列数据分解方法:包括EMD、EEMD、CEEMD、FEEMD、CEEMDAN等
时间序列分解这玩意儿就像拆乐高——你得把趋势、周期、噪声这些成分一个个拆出来看。今天咱们
来盘一盘那些能帮你拆数据的工具,手把手教你怎么用代码把它们玩转。别被那些高大上的缩写吓到,咱
直接上干货!
先拿最经典的EMD(经验模态分解)开刀。这货处理非平稳数据贼溜,核心思想就是找到数据本身的
震荡模式。PyEMD库已经帮我们封装好了,上代码:
```python
from PyEMD import EMD
import numpy as np
import matplotlib.pyplot as plt
t = np.linspace(0, 1, 200)
s = np.cos(11*2*np.pi*t*t) + 3*t # 非线性信号
emd = EMD()
IMFs = emd(s)
plt.figure(figsize=(10,6))
for i, imf in enumerate(IMFs):
plt.subplot(len(IMFs)+1, 1, i+1)
plt.plot(t, imf)
plt.show()
```
运行这段代码你会看到信号被拆成了若干IMF(本征模态函数)。重点注意`EMD()`里的`max_imf`参
数,控制分解层数,别设太大否则会拆出没意义的成分。残差项就是最后那个单调趋势,用来捕捉长期变化
。
但EMD有个毛病——模态混叠。这时候EEMD(集合经验模态分解)就该出场了。它通过加噪声多次分解
再取平均来解决问题:
```python
from PyEMD import EEMD
eemd = EEMD(trials=50, noise_width=0.05)
eIMFs = eemd(s)
# 绘制代码同上,替换变量即可