贝叶斯优化python包_贝叶斯优化

本文介绍了如何使用Python的Hyperopt库进行贝叶斯优化,以优化XGBoost的超参数。文章首先定义了目标函数,然后设置了超参数的搜索空间,接着利用TPE算法进行参数搜索,并存储了最佳结果。此外,文章还展示了如何扩展Hyperopt,使其在多个模型(如SVM、XGBoost、LightGBM等)中选择最优超参数。
摘要由CSDN通过智能技术生成

万壑松风知客来,摇扇抚琴待留声

1. 文起

本篇文章记录通过 Python 调用第三方库,从而调用使用了贝叶斯优化原理的 Hyperopt 方法来进行超参数的优化选择。具体贝叶斯优化原理与相关介绍将在下一次文章中做较为详细的描述,可以参考这里。

Hyperopt 是 Python 的几个贝叶斯优化库中的一个。它使用 Tree Parzen Estimator(TPE),其它 Python 库还包括了 Spearmint(高斯过程代理)和 SMAC(随机森林回归)。贝叶斯优化问题有四个部分:目标函数:使用的机器学习模型调用该组超参数在验证集上的损失。

域空间:类似于网格搜索,传入超参数的搜索范围。

参数搜索:构造替代函数并选择下一个超参数值进行评估的方法。

存储结果:最小化函数在评估每组测试后的最优超参数存储结果。

2. Hyperopt 简单样例说明:最简单的流程,实现以 XGBoost 作为调参模型,通过 hyperopt 完成上述贝叶斯优化的四个部分。

一:定义目标函数1

2

3

4

5

6

7

8

9

10train_X, test_X, train_y, test_y = train_test_split(df_scaler, df_y, test_size=0.3, random_state=999)

data_train =xgb.DMatrix(train_X, train_y, silent=False)

# 定义目标函数

def (params, n_folds=10):

cv_results =xgb.cv(params, data_train, num_boost_round=1000, nfold=n_folds, stratified=False, shuffle=True, metrics='mae', early_stopping_rounds=10)

mae = max(cv_results['test-mae-mean'])

loss = mae

return loss

objective() 是目标函数(黑盒函数),作用是返回一个损失值,Hyperopt 也是根据这个损失值来逐步选择超参数的。后续的 fmin() 函数会最小化这个损失,所以你可以根据是最大化还是最小化问题来改变这个返回值。此处的目标函数十分基础并没有做过多的调整,可根据实际情况来做修改目标函数。

二:设置域空间1

2

3

4

5

6

7

8

9from hyperopt import hp

space = {

'learning_rate': hp.loguniform('learning_rate',np.log(0.01),np.log(0.4)),

'max_depth': hp.choice('max_depth',range(1,8,1)),

'min_child_weight': hp.choice('min_child_weight',range(1,5,1)),

'reg_alpha': hp.uniform('reg_alpha',0.0,1.0),

'subsample': hp.uniform('subsample',0.5,1.0),

'colsample_bytree': hp.uniform('colsample_bytree',0.6,1.0)

}

域空间,也就是给定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值