如何在使用 GridSearchCV 搜索 XGBoost 的超参数时防止机器崩溃

数据挖掘 Python scikit-学习 xgboost 超参数调整 网格搜索
2022-02-25 06:05:16

我正在寻找XGBRegressor使用 GridSearchCV 的最佳超参数。这是代码:

from xgboost import XGBRegressor
from sklearn.model_selection import GridSearchCV, KFold

param_grid_xgb_b1 = {
    'num_leaves': np.arange(20, 500, 5),
    'max_depth': np.arange(5, 50, 2),
    'reg_alpha': np.arange(0.01, 0.5, 0.01),
    'min_data_in_leaf': np.arange(50, 1_000, 10),
    'colsample_bytree': [0.65, 0.75, 0.85, 0.95, 1],
    'subsample': [0.65, 0.75, 0.85, 0.95, 1]
    }
kfold_xgb_b1 = KFold(n_splits=5, shuffle=True, random_state=42).split(X=X_train, y=y_train)
grid_search_xgb_b1 = GridSearchCV(estimator=XGBRegressor(learning_rate=0.01, n_estimators=20_000, random_state=0,
                                                         tree_method='gpu_hist', subsample_freq=5),
                                  param_grid=param_grid_xgb_b1,
                                  scoring=rmse_score, cv=kfold_xgb_b1)
grid_search_xgb_b1.fit(X=X_train, y=y_train, verbose=3)

我正在使用带有 GPU 的 Google Colab。机器是具有 12.72GB RAM 的双核 CPU。GPU 是 CUDA 版本 10.1 的 Tesla T4。

如何防止崩溃和搜索超参数?

编辑 1:
崩溃类型:RAM 已满;
数据大小:300,000 行和 40 列。

1个回答

我认为它崩溃是因为没有足够的 RAM。所以我也假设你的数据很大。您的搜索网格很大。所以这肯定需要一些时间。

为了加快训练和超载 RAM。您可以将模型拟合到数据的子样本中。从理论上讲,如果您的数据足够大并且您对其进行采样,那么当您使用整个模型时,最佳超参数应该非常相似。

一旦你这样做了,看看改变超参数的实际改进是什么,xgboost 中的超参数不应该很重要。他们会做出改变,但不会做出巨大的改变。

所以我的建议是将你的数据抽样 1%或类似的东西来搜索超参数,然后将模型拟合到整个训练集中。

不是在如此巨大的超参数空间中搜索。