from bayes_opt import BayesianOptimization
# 定义黑盒函数
def lgb_cv(n_estimators,learning_rate,max_depth,num_leaves,min_child_samples,subsample,colsample_bytree,reg_alpha,reg_lambda,min_child_weight):
val = cross_val_score(
LGBMClassifier(n_estimators=int(n_estimators),
random_state=2019,
learning_rate=learning_rate,
max_depth=int(max_depth),
num_leaves=int(num_leaves),
min_child_samples=int(min_child_samples),
subsample=min(subsample, 0.99999),
colsample_bytree=min(colsample_bytree, 0.9999),
reg_alpha=reg_alpha,
reg_lambda=reg_lambda,
min_child_weight=min_child_weight,
class_weight='balanced',
), train_x[use_col], train_y, scoring='roc_auc', cv=5,n_jobs=-1
).mean()
return val
# 给定超参数搜索空间
opt = BayesianOptimization(
lgb_cv,
{'n_estimators': (600, 1000),
'learning_rate':(0.005,0.015),
'max_depth':(2,5),
'num_leaves':(6,16),
'min_child_samples':(10,50),
'subsample':(0.6,0.99),
'colsample_bytree':(0.6,0.99),
'reg_alpha':(0.05,1),
'reg_lambda':(0.05,1),
'min_child_weight':(1,100)
}
)
opt.maximize() #最大化黑盒函数
opt.max #是黑盒函数值最大的超参数