.. _serial:
=============
序列化
=============
.. currentmodule:: qlib
简介
============
``Qlib``支持将``DataHandler``、``DataSet``、``Processor``和``Model``等组件的状态转储到磁盘并重新加载它们。
可序列化类
==================
``Qlib``提供了一个基类``qlib.utils.serial.Serializable``,其状态可以以`pickle`格式转储到磁盘或从磁盘加载。
当用户转储``Serializable``实例的状态时,名称**不以**`_`开头的实例属性将被保存到磁盘。不过,用户可以使用``config``方法或重写``default_dump_all``属性来禁用此功能。
用户还可以重写``pickle_backend``属性来选择pickle后端。支持的值为"pickle"(默认且常用)和"dill"(可转储更多内容,如函数,更多信息见`这里 `_)。
示例
=======
``Qlib``的可序列化类包括``DataHandler``、``DataSet``、``Processor``和``Model``等,它们都是``qlib.utils.serial.Serializable``的子类。
具体来说,``qlib.data.dataset.DatasetH``就是其中之一。用户可以按如下方式序列化``DatasetH``。
.. code-block:: Python
##=============dump dataset=============
dataset.to_pickle(path="dataset.pkl") # dataset is an instance of qlib.data.dataset.DatasetH
##=============reload dataset=============
with open("dataset.pkl", "rb") as file_dataset:
dataset = pickle.load(file_dataset)
.. note::
只有``DatasetH``的状态应该保存到磁盘,例如用于数据归一化的一些`mean`(均值)和`variance`(方差)等。
重新加载``DatasetH``后,用户需要重新初始化它。这意味着用户可以重置``DatasetH``或``QlibDataHandler``的一些状态,如`instruments`(标的)、`start_time`(开始时间)、`end_time`(结束时间)和`segments`(分段)等,并根据这些状态生成新数据(数据不是状态,不应保存到磁盘)。
更详细的示例见此`链接 `_。
API
===
请参考`Serializable API <../reference/api.html#module-qlib.utils.serial.Serializable>`_。