Spaces:
Runtime error
Runtime error
| import pandas as pd | |
| from xgboost import XGBRegressor | |
| from sktime.forecasting.compose import make_reduction | |
| from sktime.forecasting.model_selection import SlidingWindowSplitter, SingleWindowSplitter | |
| from sktime.forecasting.model_selection import ForecastingRandomizedSearchCV | |
| from sktime.performance_metrics.forecasting import mean_absolute_percentage_error | |
| class XGBoost(): | |
| def __init__(self) -> None: | |
| self.estimator = XGBRegressor( | |
| objective='reg:squarederror', | |
| random_state=42) | |
| # self.cv_params = { | |
| # "max_depth": [3, 5, 6, 10, 15, 20], | |
| # "learning_rate": [0.01, 0.1, 0.2, 0.3], | |
| # "subsample": [0.5, 0.6, 0.7, 0.8, 0.9, 1.0], | |
| # "colsample_bytree": [0.5, 0.6, 0.7, 0.8, 0.9, 1.0], | |
| # "colsample_bylevel": [0.5, 0.6, 0.7, 0.8, 0.9, 1.0], | |
| # "n_estimators": [100, 500, 1000] | |
| # } | |
| self.cv_params = { | |
| 'n_estimators': [100, 500], | |
| "learning_rate": [0.01, 0.1, 0.2] | |
| } | |
| self.round_result = True | |
| def fit_predict( | |
| self, | |
| y: pd.DataFrame, | |
| y_train: pd.DataFrame, | |
| window_length, | |
| fh, | |
| fh_test, | |
| params, | |
| X: pd.DataFrame = None, | |
| X_train=None, | |
| X_test=None, | |
| X_future: pd.DataFrame = None | |
| ): | |
| print('[XGboost fit predict]') | |
| param_grid = {} | |
| for k, v in params.items(): | |
| param_grid[f"estimator__{k}"] = v | |
| forecaster = make_reduction( | |
| self.estimator, | |
| strategy='recursive', | |
| window_length=window_length) | |
| cv = SingleWindowSplitter( | |
| window_length=len(y_train) - len(fh), | |
| fh=len(fh)) | |
| gscv = ForecastingRandomizedSearchCV( | |
| forecaster, | |
| cv=cv, | |
| param_distributions=param_grid, | |
| n_iter=100, | |
| random_state=42, | |
| scoring=mean_absolute_percentage_error, | |
| update_behaviour='inner_only', | |
| error_score='raise') | |
| gscv.fit(y=y_train, X=X_train) | |
| y_pred = gscv.predict(fh=fh_test, X=X_test) | |
| gscv.update(y=y, X=X, update_params=False) | |
| y_forecast = gscv.predict(fh=fh, X=X_future) | |
| best_params = gscv.best_params_ | |
| if self.round_result: | |
| y_pred = round(y_pred) | |
| y_forecast = round(y_forecast) | |
| return (y_pred, y_forecast, best_params) | |