GPU 和 CPU 笔记本之间 XGBoost.regressor 的 MAE 值不同,为什么?

问题描述 投票:0回答:1

我正在使用 optune 寻找更好的 XGBoost.regressor 选项。我有一个在本地计算机上运行的笔记本电脑实例(在处理器上,我的显卡不支持机器学习),一个在 Kaggle 代码上运行(在 GPU 100 上)。并且使用相同的参数我得到不同的指标,它们是非常不同的。 这是代码:

def objective(trial, data=data, target=target):

    train_x, test_x, train_y, test_y = train_test_split(data, target, test_size=0.15, random_state=SEED)  #, random_state=1234
    param = {
        'objective': 'reg:squarederror',
        'booster': 'gbtree',
        'eval_metric': 'mae',
        # tree_method':'gpu_hist',  # this parameter means using the GPU when training our model to speedup the training process
        'lambda': trial.suggest_float('lambda', 1e-3, 13.0),  # old value 10.0
        'alpha': trial.suggest_float('alpha', 1e-3, 13.0),    # old value 10.0
        'colsample_bytree': trial.suggest_categorical('colsample_bytree', [0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]),
        'subsample': trial.suggest_categorical('subsample', [0.3, 0.4,  0.5, 0.6, 0.7, 0.8, 1.0]),  # added 0.3
        'learning_rate': trial.suggest_categorical('learning_rate', [0.006, 0.008, 0.01, 0.012 ,0.014, 0.016, 0.018, 0.02]),  # added 0.006
        'n_estimators': 50000,  # old 10000
        'max_depth': trial.suggest_categorical('max_depth', [5, 7, 9, 11, 13, 15, 17, 19]),  # added 19
        'random_state': trial.suggest_categorical('random_state', [SEED]),
        'min_child_weight': trial.suggest_int('min_child_weight', 1, 500),  # old max value=300
        'early_stopping_rounds': 500,  # old 100
    }
    model = xgb.XGBRegressor(**param)

    model.fit(train_x, train_y, eval_set=[(test_x, test_y)], verbose=2000)

    xgb_preds = model.predict(test_x)

    mae = mean_absolute_error(test_y, xgb_preds)

    return mae

在本地 CPU 上,我得到“最好是试用 48,其值:1.1957438226176318”。 在具有 GPU100 的 Kaggle Code 笔记本上,我得到 - “最好的是试验 43,其值:1.351620287489423。”

为什么我得到不同的结果?在笔记本上的 Kaggle 代码中,我使用以下命令更新了软件包:

!conda update --all -q -y
jupyter-notebook gpu xgboost kaggle
1个回答
0
投票

看来XGBoost在使用GPU或CPU时使用了不同的采样方法。

查看

scikit-learn API
文档中的 sampling_method

采样方法 –

抽样方法。仅由 GPU 版本的 hist 树方法使用。 uniform:统一选择随机训练实例。

gradient_based 选择具有更高梯度的随机训练实例 梯度和hessian较大时的概率。 (参见 CatBoost)

© www.soinside.com 2019 - 2024. All rights reserved.