python - 如何在轻 gbm 回归器的贝叶斯优化后查看最佳超参数?
问题描述
我正在使用以下代码,这与我在https://medium.com/analytics-vidhya/hyperparameters-optimization-for-lightgbm-catboost-and-xgboost-regressors-using-bayesian等教程上阅读的内容一致-6e7c495947a9。但是,应该为我的模型打印最佳参数字典的最后一步会导致此错误
''' NameError Traceback (最近一次调用最后一次) in 40 41 bayesion_opt_lgbm(X, y, init_iter=5, n_iters=10, random_state=77, seed = 101, num_iterations = 200) ---> 42 print(optimizer.max )
NameError: name 'optimizer' is not defined ''' 这是我正在使用的完整代码。
from bayes_opt import BayesianOptimization #From the library bayesian-optimization
import warnings
warnings.filterwarnings('ignore')
def bayesion_opt_lgbm(X, y, init_iter=3, n_iters=7, random_state=11, seed = 101, num_iterations = 100):
dtrain = lgb.Dataset(data=X, label=y)
def lgb_r2_score(preds, dtrain): #in case want to use R2 as metric
labels = dtrain.get_label()
return 'r2', r2_score(labels, preds), True
# Objective Function
def hyp_lgbm(num_leaves, feature_fraction, bagging_fraction, max_depth, min_split_gain, min_child_weight):
params = {'application':'regression','num_iterations': num_iterations,
'learning_rate':0.05, 'early_stopping_round':50,
'metric':'rmse'} # Default parameters
params["num_leaves"] = int(round(num_leaves))
params['feature_fraction'] = max(min(feature_fraction, 1), 0)
params['bagging_fraction'] = max(min(bagging_fraction, 1), 0)
params['max_depth'] = int(round(max_depth))
params['min_split_gain'] = min_split_gain
params['min_child_weight'] = min_child_weight
cv_results = lgb.cv(params, dtrain, nfold=5, seed=seed,categorical_feature=[], stratified=False,
verbose_eval =None)
# print(cv_results)
return np.max(cv_results['rmse-mean'])
# Domain space-- Range of hyperparameters
pds = {'num_leaves': (80, 100),
'feature_fraction': (0.1, 0.9),
'bagging_fraction': (0.8, 1),
'max_depth': (17, 25),
'min_split_gain': (0.001, 0.1),
'min_child_weight': (10, 25)
}
# Surrogate model
optimizer = BayesianOptimization(hyp_lgbm, pds, random_state=random_state)
# Optimize
optimizer.maximize(init_points=init_iter, n_iter=n_iters)
bayesion_opt_lgbm(X, y, init_iter=5, n_iters=10, random_state=77, seed = 101, num_iterations = 200)
optimizer.max['params']
为什么'optimizer'
在函数中明确定义名称时没有定义名称,我该如何解决?
解决方案
推荐阅读
- stata - 从命令中提取均值、标准差和置信区间
- react-navigation - 使用抽屉 + 选项卡 + 堆栈在屏幕上隐藏 tabBar
- java - 错误:无法解析“:app@debugAndroidTest/compileClasspath”的依赖关系:没有可用于离线模式的缓存版本?
- javascript - Gmail-API 解码的邮件内容带有不需要的 CSS 代码
- javascript - 当我尝试使用 jQuery UI 隐藏它时,为什么 div 在滑动之前会向下移动?
- javascript - 如何将 rxjs 角度中的每个项目的加载设置为 false 或 true?
- r - R strptime没有管道进入数据帧
- javascript - 有没有办法将我的 PWA 从 Vue 重写为 React,并且不会为现有用户破坏它?
- python-3.x - 如何将文本文件转换为字典
- javascript - 变量值在 catch 块中不递增