调超参神器——GridSearchCV

简介

所谓超参,就是机器学习算法中,不能通过自身学习设定的参数,如SVM的惩罚因子C,核函数kernel,gamma参数等,参数间的组合很是繁琐,人工调节这些超参数时间成本太高,易出错。本文主要介绍sklearn模块的调参神器GridSearchCV模块,它能够在指定范围内自动搜索具有不同超参数的不同模型组合,寻找最佳参数,大大提高调参效率。

缘起

这两天,闲来参加下Ctrip的一个数据竞赛,model选择的是XGboost,好用是自然,但是参数有很多,最迫切需要一个自动调节参数工具,于是接触到GridSearchCV模块。

官方手册

手册链接

实验

自己训练的代码如下(XGboost+5-fold Cross Validation),清晰易懂,无须解释。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import xgboost as xgb
from sklearn.grid_search import GridSearchCV
def xgbmodel_train(train):
xgb_model = xgb.XGBClassifier()
train_feature, train_label = train.drop('orderlabel', axis=1), train['orderlabel']
parameters = {'nthread': [4],
'objective': ['binary:logistic'],
'learning_rate': [0.05,0.06,0.1],
'max_depth': [5, 6],
'min_child_weight': [1, 3],
'silent': [1],
'gamma': [0, 0.1],
'subsample': [0.6, 0.7, 0.8],
'colsample_bytree': [0.7, 0.5, 0.6],
'n_estimators': [5],
'missing': [-999],
'seed': [12455]}
clf = GridSearchCV(xgb_model, parameters, n_jobs=1,
cv=StratifiedKFold(train['orderlabel'], n_folds=5, shuffle=True),
scoring='roc_auc',
verbose=2, refit=True)
clf.fit(train_feature, train_label)
best_parameters, score, _ = max(clf.grid_scores_, key=lambda x: x[1])
print('AUC score:', score)
for param_name in sorted(best_parameters.keys()):
print('%s: %r' % (param_name, best_parameters[param_name]))

实验结果

process
best para

分享