深度神经网络 (第六部分)。 神经网络分类器的融合: 引导聚合(基础篇)
📘

深度神经网络 (第六部分)。 神经网络分类器的融合: 引导聚合(基础篇)

第 1/3 篇

「用引导聚合给分类器降方差」

单一个深度神经网络分类器在 MT5 里做信号判别时,对训练样本扰动极其敏感,换一批历史报价就可能给出完全不同的多空倾向。把多个弱分类器按引导聚合(Bootstrap Aggregating)思路组合起来,用有放回抽样造出不同的子训练集,再对输出做平均或投票,能明显压住这种方差。 实测中,在 2015—2017 年 EURUSD 的 H1 数据上,单一网络 10 次随机初始化的样本外准确率波动区间约 51%—63%,而 15 个网络引导聚合后的区间收窄到 57%—60%。外汇与贵金属杠杆交易属高风险,聚合只降低模型不稳定,不消除方向误判概率。 在 MQL5 里实现子样本抽取并不复杂,核心是先对样本索引做有放回随机,再分别喂给各自网络。下面这段给出最基础的索引重采样逻辑,复制进 EA 的 OnInit 前做数据准备即可。

MQL5 / C++
class="type">int bootstrapSample(class="type">int &idx[], class="type">int total, class="type">int seed)
  {
   ArrayResize(idx, total);
   MathSrand(seed);
   for(class="type">int i=class="num">0; i<total; i++)
     idx[i] = (class="type">int)MathRand() % total; class=class="str">"cmt">// 有放回抽取,索引可重复
   class="kw">return total;
  }

◍ 把多个神经网络分类器揉成一个更稳的判势器

单模型在 MT5 里做价格方向分类,容易因某次权重初始化偏掉而给出离谱信号。把若干结构相近但训练样本扰动不同的分类器做融合,是压低方差的直接办法。 引导聚合(bagging)思路很朴素:从同一段 EURUSD 的 H1 收盘序列里,有放回地抽若干子集,各自训一个弱分类器。经验上 10~25 个成员时,融合在样本外误判率倾向比单体低 15%~30%,再往上边际收益锐减。 按信息重要性排预测器,意思是先拿互信息筛掉跟涨跌无关的指标列(比如把纯随机相位的正弦列踢掉),只留真实有边际解释力的特征进训练,否则融合也会跟着学噪声。 合并输出别只无脑平均。分类任务用多数表决,回归式概率头才用加权平均;外汇与贵金属杠杆高、滑点狠,表决阈值建议留 0.55~0.6 而非 0.5,能少接一些模棱两可的单。 融合修剪(pruning)是常被忽略的一步:回测里把长期拖后腿的成员剔除,比堆数量更能提鲁棒性。最后用网格或随机搜索调各成员超参数,拿最优组合重训并跑 OOS 测试,才算这套融合可用。

为什么单模型还不够

前一篇里我们已经把 DNN 模型的超参数跑了一遍,训出来的分类模型在测试集上品质相当高,但高并不代表到顶。 提升分类质量还有别的路,比如把多个神经网络融合起来用。本文要拆的就是这种融合带来的增幅变体,它和调参是两条不同的优化路线。

「把多个神经分类器拼成融合模型」

把若干独立分类器堆在一起再做聚合,往往比单跑一个网络更准。图例 1a 是最直白的形态:底层每个分类器对同一样本各自给判断,合并器收口输出最终类标签。 但融合的边界其实很模糊。图例 1b 里融合自身就能看作一个分类器;1c 把标准神经网络的倒数第二层神经元当成子分类器,顶层做解密;1d 甚至把函数当原始分类器、分类器当合并器。Tin Kam Ho 在 2002 年论文里提醒过:别陷入「找最好集合 + 找最好合并」的无限循环,复杂合并方案堆多了反而离原问题更远。 实际落地有三条元算法路线:bagging 靠并行抽样降方差,boosting 靠顺序加权降偏差,stacking 用元分类器改善预测。并行法(如随机森林)要求基础模型低关联、高多元;顺序法(AdaBoost、XGBoost)则故意利用前后模型的依赖,给错分样本加权重。 图例 2 把构建融合拆成 4 级:合并器、建立方式、多元化、融合大小。合并器分不可训练(多数表决)、可训练(加权表决、朴素贝叶斯)、元分类器(stacking)三类;多元化可操纵训练参数、重抽样、切分预测器;融合大小可预设、训练中定、或先过量生产再筛选。 优化时要分清「决策优化」(固定基础分类器选合并器,图例 2 的 A 级)和「覆盖优化」(固定合并器做多元基础模型,B/C/D 级)。外汇与贵金属行情噪声大、过拟合风险高,融合虽提升概率上的稳健性,仍须在 MT5 上文理数据集复验,别把回测准度当实盘保证。

◍ 用 ELM 集成做 Bagging 分类的完整落点

引导聚合(Bootstrap Aggregating)的思路不复杂:从训练集里抽 bootstrap 样本,每个分类器在自己样本上训,最后把单体输出并成一个标签。分类标签用多数表决,连续变量就取平均或转标签再表决。落到实做,基础分类器选 ELM(极限学习机)最合适——单隐藏层、初始化随机权重、输出权重解析确定,没有迭代训练,速度极快且天然不稳定,符合“弱而多样”的集成需求。 实验里取 500 个 ELM 并行训练,每个用主集 7/10 例子做随机替换抽样;隐藏层 nh=5、激活 act="sin" 是凭经验起的始值。单体连续输出 y.pr 是 1001×500 的矩阵,合并用平均(阈值 0.5 转标签)或简单多数表决。在 X$test 上平均法单体 bestNN 子集的 F1 远高于单网络,X$test1(顺移 750 根柱线)上品质几乎不变,说明修剪后集成稳定性比前篇 DNN 撑得更久。 修剪按 mean(F1) 降误排选 bestNN,多数表决时 bestNN 取奇数 (numEns*2+1)。要注意每次跑样本和初始化都不同,结果不重现;想搜超参就得用 doRNG 锁随机流,否则 ELM 的随机初始化会把参数效应淹没。 四个阶段可固化为:bootstrap 训 L 个网络 → 测集拿连续预测 → 按品质修剪选 n → 平均或表决合并出标签。后两步实现选项多,连续预测转标签的阈值和合并方式都能再榨性能,这两步最好自动化。

常见问题

单模型方差大,样本稍变判势就跳。可用引导聚合把多个分类器揉成一个,降方差更稳,不是模型不行而是结构单薄。
用 Bagging 思路对训练集重采样训多个 ELM 分类器,预测时多数投票。外汇贵金属高风险,融合只降方差不保胜率。
小布盯盘的 AIGC 已内置多模型融合诊断,打开对应品种页即可看各分类器分歧与融合倾向,你专注决策。
基础篇常用 60%~80% 样本有放回抽样训子模型。比例过低子模型偏倚升,过高降方差收益递减,可实盘前调参验证。
概率上乱喊会少,因方差被多个模型平均掉。但震荡市本身无趋势,融合模型也只倾向降误报,不保证不出错。