文章 "数据科学和机器学习(第 31 部分):利用 CatBoost AI 模型进行交易"

 

新文章 数据科学和机器学习(第 31 部分):利用 CatBoost AI 模型进行交易已发布:

CatBoost AI 模型最近在机器学习社区中广受欢迎,因为它们的预测准确性、效率、及针对分散和困难数据集的健壮性。在本文中,我们将详细讨论如何实现这些类型的模型,进而尝试进击外汇市场。

CatBoost 是一个基于决策树的梯度增强算法开源软件库,它专为解决机器学习中处理分类特征和数据的挑战而设计。

它由 Yandex 开发,并于 2017 年开源,阅读更多

尽管与线性回归或 SVM 等机器学习技术相比,CatBoost 是最近推出的,但它在 AI 社区中获得广泛欢迎,并在如 Kaggle 这样的平台上爬升到最常用机器学习模型的榜首。

CatBoost 之所以获得如此多的关注,是因其自动处理数据集中分类特征的能力,这对许多机器学习算法来说颇具挑战性。

  • 相比其它模型,Catboost 模型通常以最小的工作量提供更好的性能,即使按默认参数和设置,这些模型也能在准确性方面执行优良。
  • 不同于需要领域知识进行编码、并令其工作的神经网络,CatBoost 的实现很简单。


作者:Omega J Msigwa

 
你的文章发人深省。

我在想,如果我们也能追踪我们所处的交易时段,会发生什么呢?
 
是的,交易时段 是训练数据中的一个重要变量
 
所有分类器(包括catboost)只有在属性归一化的情况下才能正常工作。价格作为属性并不合适。
 

还有将分类器模型导出到 ONNX 的问题


注释

二进制分类的标签推断不正确。这是 onnxruntime 实现中的一个已知错误。如果是二进制分类,请忽略此参数的值。

 
价格是不能做为训练数据的,去年年初我采用黄金的价格训练模型,当黄金的价格不断创新高时,输入给模型这些创新高的价格数据时,模型不认识这些数据,无论给怎样变化且超出训练数据最高价格的价格数据,给出的都是恒定概率值
 
非常感谢你的文章很有帮助。

我有一个小问题或顾虑,希望与大家分享。

When I tried to convert the CatBoost model in a pipeline to ONNX 在使用分类变量时 ,处理失败,出现错误


我认为根本问题可能与此处描述的内容有关:

https://catboost.ai/docs/en/concepts/apply-onnx-ml

具体问题:

目前只支持在无分类特征的数据集上训练的模型。


在我下载的 Jupyter Notebook catboost-4-trading.ipynb 中,管道拟合代码是这样写的:

pipe.fit(X_train, y_train, catboost__eval_set=(X_test, y_test))

似乎省略了参数"catboost__cat_features=categorical_features",因此模型可能是在没有指定分类特征的情况下训练的。

这也许可以解释为什么模型可以顺利保存为 ONNX。

如果是这种情况,那么也许可以直接使用 CatBoost 原生方法"save_model" ,就像这样:

model = pipe.named_steps['catboost']

model_filename = "CatBoost.EURUSD.OHLC.D1.onnx"

model.save_model(model_filename, format='onnx')

希望我的看法对您有所帮助。

ONNX |
  • catboost.ai
ONNX is an open format to represent AI models. A quote from the Open Neural Network Exchange documentation:
 
border_count 是对任何特征(不仅仅是分类特征)的分区(量子段)。
 
为什么 EA 代码中没有固定止损?