用贝叶斯优化的方法优化xgboost的参数
除了我们平常所做的网格搜索,随机搜索外,我发现贝叶斯优化的方法挺不错,然后我就尝试了一下,发现效果挺好的,我这里把我的代码分享出来:
贝叶斯优化通过基于目标函数的过去评估结果建立替代函数(概率模型),来找到最小化目标函数的值。贝叶斯方法与随机或网格搜索的不同之处在于,它在尝试下一组超参数时,会参考之前的评估结果,因此可以省去很多无用功。
超参数的评估代价很大,因为它要求使用待评估的超参数训练一遍模型,而许多深度学习模型动则几个小时几天才能完成训练,并评估模型,因此耗费巨大。贝叶斯调参发使用不断更新的概率模型,通过推断过去的结果来“集中”有希望的超参数。
1 导入库包
from skopt import BayesSearchCV
import xgboost as xgb
from sklearn.model_selection import train_test_split
import pandas as pd
from sklearn.model_selection import StratifiedKFold
import numpy as np
from sklearn.utils import shuffle
2 加载数据
train_path='ads_train.csv'
train_data=pd.read_csv(train_path)
3 数据集特征处理
train_data = shuffle(train_data)
X=train_data[['isbuyer', 'buy_freq', 'visit_freq', 'buy_interval','sv_interval', 'expected_time_buy', 'expected_time_visit', 'last_buy', 'multiple_buy', 'multiple_visit', 'uniq_urls','num_checkins']]
Y=train_data[['y_buy']]
X_train,X_test,y_train,y_test=train_test_split(X,Y,test_size=0.2)
优化代码
ITERATIONS=100
# Classifier
bayes_cv_tuner = BayesSearchCV(estimator = xgb.XGBClassifier(n_jobs = 1,objective = 'binary:logistic',eval_metric = 'auc',silent=1,tree_method='approx'),search_spaces = {'learning_rate': (0.01, 1.0, 'log-uniform'),'min_child_weight': (0, 10),'max_depth': (0, 50),'max_delta_step': (0, 20),'subsample': (0.01, 1.0, 'uniform'),'colsample_bytree': (0.01, 1.0, 'uniform'),'colsample_bylevel': (0.01, 1.0, 'uniform'),'reg_lambda': (1e-9, 1000, 'log-uniform'),'reg_alpha': (1e-9, 1.0, 'log-uniform'),'gamma': (1e-9, 0.5, 'log-uniform'),'min_child_weight': (0, 5),'n_estimators': (50, 100),'scale_pos_weight': (1e-6, 500, 'log-uniform')}, scoring = 'roc_auc',cv = StratifiedKFold(n_splits=5,shuffle=True,random_state=42),n_jobs = 6,n_iter = ITERATIONS, verbose = 0,refit = True,random_state = 42
)def status_print(optim_result):"""Status callback durring bayesian hyperparameter search"""# Get all the models tested so far in DataFrame formatall_models = pd.DataFrame(bayes_cv_tuner.cv_results_) # Get current parameters and the best parameters best_params = pd.Series(bayes_cv_tuner.best_params_)print('Model #{}\nBest ROC-AUC: {}\nBest params: {}\n'.format(len(all_models),np.round(bayes_cv_tuner.best_score_, 4),bayes_cv_tuner.best_params_))print(dict(bayes_cv_tuner.best_params_))# Save all model resultsclf_name = bayes_cv_tuner.estimator.__class__.__name__all_models.to_csv(clf_name+"_cv_results.csv")result = bayes_cv_tuner.fit(X.values, Y.values, callback=status_print)
参考文献
Bayesian hyperparameter tuning of xgBoost
自动机器学习超参数调整(贝叶斯优化)
用贝叶斯优化的方法优化xgboost的参数相关推荐
- mysql 优化查询方法,优化MYSQL查询的详细方法
优化MYSQL查询的详细方法 发布时间:2020-06-08 17:19:28 来源:PHP中文网 阅读:135 作者:三月 不知道大家之前对类似优化MYSQL查询的详细方法的文章有无了解,今天我在这 ...
- 【故障诊断】基于贝叶斯优化支持向量机的轴承故障诊断附matlab代码
1 内容介绍 贝叶斯网络(Bayesian Network或BN)是人工智能领域进行建模和不确定性推理的一个有效工具.贝叶斯网推理的基本任务是:给定一组证据变量观察值,通过搜索条件概率表计算一组查询变 ...
- 对频率论(Frequentist)方法和贝叶斯方法(Bayesian Methods)的一个总结
本文是对<IPython Interactive Computing and Visualization Cookbook>一书中第七章[Introduction to statistic ...
- 判别模型、生成模型与朴素贝叶斯方法
1.判别模型与生成模型 上篇报告中提到的回归模型是判别模型,也就是根据特征值来求结果的概率.形式化表示为,在参数确定的情况下,求解条件概率.通俗的解释为在给定特征后预测结果出现的概率. 比如说要确定一 ...
- 一步步教你轻松学朴素贝叶斯模型算法理论篇1
一步步教你轻松学朴素贝叶斯模型理论篇1 (白宁超2018年9月3日17:51:32) 导读:朴素贝叶斯模型是机器学习常用的模型算法之一,其在文本分类方面简单易行,且取得不错的分类效果.所以很受欢迎,对 ...
- 贝叶斯网络结构学习之K2算法(基于FullBNT-1.0.4的MATLAB实现)
题目:贝叶斯网络结构学习之K2算法(基于FullBNT-1.0.4的MATLAB实现) 有关贝叶斯网络结构学习的一基本概念可以参考:贝叶斯网络结构学习方法简介 有关函数输入输出参数的解释可以参考:贝叶 ...
- 机器学习笔记(七)贝叶斯分类器
7.贝叶斯分类器 7.1贝叶斯决策论 贝叶斯决策论(Bayesiandecision theory)是概率框架下实施决策的基本方法.对分类任务来说,在所有相关概率都已知的理想情形下,贝叶斯决策论考虑如 ...
- Python的贝叶斯网络学习库pgmpy介绍和使用
文章目录 pgmpy 代码记录 包 parameter Learning structural Learning with Score structural Learning with Constra ...
- 实现 | 朴素贝叶斯模型算法研究与实例分析
实现 | 朴素贝叶斯模型算法研究与实例分析 (白宁超 2018年9月4日10:28:49) 导读:朴素贝叶斯模型是机器学习常用的模型算法之一,其在文本分类方面简单易行,且取得不错的分类效果.所以很受 ...
最新文章
- Vim安装、配置和插件的添加使用(可以以目录的形式打开)
- tf.pad函数功能介绍
- java数组 —(7)
- P6669 [清华集训2016] 组合数问题
- 目录操作相关的系统函数
- 《SolidWorks 2013中文版机械设计从入门到精通》一1.4 操作环境设置
- AT指令联网---以鸿蒙开发板为例
- [翻译] 物理引擎javascript实现
- php网页登录制作,thinkphp5 系统登录的实现
- Dart基础第3篇:常用数据类型、字符串类型、数值类型、布尔类型、List集合类型、Maps类型
- linux命令面试题大全,Linux系统命令面试题大全
- 微信文件夹下不可言说的秘密自动生成小视频文件
- ZZNUOJ_C语言1047:对数表(完整代码)
- 推荐6本Java书籍,助你在Java路上更精进!
- 接口文档神器---Swagger注解使用与实例
- 目前我国网络安全人才市场状况
- RK3066开发板的唯一码UUID
- linux报错Error: /proc must be mounted
- Understand for linux
- 经济原理 —— 经济机器如何运行
热门文章
- linux命令 dmesg,Linux命令入门(1) dmesg命令介绍
- 深度Linux15.11+Wine5.0_RC2+DXVK1.5之古剑奇譚网络版
- 队列知识及编程练习总结
- 使用tensorflow构建简单卷积神经网络
- python安装库的方法
- 卧槽!华为也开始养猪了
- js节点都有哪些类型?怎么判断是哪种节点类型?
- JavaScript常用节点类型
- java excel导入太慢_[Java] 高效快速导入EXCEL数据
- 冰箱什么品牌最好排名前十名 冰箱什么品牌最省电2023