利用xgb.cv,以测试集AUC为目标的调参代码
时间: 2024-02-19 21:57:39 浏览: 85
好的,下面是一个利用xgb.cv以测试集AUC为目标的调参代码,供您参考:
```python
import xgboost as xgb
import pandas as pd
# 读取数据集
train_data = pd.read_csv('train_data.csv')
test_data = pd.read_csv('test_data.csv')
# 定义评价指标
def auc_score(preds, dtrain):
labels = dtrain.get_label()
return 'auc', roc_auc_score(labels, preds)
# 定义参数空间
params = {
'max_depth': range(3, 10, 2),
'min_child_weight': range(1, 6, 2),
'learning_rate': [0.1, 0.01, 0.05],
'subsample': [0.7, 0.8, 0.9],
'colsample_bytree': [0.7, 0.8, 0.9],
'reg_alpha': [1e-5, 1e-2, 0.1, 1, 100],
'reg_lambda': [1e-5, 1e-2, 0.1, 1, 100]
}
# 初始化模型
model = xgb.XGBClassifier(
objective='binary:logistic',
eval_metric='auc',
seed=42
)
# 使用GridSearchCV交叉验证,寻找最优参数
from sklearn.model_selection import GridSearchCV
grid_search = GridSearchCV(
estimator=model,
param_grid=params,
scoring='roc_auc',
n_jobs=-1,
cv=5,
verbose=3
)
grid_search.fit(train_data.drop('target', axis=1), train_data['target'])
# 输出最优参数及其得分
print(grid_search.best_params_, grid_search.best_score_)
# 使用最优参数训练模型
best_params = grid_search.best_params_
model = xgb.XGBClassifier(
objective='binary:logistic',
eval_metric='auc',
seed=42,
**best_params
)
# 用xgb.cv评估模型性能
dtrain = xgb.DMatrix(train_data.drop('target', axis=1), label=train_data['target'])
cv_result = xgb.cv(
model.get_xgb_params(),
dtrain,
num_boost_round=model.get_params()['n_estimators'],
nfold=5,
metrics='auc',
early_stopping_rounds=50
)
print(cv_result)
print('Mean AUC:', cv_result['test-auc-mean'].iloc[-1])
```
在这个代码中,我们首先定义了一个`auc_score`函数,用于在交叉验证过程中评估模型的性能。然后,我们定义了一个参数空间`params`,用于指定需要调优的参数及其可能的取值范围。接着,我们初始化了一个XGBoost模型,并使用GridSearchCV对模型进行交叉验证和调参。在得到最优参数之后,我们用这些参数重新训练模型,并使用xgb.cv对模型进行评估,输出最终的平均AUC得分。
希望能对您有所帮助!
阅读全文