《机器学习超参数调整利器》贝叶斯优化算法
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)
《机器学习超参数调整利器》贝叶斯优化算法相关推荐
- 自动机器学习超参数调整(贝叶斯优化)
[导读]机器学习中,调参是一项繁琐但至关重要的任务,因为它很大程度上影响了算法的性能.手动调参十分耗时,网格和随机搜索不需要人力,但需要很长的运行时间.因此,诞生了许多自动调整超参数的方法.贝叶斯优化 ...
- python 超参数_完整介绍用于Python中自动超参数调剂的贝叶斯优化
完整介绍用于Python中自动超参数调剂的贝叶斯优化-1.jpg (109.5 KB, 下载次数: 0) 2018-7-4 23:45 上传 调剂机器学习超参数是一项繁琐但至关重要的任务,因为算法的性 ...
- python贝叶斯优化算法_【干货】手把手教你Python实现自动贝叶斯调整超参数
[导读]机器学习中,调参是一项繁琐但至关重要的任务,因为它很大程度上影响了算法的性能.手动调参十分耗时,网格和随机搜索不需要人力,但需要很长的运行时间.因此,诞生了许多自动调整超参数的方法.贝叶斯优化 ...
- xgboost参数_具有贝叶斯优化的XGBoost和随机森林
作者 | Edwin Lisowski 编译 | CDA数据分析师 XGBoost and Random Forest with Bayesian Optimisation 在这篇文章中,我们将介绍带 ...
- python贝叶斯优化算法_自动调参——贝叶斯优化算法hyperopt
注:转载请注明出处. 本篇文章主要记录了贝叶斯优化算法hyperopt的学习笔记,如果想看自动化调参中的网格调参和遗传优化算法TPOT,请查看我另外两篇文章:网格搜索gridSearchCV和遗传优化 ...
- 贝叶斯优化算法(Bayesian optimiazation)
贝叶斯优化算法(Bayesian optimiazation): 应用:超参数调优.贝叶斯优化调参 主要思想:给定优化的目标函数(广义的函数,只需指定输入和输出即可,无需知道内部结构以及数学性质),通 ...
- 贝叶斯优化算法python实例_贝叶斯优化/Bayesian Optimization
最近心情不好,写篇文章让大家开心一下吧.介绍一下世界上最好的算法:贝叶斯优化. 背景介绍 近年来深度神经网络大火,可是神经网络的超参(hyperparameters)选择一直是一个问题,因为大部分时候 ...
- 改善深层神经网络:超参数调整、正则化以及优化——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_{ ...
- 改善深层神经网络:超参数调整、正则化以及优化 —— 3.1调试处理
如果想尝试调整一些超参数,该如何选择调试值呢? 在早一代的机器学习算法中,如果有两个超参数,常见的做法是在网格中取样点,然后系统的研究这些数值,例如放置5∗55*55∗5的点,实际证明,网格可以是5∗ ...
最新文章
- 人形图案c语言程序_做游戏,学编程(C语言) 7 学习EasyX图形交互功能----flappy bird源代码...
- ps查看oracle进程数,通过ps -ef | grep oracle查出的进程,怎样对应数据库中跑的进程...
- Spring配置数据源的四种方式
- 【一天一个shell命令】【cut】
- 一段让人瑟瑟发抖的ABAP代码
- 自己构建GlassFish 4.0快照
- 【SQL】分组数据,过滤分组-group by , having
- 如何做好一场技术演讲?
- java中session源码_Spring Session原理及源码分析
- 【正则化】Label Smoothing详解
- 关注Ionic底部导航按钮tabs在android情况下浮在上面的处理
- sccm安装手动下载必备组建
- 论文降重的主要内容有什么?
- 面试官问你的缺点是什么,这么回答漂亮!
- win10 mstsc 设置
- 2020 年互联网大厂薪资出炉!你酸了吗
- 18000担粮草和新四军情报
- 2022起重机械指挥考试练习题及模拟考试
- 基于STM32设计智能家居控制系统(OneNet)_2022
- iview使用Steps组件路由报错问题