贝叶斯优化bayes_opt在工程上的应用

贝叶斯优化bayes_opt在工程上的应用

贝叶斯优化方法是一种基于高斯过程去迭代搜索的优化算法,非常实用。下面,从一个具体的实例来简单了解一下贝叶斯优化方法。

详细讲解贝叶斯优化的例子见:https://coderzcolumn.com/tutorials/machine-learning/bayes-opt-bayesian-optimization-for-hyperparameters-tuning

Python中有一系列的用于调整超参数的库,比如:

  • optuna
  • hyperopt
  • bayes_opt
  • scikit-optimize
  • keras-tuner

本文详细介绍bayes_opt如何使用,关于其他的方法使用教程可见:https://coderzcolumn.com/tutorials/machine-learning/

“bayes_opt"是如何工作的

bayes_opt 利用贝叶斯推断和高斯过程来寻找超参数值,从而在较少的试验中获得最佳结果。它可以将任何黑盒函数作为输入,并最大化该函数的输出返回值。

超参数库首先会构建函数的后验分布(高斯过程),以准确描述我们想要最大化输出的输入函数。然后,库会尝试将函数作为输入的不同参数组合。

当我们尝试不同的组合时,后验分布就会得到改善。高斯过程会更多地了解参数空间中取得良好结果的区域,并在该空间中不断探索,而不是尝试整个参数空间。

每次试验都会拟合高斯过程,并使用后验分布和探索策略(UCB(置信度上限)或 EI(预期改进))来确定下一次尝试的参数组合。它试图在尽可能少的试验中找到函数的最佳参数设置。

使用”bayes_opt"来调整超参数的步骤

  • 定义 objective function
  • 定义 Hyperparameters Search Space
  • 最大化 objective function
  • 打印最佳结果

具体实例

以下是在光通信的DSP处理算法中的具体实例,由于实验时无法保证发射功率lp恒定,所以将lp设置为超参数,并用bayes_opt方法来查找使模型Q因子最大的lp。

  1. 定义 目标函数:

    def obj_func(lp):
        p = util.dBm2w(lp)
        p0 = util.dBm2w(1)
        sig, ber = eval_ber(mdl,
                            tstSet,
                            prbsTst,
                            use_cuda=True,
                            power_factor=p / p0)
    
        ber = np.mean(ber)
        Q = util.ber2q(ber)
        return Q      
    
  2. 定义超参数搜索的空间

    pbounds = {'lp':(-5,5)}
    

    注意这里要以字典的形式传入;由于只有一个超参数,所以字典里只有一个实体。

  3. 最大化目标函数

    optimizer = BayesianOptimization(
                        f=obj_func,
                        pbounds=pbounds,
                        verbose=2,
                    )
    utility = UtilityFunction(kind='ei',xi=0.05)
    optimizer.maximize(init_points=5,
                       n_iter=10,
                       acquisition_function=utility)
    

    首先要实例化一个贝叶斯优化器-optimizer=BayesianOptimization(f, pbounds, random_state=None, verbose=2);

    • f 就是我们定义好的目标函数
    • pbounds 就是我们定义好的参数搜索的字典

    其次,需要实例化一个Utility函数:UtilityFunction(kind=‘ei’, xi=0.05)

    • kind代表三种不同的种类,有‘ucb’: Upper Confidence Bound;‘ei’: Expected Improvement;‘poi’: Probablity of Improvment;
    • xi 代表随机初始点的值

    实例化后,可以调用optimizer的maxmized方法:maxmize(init_points=5, n_iter=10, acquisition_function=utility)

    • init_points 参数接受整数值,指定要尝试多少个随机参数组合。
    • n_iter 参数接受整数值,指定初始随机试验完成后要尝试多少个参数组合。
  4. 打印最佳结果

    Q = optimizer.max['target']
    lp_best = optimizer.max['params']
    # 如果还有其他超参数,那么如此打印:
    param_1 = optimizer.max['params']['param_1']
    param_2 = optimizer.max['params']['param_2']
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不发SCI不改名-wwk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值