Scikit-Learn 库中的分类模型及其导出到 ONNX·进阶篇
◍ 三类分类器在 MT5 里的落地表现
把 Ridge Classifier、RidgeClassifierCV 和 Random Forest 三类模型在 Iris 数据集上训完,再导出成 ONNX 丢进 MT5 的 Scripts 目录,能直接看到准确率差异。Ridge 系两个模型在完整 150 条样本上都是 85.33% 准确率,类别 1 的 recall 只有 0.66,说明对中间类区分偏弱;Random Forest 则是 100% 全中,三类 precision 和 recall 都是 1.00。 RidgeClassifierCV 比起普通 Ridge 多了内置交叉验证,自动挑 alpha,不用手调正则化强度,但底层仍是线性假设,对非线性边界无能为力。它导出的 ONNX 输入张量叫 float_input、shape [None,4],输出有 label 和 probabilities 两张表,和原 scikit-learn 模型数值完全对齐。 随机森林靠 bagging 和多树投票拿到满分,但训练耗时随树量和特征数上升,且模型不可解释性明显比岭回归强。它的 ONNX 输出张量名是 output_label 与 output_probability,类型带 seq(map(int64,tensor(float))),在 MT5 里读概率时要按映射结构解析。 外汇与贵金属行情是非线性、高噪声系统,这类样例准确率不能直接外推到实盘信号;拿去跑 EURUSD 或 XAUUSD 前,先在 MT5 用自己标的的历史样本重训,观察 ONNX 版与原版推断是否仍一致。
梯度提升与AdaBoost、Bagging在MT5里的落地差异
梯度提升(Gradient Boosting)靠组合多棵决策树、用梯度下降压损失函数来提精度,在 Iris 全集上原始模型和导出 ONNX 的准确率都到 1.00,说明这种树权重叠加的方式在调好超参后抗过拟合表现很强,但训练算力开销随树深和数量陡增,小样本容易翻车。
AdaBoost 走的是另一条路:给分错样本加权重、循环训弱分类器再按准确率加权合并。同数据集上它的原始与 ONNX 准确率均为 0.96,比梯度提升低一截,但对异常值敏感,基础分类器若只比随机猜好一点,整体就会拉胯。
Bagging 则是从训练集有放回抽子样本、各训一个基模型再投票,核心作用是降方差而非纠偏;原文在 Iris 上的创建代码流程与前两者一致(训模型→导 ONNX→评准确率),具体准确率数字未在该节输出中给出,开 MT5 跑一遍 adaboost_iris.onnx 和 gb_iris.onnx 能直接比对推理耗时。
外汇与贵金属行情里直接套这类分类器做信号,属于高风险操作,Iris 这种静态低噪数据上的 100% 不代表实盘有任何胜率保证,参数和特征工程才是关键。
「从 Bagging 到 KNN、决策树:三类分类器在 MT5 里的落地表现」
把 Bootstrap Aggregating、K-Nearest Neighbors、Decision Tree 三类分类器都在 Iris 的 150 条样本上跑了一遍,并导出成 ONNX 丢进 MT5 的 Scripts 目录调用。Bagging 与决策树在原始模型和 ONNX 模型上都是 100% 准确率(support 各 50 的三类总计 150),KNN 则是 96%——其中类别 1 和 2 的 precision/recall 均为 0.94,类别 0 满血 1.00。 KNN 的思路很直白:算待分类样本和训练集的距离(欧氏或曼哈顿),取最近的 K 个邻居投票。它简单、能混用数值和分类特征,但 K 值小了易过拟合、大了易欠拟合,且对特征缩放极敏感,距离计算量随样本和维度暴涨。 决策树靠递归按特征切分把不确定性压到最低,叶子即类别。可解释性强、能直接看特征重要性,但树深了必过拟合,数据微扰就可能重构出完全不同的树。 三类模型的 ONNX 输入张量都叫 float_input、shape [None,4],输出 output_label 加 output_probability。在 MT5 里加载 knn_iris.onnx 或 decision_tree_iris.onnx 后,用相同 4 维特征向量喂入,终端内复算准确率应与 Python 端一致(KNN 0.96 / 树 1.00)。外汇与贵金属行情噪声远高于 Iris,直接套用这类静态分类器泛化能力可能骤降,属高风险验证行为。
◍ 逻辑回归与交叉验证版的参数调法差异
做二元分类时,LogisticRegression 和 LogisticRegressionCV 底层都是逻辑函数建模类别概率,但调参路径完全不同。前者要你手动给定 C(逆正则化强度)、penalty 类型、solver 算法,再拿组合去训;后者直接吃一串 C 候选值和 cv 折数,内部跑交叉验证挑出表现最好的 C。 如果你数据量大、或者根本拿不准 C 取多少合适,LogisticRegressionCV 的自动选参会省掉大量网格搜索的活。代价是它仍假设特征与对数几率近似线性,对高度非线性结构无能为力,且对异常值敏感。 在 Iris 四特征数据集上实测:基础逻辑回归原始模型准确率 0.9733,导出 ONNX 后在 MT5 侧加载跑全量 150 样本,准确率一致为 97.33%;换 LogisticRegressionCV,原始与 ONNX 准确率都到 0.98。两种模型的 ONNX 输入张量均为 float_input [None,4],输出 output_label 与 output_probability 两张量,可直接接进「小布盯盘」的推理层。 外汇与贵金属行情里直接套线性分类高风险,这类模型更适合做特征已平滑后的状态判别(如波动率区制),实盘前务必用历史 Tick 复验概率校准。
在线分类三件套:PA、感知器与SGD的实战边界
被动攻击分类器(PA)走的是「错了才动权重」的路子,不像随机梯度下降每步都沿损失梯度走。它靠一个攻击性参数 C 控制权重调整幅度:C 越大模型越容易跟着新样本跑,C 越小越迟钝。在 Iris 数据集上,PA 导出 ONNX 后全量准确率 0.96,和原始模型一致,说明这类轻量在线分类器在 MT5 里用 ONNX 跑没有精度损耗。 感知器是最朴素的线性二分类器,靠特征空间里的超平面切两堆数据。缺点也直白:Iris 三分类任务里它全量准确率只有 61.33%,因为数据不是线性可分,第二类 recall 1.00 但第三类 recall 仅 0.04——这类模型只适合干净可分的简单边界,拿去盯贵金属多空可能直接废掉。 随机梯度下降分类器(SGD)同样是线性超平面,但每来一个样本就更新一次权重,天然适合数据流。它的坑在超参数:学习率、正则化没调好就会卡在局部最小值。外汇与贵金属波动高、跳空多,用这类线性分类做信号过滤时,务必先用历史 tick 回测攻击性与学习率,否则过拟合概率偏高。 PA 的 MQL5 侧只负责加载 ONNX 做推理,训练仍在 Python 完成;感知器同理,ONNX 准确率 61.33% 与原始对齐。开 MT5 把 pa_classifier_iris.onnx 丢进 Scripts 目录,用 COpenCL 或 ONNX 推理封装跑一遍,能直接验证 96% 那个数。
「朴素贝叶斯三变种在 MT5 里的落地表现」
高斯朴素贝叶斯(GNB)在 Iris 150 样本全集上原始模型准确率 0.96,导出 ONNX 后准确率仍为 0.96,三类(每类 50 样本)的 f1 中类别 0 达到 1.00、类别 1 与 2 均为 0.94。它的内核假设特征独立且服从正态分布,在外汇小周期特征里这个假设大概率会被打破,实盘使用前建议先对特征做正态性检验。 多项式朴素贝叶斯(MNB)在同数据集上准确率 0.9533,ONNX 版一致;它本是为词频计数设计的,强行塞连续行情特征只是验证管道通不通,别误以为它能直接吃裸 K 线数值。 小布盯盘里跑通的逻辑是:Python 训好分类器 → 存为 Terminal 目录下 Scripts 里的 .onnx → MT5 用 ONNX 推理接口加载。输入张量名多为 float_input、形态 [None,4],输出含 output_label 与 output_probability,复制路径改文件名就能换模型。 外汇与贵金属杠杆高、滑点诡异,这类静态分类器只适合做辅助过滤,信号错了亏的是真账户,拿去当唯一入场依据风险很大。