Байесовская оптимизация для модели прогнозирования временного ряда 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 шт):

Автор решения: CrazyElf

Смотрим ошибку:

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 обёртку, удовлетворяющую определённым условиям, это не сложно.

→ Ссылка