%load_ext autoreload
%autoreload 2
自定义训练
定制你的模型的训练过程
mlforecast 隐藏了大多数训练细节,这对于快速迭代非常有用。然而,有时你可能希望对拟合参数、输入模型的数据等有更多的控制。本文指南将展示如何以特定方式训练模型,然后将其交还给 mlforecast 以进行预测。
数据设置
from mlforecast.utils import generate_daily_series
= generate_daily_series(5) series
创建预测对象
import numpy as np
from lightgbm import LGBMRegressor
from sklearn.linear_model import LinearRegression
from mlforecast import MLForecast
假设我们想要用默认设置训练一个线性回归模型。
= MLForecast(
fcst ={'lr': LinearRegression()},
models='D',
freq=['dayofweek'],
date_features )
生成训练集
使用 MLForecast.preprocess
生成训练数据。
= fcst.preprocess(series)
prep 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 |
= prep.drop(columns=['unique_id', 'ds', 'y'])
X = prep['y'] 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模型。
= np.random.RandomState(0)
rng = rng.rand(y.size) weights
我们像往常一样训练模型,并通过sample_weight
参数提供权重。
= LGBMRegressor(verbosity=-1).fit(X, y, sample_weight=weights) model
计算预测
现在我们只需将这个模型分配给 MLForecast.models_
字典。请注意,您可以分配任意数量的模型。
'lgbm'] = model
fcst.models_[ fcst.models_
{'lr': LinearRegression(), 'lgbm': LGBMRegressor(verbosity=-1)}
现在,当调用 MLForecast.predict
时,mlforecast 将使用这些模型来计算预测。
1) fcst.predict(
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