1、贝叶斯优化算法思想

利用之前已经搜索点的信息确定下一个搜索点,用于求解维数不高的黑盒优化问题;

首先生成一个初始候选集合,然后根据这些点寻找下一个有可能是极值得点,将该点加入集合中,重复这一步骤,直至迭代终止。最后从这些点中找出极值点作为问题的解。

2、贝叶斯优化伪代码

  • 根据已经搜索的点的函数值估计真实目标函数值的均值和方差(通过高斯过程回归实现
  • 根据均值和方差可以构造出采集函数,对每一点是函数极值点的可能性的估计,反映了每一个点值得搜索的程度,该函数的极值点是下一个搜索点(构造采集函数,用于决定本次迭代时在哪个点处进行采样

3、代码

  •  基本调参
import xgboost as xgb
from sklearn.metrics import roc_auc_score
from hyperopt import STATUS_OK, Trials, fmin, hp, tpe
from sklearn.model_selection import train_test_split
import numpy as np'''
author:liwei
date:2021/8/25
function:利用HyperoptSearch进行验证调参
'''
x,y=None,None
x_train,x_test,y_train,y_test = train_test_split(x, y, test_size=0.2)def score(params):print("Training with params: ")print(params)num_round = int(params['n_estimators'])del params['n_estimators']dtrain = xgb.DMatrix(x_train, label=y_train)dvalid = xgb.DMatrix(x_test, label=y_test)watchlist = [(dvalid, 'eval'), (dtrain, 'train')]gbm_model = xgb.train(params, dtrain, num_round,evals=watchlist,verbose_eval=True)predictions = gbm_model.predict(dvalid,ntree_limit=gbm_model.best_iteration + 1)score = roc_auc_score(y_test, predictions)print("\tScore {0}\n\n".format(score))# The score function should return the loss (1-score)# since the optimize function looks for the minimumloss = 1 - scorereturn {'loss': loss, 'status': STATUS_OK}def optimize(trials, random_state):space = {'n_estimators': hp.quniform('n_estimators', 100, 1000, 1),'eta': hp.quniform('eta', 0.025, 0.5, 0.025),'max_depth': hp.choice('max_depth', np.arange(1, 14, dtype=int)),'min_child_weight': hp.quniform('min_child_weight', 1, 6, 1),'subsample': hp.quniform('subsample', 0.5, 1, 0.05),'gamma': hp.quniform('gamma', 0.5, 1, 0.05),'colsample_bytree': hp.quniform('colsample_bytree', 0.5, 1, 0.05),'eval_metric': 'auc','objective': 'binary:logistic','nthread': -1,'booster': 'gbtree','tree_method': 'exact','silent': 1,'seed': random_state}# Use the fmin function from Hyperopt to find the best hyperparametersbest = fmin(score,              # 目标函数space,              # 搜索空间algo=tpe.suggest,   # 搜索算法trials=trials,      # 记录更多调参的过程,可打印trials观察max_evals=100)      # 最大迭代次数,想多于epochreturn best"""
其他特征处理步骤
"""if __name__ == "__main__":trials = Trials()optimize(trials, 6)
  •  交叉验证调参
import xgboost as xgb
import numpy as np
from hyperopt import fmin, tpe, hp,Trials'''
author:liwei
date:2021/8/25
function:利用Hyperopt进行五折交叉调参
'''
def hyperopt_objective(params):model = xgb.XGBClassifier(max_depth=int(params['max_depth']) + 5,learning_rate=params['learning_rate'],n_estimators=params['n_estimators'],eta=params['eta'],min_child_weight=params['min_child_weight'],subsample=params['subsample'],gamma=params['gamma'],reg_alpha=params['reg_alpha'],reg_lambda=params['reg_lambda'],colsample_bytree=params['colsample_bytree'],silent=1,objective='binary:logistic',booster='gbtree',tree_method='exact',eval_metric='error',seed=6,nthread=-1,)res = xgb.cv(model.get_params(), dtrain, num_boost_round=10, nfold=5)return np.min(res['test-error-mean'])  # as hyperopt minimisesspace = {'n_estimators': hp.quniform('n_estimators', 100, 1000, 1),'eta': hp.quniform('eta', 0.025, 0.5, 0.025),'max_depth':  hp.choice('max_depth', np.arange(3, 10, dtype=int)),'min_child_weight': hp.quniform('min_child_weight', 1, 6, 1),'subsample': hp.quniform('subsample', 0.5, 1, 0.05),'gamma': hp.quniform('gamma', 0.5, 1, 0.05),'reg_alpha': hp.quniform('reg_alpha',0.5, 1, 0.05),'reg_lambda': hp.quniform('reg_lambda', 0.5, 1, 0.05),'learning_rate': hp.quniform('learning_rate ', 0.5, 1, 0.05),'colsample_bytree': hp.quniform('colsample_bytree', 0.5, 1, 0.05),'eval_metric': 'auc','objective': 'binary:logistic','nthread': 4,'booster': 'gbtree','tree_method': 'exact','silent': 1,'seed': 6}
trials = Trials()best = fmin(hyperopt_objective,space=space,algo=tpe.suggest,max_evals=50,trials=trials,
)print(best)

《机器学习超参数调整利器》贝叶斯优化算法相关推荐

  1. 自动机器学习超参数调整(贝叶斯优化)

    [导读]机器学习中,调参是一项繁琐但至关重要的任务,因为它很大程度上影响了算法的性能.手动调参十分耗时,网格和随机搜索不需要人力,但需要很长的运行时间.因此,诞生了许多自动调整超参数的方法.贝叶斯优化 ...

  2. python 超参数_完整介绍用于Python中自动超参数调剂的贝叶斯优化

    完整介绍用于Python中自动超参数调剂的贝叶斯优化-1.jpg (109.5 KB, 下载次数: 0) 2018-7-4 23:45 上传 调剂机器学习超参数是一项繁琐但至关重要的任务,因为算法的性 ...

  3. python贝叶斯优化算法_【干货】手把手教你Python实现自动贝叶斯调整超参数

    [导读]机器学习中,调参是一项繁琐但至关重要的任务,因为它很大程度上影响了算法的性能.手动调参十分耗时,网格和随机搜索不需要人力,但需要很长的运行时间.因此,诞生了许多自动调整超参数的方法.贝叶斯优化 ...

  4. xgboost参数_具有贝叶斯优化的XGBoost和随机森林

    作者 | Edwin Lisowski 编译 | CDA数据分析师 XGBoost and Random Forest with Bayesian Optimisation 在这篇文章中,我们将介绍带 ...

  5. python贝叶斯优化算法_自动调参——贝叶斯优化算法hyperopt

    注:转载请注明出处. 本篇文章主要记录了贝叶斯优化算法hyperopt的学习笔记,如果想看自动化调参中的网格调参和遗传优化算法TPOT,请查看我另外两篇文章:网格搜索gridSearchCV和遗传优化 ...

  6. 贝叶斯优化算法(Bayesian optimiazation)

    贝叶斯优化算法(Bayesian optimiazation): 应用:超参数调优.贝叶斯优化调参 主要思想:给定优化的目标函数(广义的函数,只需指定输入和输出即可,无需知道内部结构以及数学性质),通 ...

  7. 贝叶斯优化算法python实例_贝叶斯优化/Bayesian Optimization

    最近心情不好,写篇文章让大家开心一下吧.介绍一下世界上最好的算法:贝叶斯优化. 背景介绍 近年来深度神经网络大火,可是神经网络的超参(hyperparameters)选择一直是一个问题,因为大部分时候 ...

  8. 改善深层神经网络:超参数调整、正则化以及优化——2.8 Adam算法(Adaptive Moment Estimation)

    Adam算法是Momentum和RMSprop结合在一起得到的.使用Adam算法,首先要初始化Vdw=0,Sdw=0,Vdb=0,Sdb=0V_{dw}=0,S_{dw}=0,V_{db}=0,S_{ ...

  9. 改善深层神经网络:超参数调整、正则化以及优化 —— 3.1调试处理

    如果想尝试调整一些超参数,该如何选择调试值呢? 在早一代的机器学习算法中,如果有两个超参数,常见的做法是在网格中取样点,然后系统的研究这些数值,例如放置5∗55*55∗5的点,实际证明,网格可以是5∗ ...

最新文章

  1. 人形图案c语言程序_做游戏,学编程(C语言) 7 学习EasyX图形交互功能----flappy bird源代码...
  2. ps查看oracle进程数,通过ps -ef | grep oracle查出的进程,怎样对应数据库中跑的进程...
  3. Spring配置数据源的四种方式
  4. 【一天一个shell命令】【cut】
  5. 一段让人瑟瑟发抖的ABAP代码
  6. 自己构建GlassFish 4.0快照
  7. 【SQL】分组数据,过滤分组-group by , having
  8. 如何做好一场技术演讲?
  9. java中session源码_Spring Session原理及源码分析
  10. 【正则化】Label Smoothing详解
  11. 关注Ionic底部导航按钮tabs在android情况下浮在上面的处理
  12. sccm安装手动下载必备组建
  13. 论文降重的主要内容有什么?
  14. 面试官问你的缺点是什么,这么回答漂亮!
  15. win10 mstsc 设置
  16. 2020 年互联网大厂薪资出炉!你酸了吗
  17. 18000担粮草和新四军情报
  18. 2022起重机械指挥考试练习题及模拟考试
  19. 基于STM32设计智能家居控制系统(OneNet)_2022
  20. iview使用Steps组件路由报错问题

热门文章

  1. Webshell文件上传漏洞和文件上传攻击相关梳理
  2. NFS服务器主配置文件名,NFS服务配置文件
  3. SP合作管理办法(暂行)
  4. Oracle变量定义的方法
  5. 猴子选大王问题(用最简单的思想)
  6. 3D游戏建模市场井喷式爆发,你还要再等吗?
  7. 上海最便宜又好的的23个地方
  8. wordpress图像大小_8个WordPress插件来创建令人敬畏的图像效果
  9. 上城区餐饮油污加大整治,环境污染攻坚克难
  10. 青海湖进入冰封季 宛如“冰河时代”