开发¶
项目架构¶
FreqAI的架构和功能是通用的,鼓励开发独特的特性、功能、模型等。
下图显示了类结构和详细的算法概述:
如图所示,FreqAI由三个不同的对象组成:
- IFreqaiModel - 一个持久的对象,包含收集、存储和处理数据、特征工程、运行训练和推理模型所需的所有逻辑。
- FreqaiDataKitchen - 一个非持久的对象,每个唯一的资产/模型都会创建一个。除元数据外,它还包含各种数据处理工具。
- FreqaiDataDrawer - 一个持久的对象,包含所有历史预测、模型和保存/加载方法。
有许多内置的预测模型,它们直接继承自IFreqaiModel
。每个模型都可以完全访问IFreqaiModel
中的所有方法,因此可以随意重写其中的任何函数。但是,高级用户可能会优先选择重写fit()
、train()
、predict()
和data_cleaning_train/predict()
。
数据处理¶
FreqAI旨在以简化后期处理和通过自动数据重新加载增强崩溃韧性的方式组织模型文件、预测数据和元数据。数据保存在一个文件结构user_data_dir/models/
中,其中包含与训练和回测相关的所有数据。FreqaiDataKitchen()
在训练和推理过程中严重依赖文件结构,因此不应手动修改。### 文件结构
文件结构是基于在配置文件中设置的模型identifier
自动生成的。以下结构显示了数据在后处理过程中存储的位置:
结构 | 描述 |
---|---|
config_*.json |
模型特定配置文件的副本。 |
historic_predictions.pkl |
包含在identifier 模型在实时部署期间生成的所有历史预测的文件。historic_predictions.pkl 用于在崩溃或配置更改后重新加载模型。备份文件始终保存在主文件的情况下以防损坏。FreqAI会自动检测到损坏并用备份替换损坏的文件。 |
pair_dictionary.json |
包含训练队列以及最近一次训练的模型的磁盘位置的文件。 |
sub-train-*_TIMESTAMP |
包含与单个模型相关联的所有文件的文件夹,例如: |
*_metadata.json - 模型的元数据,如规范化的最大/最小值,预期的训练特征列表等。 |
|
*_model.* - 保存在磁盘上以从崩溃中重新加载的模型文件。可以是joblib (典型的提升库),zip (stable_baselines),hd5 (keras类型)等。 |
|
*_pca_object.pkl - 主成分分析(PCA)转换(如果在配置中设置了principal_component_analysis: True )将用于转换未知的预测特征。 |
|
*_svm_model.pkl - 支持向量机(SVM)模型(如果在配置中设置了use_SVM_to_remove_outliers: True ),用于检测未知预测特征中的异常值。 |
|
*_trained_df.pkl - 包含用于训练identifier 模型的所有训练特征的数据框。这用于计算不相似性指数(DI)并且还可以用于后处理。 |
|
*_trained_dates.df.pkl - 与trained_df.pkl 相关联的日期,对于后处理很有用。 |
示例文件结构如下所示:
├── models
│ └── unique-id
│ ├── config_freqai.example.json
│ ├── historic_predictions.backup.pkl
│ ├── historic_predictions.pkl
│ ├── pair_dictionary.json
│ ├── sub-train-1INCH_1662821319
│ │ ├── cb_1inch_1662821319_metadata.json
│ │ ├── cb_1inch_1662821319_model.joblib
│ │ ├── cb_1inch_1662821319_pca_object.pkl
│ │ ├── cb_1inch_1662821319_svm_model.joblib
│ │ ├── cb_1inch_1662821319_trained_dates_df.pkl
│ │ └── cb_1inch_1662821319_trained_df.pkl
│ ├── sub-train-1INCH_1662821371
│ │ ├── cb_1inch_1662821371_metadata.json
│ │ ├── cb_1inch_1662821371_model.joblib
│ │ ├── cb_1inch_1662821371_pca_object.pkl
│ │ ├── cb_1inch_1662821371_svm_model.joblib
│ │ ├── cb_1inch_1662821371_trained_dates_df.pkl
│ │ └── cb_1inch_1662821371_trained_df.pkl
│ ├── sub-train-ADA_1662821344
│ │ ├── cb_ada_1662821344_metadata.json
│ │ ├── cb_ada_1662821344_model.joblib
│ │ ├── cb_ada_1662821344_pca_object.pkl
│ │ ├── cb_ada_1662821344_svm_model.joblib
│ │ ├── cb_ada_1662821344_trained_dates_df.pkl
│ │ └── cb_ada_1662821344_trained_df.pkl
│ └── sub-train-ADA_1662821399
│ ├── cb_ada_1662821399_metadata.json
│ ├── cb_ada_1662821399_model.joblib
│ ├── cb_ada_1662821399_pca_object.pkl
│ ├── cb_ada_1662821399_svm_model.joblib
│ ├── cb_ada_1662821399_trained_dates_df.pkl
│ └── cb_ada_1662821399_trained_df.pkl