%load_ext autoreload
%autoreload 2自定义训练
定制你的模型的训练过程
mlforecast 隐藏了大多数训练细节,这对于快速迭代非常有用。然而,有时你可能希望对拟合参数、输入模型的数据等有更多的控制。本文指南将展示如何以特定方式训练模型,然后将其交还给 mlforecast 以进行预测。
数据设置
from mlforecast.utils import generate_daily_seriesseries = 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