【发布时间】:2021-09-01 07:17:21
【问题描述】:
我需要使用 xgboost 和交叉验证来跟踪训练模型的进度,具体取决于交叉验证正在考虑的组合数量。 无论如何我可以做到这一点吗?我不需要它需要多长时间,只需查看进度以估计需要多少次迭代以及当前是哪一次......
def train_model_xgboost(dataframe, variables, respuesta, mono_constraints):
X_train, X_test, y_train, y_test = train_test_split( #probar time series train split
dataframe[variables],
dataframe[respuesta],
random_state=2021
)
param_grid = {'max_depth': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15],
'subsample': [0.5, 1],
'learning_rate': [0.001, 0.01, 0.1],
'booster': ['gbtree'], # 'dart'
#'sample_type': ['weighted'],
#'normalize_type': ['forest'],
#'skip_drop': [0.3],
'monotone_constraints': [mono_constraints]
#'tree_method': ['gpu_hist'], # auto, hist, gpu_hist
#'predictor': ['gpu_predictor']
}
np.random.seed(2021)
idx_validacion = np.random.choice(
X_train.shape[0],
size=int(X_train.shape[0] * 0.1),
replace=False
)
X_val = X_train.iloc[idx_validacion, :].copy()
y_val = y_train.iloc[idx_validacion].copy()
X_train_grid = X_train.reset_index(drop=True).drop(idx_validacion, axis=0).copy()
y_train_grid = y_train.reset_index(drop=True).drop(idx_validacion, axis=0).copy()
# XGBoost necesita pasar los paramétros específicos del entrenamiento al llamar
# al método .fit()
fit_params = {"early_stopping_rounds": 5,
"eval_metric": "rmse", # rmse, mae, logloss, error, merror, mlogloss, auc
"eval_set": [(X_val, y_val)],
"verbose": 0
}
# Cross Validation
grid = GridSearchCV(
estimator=XGBRegressor(
n_estimators=1000,
random_state=2021
),
param_grid=param_grid,
scoring='neg_root_mean_squared_error', #explained_variance neg_root_mean_squared_error neg_mean_absolute_error neg_mean_squared_error neg_mean_squared_log_error neg_median_absolute_error r2 neg_mean_poisson_deviance neg_mean_gamma_deviance neg_mean_absolute_percentage_error
n_jobs=multiprocessing.cpu_count(),
cv=RepeatedKFold(n_splits=5, n_repeats=2, random_state=2021),
refit=True,
verbose=0,
return_train_score=True
)
grid.fit(X=X_train_grid, y=y_train_grid, **fit_params)
我需要知道还剩多少次迭代...
【问题讨论】:
-
this 不成功吗?