元控制器:元任务 & 元数据集 & 元模型
介绍
Meta Controller 为 Forecast Model 提供指导,旨在学习一系列预测任务中的规律模式,并利用学习到的模式指导即将到来的预测任务。用户可以基于 Meta Controller 模块实现自己的元模型实例。
元任务
一个 Meta Task 实例是元学习框架中的基本元素。它保存可以用于 Meta Model 的数据。多个 Meta Task 实例可能共享相同的 Data Handler,由 Meta Dataset 控制。用户应使用 prepare_task_data() 获取可以直接输入到 Meta Model 的数据。
- class qlib.model.meta.task.MetaTask(task: dict, meta_info: object, mode: str = 'full')
单个元任务,元数据集包含它们的列表。它作为 MetaDatasetDS 中的一个组件。
数据处理是不同的
训练和测试之间处理的输入可能不同
在训练时,训练任务中的 X、y、X_test、y_test 是必要的(# PROC_MODE_FULL #),但在测试任务中不是必要的(# PROC_MODE_TEST #)
当元模型可以转移到其他数据集时,仅需要 meta_info(# PROC_MODE_TRANSFER #)
- __init__(task: dict, meta_info: object, mode: str = 'full')
__init__ 函数负责
存储任务
存储原始输入数据以用于
处理输入数据以生成元数据
- 参数:
task (dict) -- 通过元模型增强的任务
meta_info (object) -- 元模型的输入
- get_meta_input() object
返回 处理过的 meta_info
元数据集
元数据集 控制元信息生成过程。它负责为训练 元模型 提供数据。用户应使用 prepare_tasks 来检索 元任务 实例的列表。
- class qlib.model.meta.dataset.MetaTaskDataset(segments: Dict[str, Tuple] | float, *args, **kwargs)
一个在元层次上获取数据的数据集。
元数据集负责
输入任务(例如 Qlib 任务)并准备元任务
元任务包含比普通任务更多的信息(例如元模型的输入数据)
学习到的模式可以转移到其他元数据集。应支持以下情况
在元数据集 A 上训练的元模型,然后应用于元数据集 B
元数据集 A 和 B 之间共享一些模式,因此在应用元模型于元数据集 B 时,使用元数据集 A 的元输入
- __init__(segments: Dict[str, Tuple] | float, *args, **kwargs)
元数据集在初始化时维护一个元任务列表。
段落指示数据的划分方式。
`__init__`函数的职责是初始化任务。
- prepare_tasks(segments: List[str] | str, *args, **kwargs) List[MetaTask]
准备每个元任务中的数据并为训练做好准备。
以下代码示例展示如何从`meta_dataset`中检索元任务列表:
# get the train segment and the test segment, both of them are lists train_meta_tasks, test_meta_tasks = meta_dataset.prepare_tasks(["train", "test"])
- 参数:
segments (Union[List[Text], Tuple[Text], Text]) -- 选择数据的信息。
- 返回:
每个元任务为训练元模型准备的数据列表。对于多个段[seg1, seg2, ... , segN],返回的列表将是[[seg1中的任务], [seg2中的任务], ... , [segN中的任务]]。每个任务都是一个元任务。
- 返回类型:
list
元模型
通用元模型
Meta Model`实例是控制工作流的部分。`Meta Model`的使用包括:1. 用户使用`fit`函数训练他们的`Meta Model。2. `Meta Model`实例通过`inference`函数提供有用的信息来指导工作流。
元任务模型
这种类型的元模型可能直接与任务定义进行交互。因此,`Meta Task Model`是它们继承的类。它们通过修改基础任务定义来引导基础任务。`prepare_tasks`函数可用于获取修改后的基础任务定义。
- class qlib.model.meta.model.MetaTaskModel
这种类型的元模型处理基础任务定义。元模型在训练后为训练新的基础预测模型创建任务。`prepare_tasks`直接修改任务定义。
- fit(meta_dataset: MetaTaskDataset)
MetaTaskModel预计将从meta_dataset中获取准备好的MetaTask。然后它将从元任务中学习知识。
- inference(meta_dataset: MetaTaskDataset) List[dict]
MetaTaskModel将在meta_dataset上进行推理。MetaTaskModel预计将从meta_dataset中获取准备好的MetaTask。然后它将创建具有Qlib格式的修改任务,可以由Qlib训练器执行。
- 返回:
修改后的任务定义列表。
- 返回类型:
List[dict]
元指导模型
这种类型的元模型参与基础预测模型的训练过程。元模型可以在训练期间指导基础预测模型以提高其性能。
示例
Qlib``提供了``Meta Model``模块的实现,``DDG-DA,它适应市场动态。
``DDG-DA``包括四个步骤:
计算元信息并将其封装到``Meta Task``实例中。所有元任务形成一个``Meta Dataset``实例。
基于元数据集的训练数据训练``DDG-DA``。
对``DDG-DA``进行推理以获取指导信息。
将指导信息应用于预测模型以提高其性能。
可以在``examples/benchmarks_dynamic/DDG-DA/workflow.py``中找到`上述示例 <https://github.com/microsoft/qlib/tree/main/examples/benchmarks_dynamic/DDG-DA>`_。