自定义训练

%load_ext autoreload
%autoreload 2

定制你的模型的训练过程

mlforecast 隐藏了大多数训练细节,这对于快速迭代非常有用。然而,有时你可能希望对拟合参数、输入模型的数据等有更多的控制。本文指南将展示如何以特定方式训练模型,然后将其交还给 mlforecast 以进行预测。

数据设置

from mlforecast.utils import generate_daily_series
series = generate_daily_series(5)

创建预测对象

import numpy as np
from lightgbm import LGBMRegressor
from sklearn.linear_model import LinearRegression

from mlforecast import MLForecast

假设我们想要用默认设置训练一个线性回归模型。

fcst = MLForecast(
    models={'lr': LinearRegression()},
    freq='D',
    date_features=['dayofweek'],
)

生成训练集

使用 MLForecast.preprocess 生成训练数据。

prep = fcst.preprocess(series)
prep.head()
unique_id ds y dayofweek
0 id_0 2000-01-01 0.428973 5
1 id_0 2000-01-02 1.423626 6
2 id_0 2000-01-03 2.311782 0
3 id_0 2000-01-04 3.192191 1
4 id_0 2000-01-05 4.148767 2
X = prep.drop(columns=['unique_id', 'ds', 'y'])
y = prep['y']

常规训练

由于我们在进行线性回归的训练过程中不想做任何特别的事情,因此我们可以直接调用 MLForecast.fit_models

fcst.fit_models(X, y)
MLForecast(models=[lr], freq=<Day>, lag_features=[], date_features=['dayofweek'], num_threads=1)

这已经训练了线性回归模型,现在可以在 MLForecast.models_ 属性中使用。

fcst.models_
{'lr': LinearRegression()}

自定义训练

现在假设您还想在相同的数据显示样本权重上训练一个LightGBM模型。

rng = np.random.RandomState(0)
weights = rng.rand(y.size)

我们像往常一样训练模型,并通过sample_weight参数提供权重。

model = LGBMRegressor(verbosity=-1).fit(X, y, sample_weight=weights)

计算预测

现在我们只需将这个模型分配给 MLForecast.models_ 字典。请注意,您可以分配任意数量的模型。

fcst.models_['lgbm'] = model
fcst.models_
{'lr': LinearRegression(), 'lgbm': LGBMRegressor(verbosity=-1)}

现在,当调用 MLForecast.predict 时,mlforecast 将使用这些模型来计算预测。

fcst.predict(1)
unique_id ds lr lgbm
0 id_0 2000-08-10 3.247803 3.642456
1 id_1 2000-04-07 3.182126 4.808618
2 id_2 2000-06-16 3.182126 4.808618
3 id_3 2000-08-30 3.313480 2.777129
4 id_4 2001-01-08 3.444834 3.404631

Give us a ⭐ on Github