贝叶斯全局优化(LightGBM调参)

  这里结合Kaggle比赛的一个数据集,记录一下使用贝叶斯全局优化和高斯过程来寻找最佳参数的方法步骤。

  1.安装贝叶斯全局优化库

  从pip安装最新版本

  pip install bayesian-optimization

  2.加载数据集

  import pandas as pd

  import numpy as np

  from sklearn.model_selection import StratifiedKFold

  from scipy.stats import rankdata

  from sklearn import metrics

  import lightgbm as lgb

  import warnings

  import gc

  pd.set_option('display.max_columns', 200)

  train_df = pd.read_csv('../input/train.csv')

  test_df = pd.read_csv('../input/test.csv')

  目标变量的分布

  target = 'target'

  predictors = train_df.columns.values.tolist()[2:]

  train_df.target.value_counts()

  

在这里插入图片描述

  问题是不平衡。这里使用50%分层行作为保持行,以便验证集获得最佳参数。 稍后将在最终模型拟合中使用5折交叉验证。

  bayesian_tr_index, bayesian_val_index = list(StratifiedKFold(n_splits=2,

  shuffle=True, random_state=1).split(train_df, train_df.target.values))[0]

  这些bayesian_tr_index和bayesian_val_index索引将用于贝叶斯优化,作为训练和验证数据集的索引。

  3.黑盒函数优化(LightGBM)

  在加载数据时,为LightGBM创建黑盒函数以查找参数。

  def LGB_bayesian(

  num_leaves, # int

  min_data_in_leaf, # int

  learning_rate,

  min_sum_hessian_in_leaf, # int

  feature_fraction,

  lambda_l1,

  lambda_l2,

  min_gain_to_split,

  max_depth):

  # LightGBM expects next three parameters need to be integer. So we make them integer

  num_leaves = int(num_leaves)

  min_data_in_leaf = int(min_data_in_leaf)

  max_depth = int(max_depth)

  assert type(num_leaves) == int

  assert type(min_data_in_leaf) == int

  assert type(max_depth) == int

  param = {

  'num_leaves': num_leaves,

  'max_bin': 63,

  'min_data_in_leaf': min_data_in_leaf,

  'learning_rate': learning_rate,

  'min_sum_hessian_in_leaf': min_sum_hessian_in_leaf,

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值