Байесовская оптимизация для модели прогнозирования временного ряда Facebook Prophet
Есть датасет с датами и значениями, соответсвующим этим датам, и хочу сделать прогноз на 100 дней вперед при помощи модели Prophet + использовать тюнинг(байесовская оптимизация).
model = Prophet(interval_width=0.95)
params = {
'changepoint_prior_scale': [0.005, 0.5],
'seasonality_prior_scale': [0.01, 10],
'holidays_prior_scale': [0.01, 10],
'seasonality_mode': ['additive', 'multiplicative'],
'yearly_seasonality': ['auto', True, False],
'weekly_seasonality': ['auto', True, False],
'daily_seasonality': ['auto', True, False]
}
opt = BayesSearchCV(
model,
search_spaces=params,
n_iter=32,
cv=5
)
opt.fit(df)
Вотс последней строкой возникают проблемы: TypeError: Cannot clone object '<prophet.forecaster.Prophet object at 0x000002313CECFAD0>' (type <class 'prophet.forecaster.Prophet'>): it does not seem to be a scikit-learn estimator as it does not implement a 'get_params' method.
.
На самом деле и у 'чата' спросил и в инете полазил, но проблему так и не решил. Подскажете как тут быть?
Ответы (1 шт):
Смотрим ошибку:
it does not seem to be a scikit-learn estimator as it does not implement a 'get_params' method
Лезем в доку на skopt.BayesSearchCV, там написано:
estimator
- estimator object
A object of that type is instantiated for each search point. This object is assumed to implement the scikit-learn estimator api.
ОК, читаем доку Developing scikit-learn estimators, раздел Rolling your own estimator. Ну и читаем там, как сделать свой эстиматор на основе BaseEstimator
. Обращаем особое внимание на абзац get_params and set_params.
В общем, просто нужно сделать над Prophet
обёртку, удовлетворяющую определённым условиям, это не сложно.