python - 在 xgboost 训练中使用 cupy 而不是 numpy 显着降低了 test-auc 分数
问题描述
背景:
- 尝试在 GPU 而不是 CPU 上运行 xgboost 模型。
- 使用 cupy 替换 numpy 以获得更好的 GPU 加速。
问题:
- 使用 numpy 格式时,我的测试 AUC 高于 0.77
- 使用 cupy 格式时,我的测试 AUC 约为 0.5
示例代码:
import xgboost as xgb
import pandas as pd
X_train=pd.read_pickle('X_train.pkl')
X_test=pd.read_pickle('X_val.pkl')
y_train=pd.read_pickle('y_train.pkl')
y_test=pd.read_pickle('y_val.pkl')
使用 numpy.ndarray
dtrain = xgb.DMatrix(X_train.values, label=y_train.values)
dtest = xgb.DMatrix(X_test.values, label=y_test.values)
num_boost_round = 1000
early_stopping_rounds=100
params = {
'max_depth':11,
'min_child_weight': 7,
'eta':.1,
'subsample': 1,
'colsample_bytree': .8,
'eval_metric': 'auc',
'objective':'binary:logistic',
#GPU enabled
'gpu_id': 0,
'tree_method':'gpu_hist',
}
model = xgb.train(
params,
dtrain,
num_boost_round=num_boost_round,
evals=[(dtrain,'Train'),(dtest, "Test")],
early_stopping_rounds=early_stopping_rounds,
verbose_eval = 50
)
# output
# Stopping. Best iteration:
# [999] Train-auc:0.84847 Test-auc:0.77523
使用 cupy.ndarray
import cupy
# convert to cupy
X_train_cp = cupy.array(X_train.values)
y_train_cp = cupy.array(y_train.values)
X_test_cp = cupy.array(X_test.values)
y_test_cp = cupy.array(y_test.values)
dtrain = xgb.DMatrix(X_train_cp, label=y_train_cp)
dtest = xgb.DMatrix(X_test_cp, label=y_test_cp)
num_boost_round = 1000
early_stopping_rounds=100
params = {
'max_depth':11,
'min_child_weight': 7,
'eta':.1,
'subsample': 1,
'colsample_bytree': .8,
'eval_metric': 'auc',
'objective':'binary:logistic',
#GPU enabled
'gpu_id': 0,
'tree_method':'gpu_hist',
}
model = xgb.train(
params,
dtrain,
num_boost_round=num_boost_round,
evals=[(dtrain,'Train'),(dtest, "Test")],
early_stopping_rounds=early_stopping_rounds,
verbose_eval = 50
)
# output
# Stopping. Best iteration:
# [182] Train-auc:0.58999 Test-auc:0.50665
# check values
X_train_np = cupy.asnumpy(X_train_cp)
(X_train_np == X_train.values).all()
#output
True
xgb 版本 = ' 1.2.1 ' cupy 版本 = '8.1.0 '我正在 kaggle 上运行这个测试。如果需要更多信息,请告诉我,我可以提供训练和测试数据。
解决方案
推荐阅读
- vba - 使用 VBA 宏在 PowerPoint 中进行语音识别
- spring - Spring Weflux Rest API(带注释的控制器)的总处理时间
- python - urlopen/read 返回带有 html 标签的文本而不是纯文本
- swift - 快速发送 get / put / post
- sql-server - MSSQL:配置文件“/var/opt/mssql/mssql.conf”加载失败(Ubuntu)
- python-3.x - 'float'对象在spyder python中没有属性'exp'
- ruby-on-rails - 在目录中初始化 Rails 应用程序
- python - 使用“list.extend”时,“int”对象不可迭代
- sql - Rails:将模型属性设置为另一个模型的属性
- dc.js - dc.js lineChart - 填充缺失的日期并在没有数据的地方显示零