我需要使用 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)
我需要的是知道还剩下多少迭代...
答案 0 :(得分:2)
您可以使用 GridSearchCV
参数更改 verbose
的详细程度:
0 : 不冗长
>1 : 显示每个折叠和候选参数的计算时间
>2 : 分数也显示
>3 :折叠和候选参数索引也与计算的开始时间一起显示。
如果您使用的是 Jupyter Notebook,输出将显示在终端窗口中。
编辑
如果您想估计总持续时间,您可以计算组合数,然后将其乘以迭代持续时间和交叉验证拆分数。
您可以使用 ParameterGrid
来测试组合的数量。
from sklearn.model_selection import ParameterGrid
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'],
'monotone_constraints': [mono_constraints]
}
pg = ParameterGrid(param_grid)
len(pg)
在您的情况下 66
然后乘以 t
1 次迭代的持续时间和 10
交叉验证拆分的数量 (n_splits*n_repeats
)。