贝叶斯调参——bayes_opt

一、简介

贝叶斯调参主要思想是,给定优化的目标函数(广义的函数,只需指定输入和输出即可,无需知道内部结构以及数学性质),通过不断地添加样本点来更新目标函数的后验分布

他与常规的网格搜索或者随机搜索的区别是:

  • 贝叶斯调参采用高斯过程,考虑之前的参数信息,不断地更新先验;网格搜索未考虑之前的参数信息
  • 贝叶斯调参迭代次数少,速度快;网格搜索速度慢,参数多时易导致维度爆炸
  • 贝叶斯调参针对非凸问题依然稳健;网格搜索针对非凸问题易得到局部优最

二、安装

pip install bayesian-optimization

我一开始下载贝叶斯模块的时候,报time-out,最近好像用pip下载一直报time-out
贝叶斯调参——bayes_opt_第1张图片
这里介绍个神奇:一个神奇的镜像 pip install -i https://pypi.douban.com/simple bayesian-optimization
贝叶斯调参——bayes_opt_第2张图片

三、用贝叶斯调参的小例子:

from bayes_opt import BayesianOptimization

def rf_cv(num_leaves,max_depth,subsample,min_child_samples):
    val = cross_val_score(LGBMRegressor(
                               objective = 'regression_l1',
                                num_leaves=int(num_leaves),
                                max_depth=int(max_depth),
                                subsample = subsample,
                                min_child_samples = int(min_child_samples)
                               )
                         ,X=train_X, y=train_y_ln, verbose=0, cv = 5, scoring=make_scorer(mean_absolute_error)
                         ).mean()
    return 1 - val

#实例化一个bayes优化对象了:
rf_bo = BayesianOptimization(
    rf_cv,
    {
        'num_leaves':(2,100),
        'max_depth':(2,100),
        'subsample':(0.1,1),
        'min_child_samples':(2,100)
    }
)

#运行bayes优化
rf_bo.maximize()
#输出分数
1 - rf_bo.max['target']

plt.figure(figsize=(13,5))
sns.lineplot(x=['0_origin','1_log_transfer','2_L1_&_L2','3_change_model','4_parameter_turning'], y=[1.36 ,0.19, 0.19, 0.14, 0.13])

完成的时候会不断地输出结果,如下图所示:
贝叶斯调参——bayes_opt_第3张图片
参考:https://www.cnblogs.com/yangruiGB2312/p/9374377.html

你可能感兴趣的:(机器学习)