第 8 章 · 04 内置模型


文档摘要

第 8 章 · 04 内置模型 本节摘要:FreqAI 内置十余种预测模型,覆盖梯度提升树(LightGBM、XGBoost)、随机森林、PyTorch 神经网络(MLP、Transformer)三大族系,每种又分回归与分类变体。本节带你遍历这些模型,讲清回归与分类的本质差异(连续值 vs 离散类)、梯度提升树的原理(串行集成决策树)、PyTorch 模型的三层继承结构(BasePyTorchModel → BasePyTorchRegressor/Classifier → 具体模型),最后给出选型建议——新手从 LightGBM 起步,追求表达力上 PyTorch,千万别在没有现货盈利验证前就上合约杠杆。 内容来源:原项目文档 、 ,源码 ,汉化并套用体系化模板。

第 8 章 · 04 内置模型

本节摘要:FreqAI 内置十余种预测模型,覆盖梯度提升树(LightGBM、XGBoost)、随机森林、PyTorch 神经网络(MLP、Transformer)三大族系,每种又分回归与分类变体。本节带你遍历这些模型,讲清回归与分类的本质差异(连续值 vs 离散类)、梯度提升树的原理(串行集成决策树)、PyTorch 模型的三层继承结构(BasePyTorchModel → BasePyTorchRegressor/Classifier → 具体模型),最后给出选型建议——新手从 LightGBM 起步,追求表达力上 PyTorch,千万别在没有现货盈利验证前就上合约杠杆。

内容来源:原项目文档 docs/freqai-configuration.mddocs/freqai-parameter-table.md,源码 freqtrade/freqai/prediction_models/,汉化并套用体系化模板。

⚠️ 风险提示:示例策略和默认模型参数是为展示功能设计的,不是为实盘盈利设计的。任何模型在实盘前都必须充分回测和 Dry-Run。

学习目标

阅读完本节,你应当能够:

  1. 列举 FreqAI 内置的模型族系与各自变体。
  2. 区分回归分类模型的标签写法。
  3. 理解梯度提升树的集成学习原理。
  4. 描述 PyTorch 模型的三层继承结构。
  5. 根据场景给出选型建议

一、模型族系全景

打开 freqtrade/freqai/prediction_models/ 目录,内置模型一览:

族系 回归模型 分类模型 多目标模型
LightGBM LightGBMRegressor LightGBMClassifier LightGBMRegressorMultiTargetLightGBMClassifierMultiTarget
XGBoost XGBoostRegressor XGBoostClassifier XGBoostRegressorMultiTarget
XGBoost RF XGBoostRFRegressor XGBoostRFClassifier
SKLearn RF SKLearnRandomForestClassifier
PyTorch PyTorchMLPRegressorPyTorchTransformerRegressor PyTorchMLPClassifier
强化学习 ReinforcementLearnerReinforcementLearner_multiproc

--freqaimodel 指定:

# 回归:预测未来收益率(连续值) freqtrade trade --freqaimodel LightGBMRegressor --strategy FreqaiExampleStrategy --config config.json # 分类:预测涨/跌(离散类) freqtrade trade --freqaimodel LightGBMClassifier --strategy MyClassifierStrat --config config.json # PyTorch MLP 回归 freqtrade trade --freqaimodel PyTorchMLPRegressor --strategy FreqaiExampleStrategy --config config.json

二、回归 vs 分类:先想清楚要预测什么

这是选模型的第一道分叉。

回归模型预测连续值。比如「未来 24 根 K 线的平均收益率是 +1.5%」。标签写成数值:

def set_freqai_targets(self, dataframe, metadata, **kwargs): dataframe["&-s_close"] = ( dataframe["close"].shift(-24).rolling(24).mean() / dataframe["close"] - 1 ) return dataframe

策略里拿预测值当信号强度,设阈值过滤:

df.loc[(df["do_predict"]==1) & (df["&-s_close"] > 0.01), "enter_long"] = 1

分类模型预测离散类别。比如「未来是涨还是跌」。标签写成字符串,且必须声明类名:

def set_freqai_targets(self, dataframe, metadata, **kwargs): self.freqai.class_names = ["down", "up"] dataframe['&s-up_or_down'] = np.where( dataframe["close"].shift(-100) > dataframe["close"], 'up', 'down') return dataframe

分类模型还会返回每个类的概率(predict_proba),策略里可以用概率大小做置信度过滤。

💡 怎么选:回归更灵活(预测值可比较大小、设动态阈值),适合「预测幅度」的场景;分类更直观(预测方向),适合「只要方向」的简单策略。多数实战从回归起步。

三、梯度提升树:LightGBM 与 XGBoost

LightGBM 和 XGBoost 是 FreqAI 的默认推荐——训练快、效果好、调参成熟。两者都基于梯度提升决策树(GBDT):

核心思想是串行集成:每棵新决策树专门去拟合前面所有树留下的误差(残差),最后把所有树的预测加权求和。这样逐步逼近真实标签,比单棵树强得多。LightGBM 与 XGBoost 的差异主要在树的生长策略和并行优化上——LightGBM 通常更快、XGBoost 在某些场景更稳。

关键训练参数在 model_training_parameters 里:

