第 8 章 · 04 内置模型 本节摘要:FreqAI 内置十余种预测模型,覆盖梯度提升树(LightGBM、XGBoost)、随机森林、PyTorch 神经网络(MLP、Transformer)三大族系,每种又分回归与分类变体。本节带你遍历这些模型,讲清回归与分类的本质差异(连续值 vs 离散类)、梯度提升树的原理(串行集成决策树)、PyTorch 模型的三层继承结构(BasePyTorchModel → BasePyTorchRegressor/Classifier → 具体模型),最后给出选型建议——新手从 LightGBM 起步,追求表达力上 PyTorch,千万别在没有现货盈利验证前就上合约杠杆。 内容来源:原项目文档 、 ,源码 ,汉化并套用体系化模板。
本节摘要:FreqAI 内置十余种预测模型,覆盖梯度提升树(LightGBM、XGBoost)、随机森林、PyTorch 神经网络(MLP、Transformer)三大族系,每种又分回归与分类变体。本节带你遍历这些模型,讲清回归与分类的本质差异(连续值 vs 离散类)、梯度提升树的原理(串行集成决策树)、PyTorch 模型的三层继承结构(BasePyTorchModel → BasePyTorchRegressor/Classifier → 具体模型),最后给出选型建议——新手从 LightGBM 起步,追求表达力上 PyTorch,千万别在没有现货盈利验证前就上合约杠杆。
内容来源:原项目文档
docs/freqai-configuration.md、docs/freqai-parameter-table.md,源码freqtrade/freqai/prediction_models/,汉化并套用体系化模板。
⚠️ 风险提示:示例策略和默认模型参数是为展示功能设计的,不是为实盘盈利设计的。任何模型在实盘前都必须充分回测和 Dry-Run。
阅读完本节,你应当能够:
打开 freqtrade/freqai/prediction_models/ 目录,内置模型一览:
| 族系 | 回归模型 | 分类模型 | 多目标模型 |
|---|---|---|---|
| LightGBM | LightGBMRegressor |
LightGBMClassifier |
LightGBMRegressorMultiTarget、LightGBMClassifierMultiTarget |
| XGBoost | XGBoostRegressor |
XGBoostClassifier |
XGBoostRegressorMultiTarget |
| XGBoost RF | XGBoostRFRegressor |
XGBoostRFClassifier |
— |
| SKLearn RF | — | SKLearnRandomForestClassifier |
— |
| PyTorch | PyTorchMLPRegressor、PyTorchTransformerRegressor |
PyTorchMLPClassifier |
— |
| 强化学习 | ReinforcementLearner、ReinforcementLearner_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
这是选模型的第一道分叉。
回归模型预测连续值。比如「未来 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 是 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。
随机森林(RF)是并行集成——独立训练一堆决策树,再投票/平均。与梯度提升的「串行纠错」不同,RF 的树互相独立。优点是不易过拟合、调参简单;缺点是通常精度略逊于 GBDT。
SKLearnRandomForestClassifier:基于 scikit-learn 的 RandomForestClassifier,纯分类。XGBoostRFRegressor / XGBoostRFClassifier:XGBoost 实现的随机森林,回归分类都有。💡 随机森林适合作为 baseline(基线模型)快速验证特征质量,确认特征有效后再换 GBDT 精调。
PyTorch 模型需要额外的大体积依赖(torch,约 700MB)。安装时对 setup 的问题回答 yes,或用 _freqaitorch 结尾的 Docker 镜像。
PyTorch 模型采用三层继承,职责清晰:
train(),负责通用数据准备(归一化等)和调用 fit(),设置 device(CPU/GPU)。predict(),负责数据预处理、预测、后处理。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,存在安全风险——只加载自己训练的模型,别加载来路不明的模型文件。
实战建议:
LightGBMRegressor + 回归标签。训练快、调参资料多、效果稳定,是验证特征质量的最佳 baseline。LightGBMClassifier,用概率做置信度过滤。*MultiTarget 变体,一次预测多个标签。PyTorchMLPRegressor 起步,熟练后再上 Transformer。⚠️ 模型升级不能跳过验证。GBDT 到神经网络不是「必然更好」,糟糕的特征配上更强的模型只会过拟合得更精致。先把特征工程做扎实,再换模型。
下一节,我们看强化学习交易——BaseEnvironment 训练环境、动作空间(持有/买/卖)、奖励函数设计、Stable-Baselines3 集成。