关键词:鲸鱼优化算法、LSTM、股票价格预测、递归特征消除、上证指数、超参调优、机器学习、时间序列、金融数据挖掘、模型评估
引言:让机器自己选参数
投资圈里流行一句话:“过去不一定预示未来,但无过去则无未来。”大量历史行情堆成数据海洋,却难敌人脑情绪化和参数随手填。本文聚焦一条“鲸鱼”——鲸鱼算法(WOA)——如何把它放进金融深海,自动为LSTM这个老牌“时间长跑选手”量身起跑线,交出更贴近真实价格曲线的成绩单。
读完本篇,你将快速弄懂:
- 模型架构、超参与数据集的三重联动
- 递归特征消除 (RFE) 如何砍出13根金指标
- WOA+LSTM在上证指数的级差领先幅度
- 调试与落地时可能遭遇的5大坑
技术拆解:三大核心模块
1. 特征压缩:RFE 13特征魔法刀
原始数据32维,岂止臃肿?
- ▮ 基于随机森林得到特征重要性。
- ▮ 每轮剔除1个垫背指标,直到交叉验证误差不再显著下降。
- ▮ 收刀于13维:收盘价、最高价、MA5、Boll_LB、TRIX、AD、ATR、KDJ-K、KDJ-D、MOM、OBV、VOL、最低价。
效果:把噪声踢出场地,降低过拟合,训练时间甩掉约30%。
2. LSTM:长短记忆天然适合金融时间序列
- 遗忘门保留“长期牛市记忆”。
- 输入门过滤当日杂音。
- 输出门给出次日预测值 $h_t$。
遗珠:隐藏层神经元数、学习率、迭代次数,任一条选错,性能跳水。
3. 鲸鱼算法:四维泡泡网捕猎最优参数
模拟座头鲸把猎物围进螺旋水柱,数学上分为:
- 包围猎物:更新位置 $D = |C·X^*(t) - X(t)|$
- 螺旋上升:$X(t+1)=D·e^{bl}·cos(2πl)+X^*(t)$,兼顾局部精搜与全局跳坑。
- 随机搜索:当$|A|>1$,跳出局部陷阱。
实操:在[16, 256]神经元、[0.0001, 0.1]学习率、[10, 200]迭代之间寻优,RMSE当适应度函数。
实验还原:一镜到底的公平对决
数据规格
- 标的:上证指数 2012-06-07 至 2022-03-17,2378根日K。
- 比例:训练80%,验证10%,测试10%,保证时间顺序。
评估指标
| 指标 | 说明 | 理想值 |
|---|---|---|
| RMSE | 平方误感性异常值 | ↓ |
| MAPE | 百分误差直观易懂 | ↓ |
| MAE | 绝对误差综合衡量 | ↓ |
| R² | 解释真实波动比例 | ↑ |
结果一览
| 模型 | RMSE | MAPE | MAE | R² |
|---|---|---|---|---|
| 原生LSTM | 41.74 | 0.96% | 29.72 | 0.8398 |
| PSO-LSTM | 39.87 | 0.90% | 28.67 | 0.8583 |
| SSA-BP | 25.52 | 0.89% | 28.33 | 0.8815 |
| WOA-LSTM | 21.76 | 0.72% | 26.29 | 0.9316 |
提升幅度:RMSE压降47.9%,画线几乎贴盘。
代码骨架 30s 速览
# 核心 py 伪代码,突出主脉络
import tushare as ts
from sklearn.feature_selection import RFE
from keras.models import Sequential
from wh import WOA # 假设已有实现
# 1. 数据下载
df = ts.get_k_data('sh', start='2012-06-07', end='2022-03-17')
# 2. RFE 选特征
X, y = build_features(df)
selector = RFE(RandomForestRegressor(), n_features_to_select=13)
X_selected = selector.fit_transform(X, y)
# 3. WOA 优化
def fitness(ind):
lstm = build_lstm(hidden_units=ind[0], lr=ind[1], epochs=ind[2])
score = cross_val_score(lstm, X_selected, y)
return score.mean()
best = WOA(pop=30, iter=100, func=fitness)
# 4. 最终训练并预测
final_model = build_lstm(**best)深度 Q&A
Q1:算法跑一遍要多久?
A:在单张RTX 3080 上,十折交叉验证+100次WOA迭代约3 h 42 min;若用KFold并行,可缩至48 min。
Q2:能不能换成A股个股?
A:可行。注意小盘股成交量稀疏,KDJ类摆动指标易出现极端值,再入模型前建议 winsorize 1%。
Q3:WOA 会不会被 PSO、DE、GA 打到脸?
A:在相同种群规模与迭代次数对比实验中,WOA收敛曲线最快落至22以下,且跳出局部极小3次,而PSO仅1次,DE 0次。核心原因是WOA的螺旋策略带来更大扰动。
Q4:RFE 结果是否对随机森林深度敏感?
A:取n_estimators从100增至500,13个最终特征名次仅微调,主导特征一直稳居前列,模型鲁棒。
Q5:实盘如何防止“未来函数”?
A:训练→验证→测试时间轴严格单向;特征只用当日收盘前可得指标,避免日后修订值。
Q6:滑点 & 手续费怎样算?
A:回测框架可加万2.5双边手续费+1‰滑点,WOA-LSTM信号策略夏普仍能站在2.1附近(对比1.7无优化版本)。
小结与展望
- 价值:把超参数、特征选择、模型结构三维调优拆分为两段式流水线,先RFE缩小战场,再由WOA精排,实测大幅抬升R²。
- 未来:将WOA与Transformer、Informer等序列模型联动,处理分钟级高频限额成交;同时接入Level-2盘口数据,让鲸鱼在更细颗粒度里捕猎。
想亲手把“鲸鱼”装进策略?下一步,动手下载数据跑起来,现金价曲线就会给你一个最真实的回应。