"model_training_parameters": { "n_estimators": 300, "learning_rate": 0.05, "n_jobs": 4 }
  • n_estimators:树的数量。多了更准但更慢、易过拟合。
  • learning_rate:每棵树的贡献权重。小了更稳但需要更多树。
  • n_jobs/thread_count/task_type:线程数与 CPU/GPU 选择(不同库参数名不同)。

⚠️ CatBoost 不再积极支持(自 2025.12 起)。新项目建议用 LightGBM 或 XGBoost。

四、随机森林:SKLearn 与 XGBoost RF

随机森林(RF)是并行集成——独立训练一堆决策树,再投票/平均。与梯度提升的「串行纠错」不同,RF 的树互相独立。优点是不易过拟合、调参简单;缺点是通常精度略逊于 GBDT。

  • SKLearnRandomForestClassifier:基于 scikit-learn 的 RandomForestClassifier,纯分类。
  • XGBoostRFRegressor / XGBoostRFClassifier:XGBoost 实现的随机森林,回归分类都有。

💡 随机森林适合作为 baseline(基线模型)快速验证特征质量,确认特征有效后再换 GBDT 精调。

五、PyTorch 神经网络:MLP 与 Transformer

PyTorch 模型需要额外的大体积依赖(torch,约 700MB)。安装时对 setup 的问题回答 yes,或用 _freqaitorch 结尾的 Docker 镜像。

PyTorch 模型采用三层继承,职责清晰:

  • BasePyTorchModel:实现 train(),负责通用数据准备(归一化等)和调用 fit(),设置 device(CPU/GPU)。
  • BasePyTorchRegressor/Classifier:实现 predict(),负责数据预处理、预测、后处理。
  • PyTorchMLPRegressor 等:实现 fit(),初始化模型、优化器、损失函数、训练器。

PyTorchMLPRegressor 是最简单的神经网络——多层感知机(全连接层)。适合刚从 GBDT 切到神经网络:

class PyTorchMLPRegressor(BasePyTorchRegressor): def fit(self, data_dictionary, dk, **kwargs): n_features = data_dictionary["train_features"].shape[-1] model = PyTorchMLPModel(input_dim=n_features, output_dim=1, **self.model_kwargs) model.to(self.device) optimizer = torch.optim.AdamW(model.parameters(), lr=self.learning_rate) criterion = torch.nn.MSELoss() trainer = PyTorchModelTrainer(model=model, optimizer=optimizer, criterion=criterion, device=self.device, ...) trainer.fit(data_dictionary) return trainer

PyTorchTransformerRegressor 用 Transformer 架构(自注意力机制),更擅长捕捉序列依赖,但训练更慢、调参更难。

PyTorch 专属参数:

参数 含义 默认
learning_rate 优化器学习率 3e-4
model_kwargs 传给模型类(如层数、隐藏维度) {}
trainer_kwargs.n_epochs 训练轮数 10
trainer_kwargs.batch_size 批大小 64
trainer_kwargs.early_stopping_patience 早停耐心值(0 禁用) 0

💡 torch.compile() 可加速 GPU 训练:把 model 包一层 torch.compile(model)。但会牺牲报错信息的可读性。

⚠️ 安全提醒:从磁盘加载 PyTorch 模型需要 weights_only=False,存在安全风险——只加载自己训练的模型,别加载来路不明的模型文件。

六、选型建议

实战建议:

  1. 新手起步:LightGBMRegressor + 回归标签。训练快、调参资料多、效果稳定,是验证特征质量的最佳 baseline。
  2. 追求方向预测:换 LightGBMClassifier,用概率做置信度过滤。
  3. 需要多目标:用 *MultiTarget 变体,一次预测多个标签。
  4. 有 GPU 且想试深度学习:PyTorchMLPRegressor 起步,熟练后再上 Transformer。
  5. 强化学习:留到下一节专讲——它最强大也最复杂,需要自定义奖励函数。

⚠️ 模型升级不能跳过验证。GBDT 到神经网络不是「必然更好」,糟糕的特征配上更强的模型只会过拟合得更精致。先把特征工程做扎实,再换模型。

本节要点回顾

  1. 模型族系:LightGBM/XGBoost(GBDT,推荐)、随机森林(SKLearn/XGBoost RF)、PyTorch(MLP/Transformer)、强化学习。
  2. 回归 vs 分类:回归预测连续值(收益率),分类预测离散类(涨/跌,需字符串标签和 class_names)。
  3. 梯度提升树:串行集成决策树,逐棵拟合残差;LightGBM 快、XGBoost 稳;CatBoost 不再积极支持。
  4. PyTorch 三层继承:BasePyTorchModel(train)→ BasePyTorchRegressor/Classifier(predict)→ 具体模型(fit);MLP 简单、Transformer 强但难调。
  5. 选型:新手用 LightGBMRegressor;有 GPU 再考虑 PyTorch;强化学习最复杂留最后。先验证特征再升级模型。

下一节,我们看强化学习交易——BaseEnvironment 训练环境、动作空间(持有/买/卖)、奖励函数设计、Stable-Baselines3 集成。


发布者: 作者: 灏天文库 转发
评论区 (0)
U