一、研究背景
时间序列预测在金融、气象、能源、交通等领域具有重要应用价值。传统的预测方法如ARIMA、SVM等在某些复杂非线性场景下表现有限。极限学习机(Extreme Learning Machine, ELM)因其训练速度快、泛化能力强而受到广泛关注,但其稳定性较差,容易受到样本分布不均的影响。为此,结合AdaBoost(Adaptive Boosting)集成学习策略,可以提升ELM的预测精度和鲁棒性。本文基于MATLAB实现了一个ELM-Adaboost组合模型,用于时间序列预测任务。
二、主要功能
本代码实现了以下功能:
- 读取Excel格式的时间序列数据;
- 通过滑动窗口构造训练样本和标签;
- 划分训练集和测试集;
- 数据归一化处理;
- 构建多个ELM弱预测器,并使用AdaBoost算法进行加权集成;
- 输出强预测器的预测结果;
- 计算多种误差指标(MAE、MAPE、MSE、RMSE、R²、RPD);
- 可视化训练集和测试集的预测结果及误差。
三、算法步骤
数据预处理
- 读取Excel数据;
- 设置输入时间步数(
n_in)和输出步数(n_out); - 调用
data_collation函数,通过滑动窗口生成样本; - 按比例划分训练集和测试集;
- 使用
mapminmax对输入输出进行归一化。
AdaBoost增强学习
- 初始化样本权重;
- 循环训练K个ELM弱预测器;
- 计算每个弱预测器的预测误差,并根据误差阈值更新样本权重;
- 计算弱预测器的权重;
- 归一化权重,进入下一轮训练。
强预测器预测
- 将各弱预测器的预测结果按权重线性组合,得到最终预测值。
误差计算与可视化
- 调用
calc_error函数计算多种误差指标; - 绘制训练集和测试集的预测对比图、误差图。
- 调用
四、技术路线
原始数据 → 滑动窗口构造样本 → 训练/测试划分 → 归一化 → AdaBoost循环(训练ELM → 误差计算 → 权重更新) → 强预测器输出 → 反归一化 → 误差评估 → 可视化五、公式原理
1. 极限学习机(ELM)
ELM是一种单隐层前馈神经网络,其输出为:
f(x)=h(x)β f(x) = h(x) \betaf(x)=h(x)β
其中 ( h(x) ) 是隐层输出矩阵,( \beta ) 是输出权重,通过最小二乘法求解:
β=H†T \beta = H^\dagger Tβ=H†T
2. AdaBoost权重更新
设第iii个弱预测器的误差为:
Ei=∑j=1nDi(j)⋅I(∣ej∣>θ) E_i = \sum_{j=1}^{n} D_{i}(j) \cdot \mathbb{I}(|e_j| > \theta)Ei=j=1∑nDi(j)⋅I(∣ej∣>θ)
其中eje_jej为第jjj个样本的预测误差,θ\thetaθ为误差阈值(代码中设为0.2)。
弱预测器权重为:
αi=0.5exp(∣Ei∣) \alpha_i = \frac{0.5}{\exp(|E_i|)}αi=exp(∣Ei∣)0.5
样本权重更新:
Di+1(j)=Di(j)⋅{1.1,if ∣ej∣>θ1,otherwise D_{i+1}(j) = D_i(j) \cdot \begin{cases} 1.1, & \text{if } |e_j| > \theta \\ 1, & \text{otherwise} \end{cases}Di+1(j)=Di(j)⋅{1.1,1,if∣ej∣>θotherwise
最后对权重进行归一化。
3. 强预测器输出
F(x)=∑i=1Kαifi(x) F(x) = \sum_{i=1}^{K} \alpha_i f_i(x)F(x)=i=1∑Kαifi(x)
其中fi(x)f_i(x)fi(x)为第iii个ELM的预测值。
六、参数设定
| 参数名 | 值 | 说明 |
|---|---|---|
n_in | 3 | 输入时间步数(历史时刻数) |
n_out | 1 | 预测未来步数(单步预测) |
num_samples | 500 | 构造的样本总数 |
scroll_window | 1 | 滑动窗口步长 |
num_size | 0.8 | 训练集比例 |
K | 10 | 弱预测器数量(ELM个数) |
ELM隐层节点数 | 80 | 每个ELM的隐层神经元数量 |
激活函数 | ‘sig’ | Sigmoid激活函数 |
误差阈值 | 0.2 | 用于判断误差是否较大 |
七、运行环境
- 软件版本:MATLAB R2018b 及以上
- 依赖函数:
data_collation(自定义数据整理函数)elmtrain(ELM训练函数)elmpredict(ELM预测函数)calc_error(误差指标计算函数)
- 输入文件:
数据集.xlsx(时间序列数据,每列一个特征) - 输出文件:
ELM_Adaboost.mat(保存预测结果)true.mat(保存真实值)
八、应用场景
该模型适用于以下典型时间序列预测任务:
- 电力负荷预测:根据历史负荷数据预测未来时段负荷;
- 股票价格预测:基于历史价格和交易量进行短期趋势预测;
- 气象数据预测:如温度、湿度、风速等;
- 交通流量预测:预测某路段未来时段的车流量;
- 工业过程控制:如设备状态、能耗预测等。
九、总结
本文提出的ELM-Adaboost模型结合了ELM的快速训练能力和AdaBoost的集成学习优势,能够有效提升时间序列预测的准确性和稳定性。代码实现清晰,易于扩展,适合作为学术研究或工程应用中的基线模型。