一 LightGBM核心参数

参数 中文含义 作用
learning_rate 学习率,默认值0.1 控制模型迭代速度,越大模型迭代越快,但容易错过最优点;越小模型迭代越慢,容易找到最优点
num_iterations 迭代次数 控制迭代次数
max_depth 树的深度 设置树深度,深度越大越有可能过拟合
num_leaves 叶子节点数 调节树的复杂程度
min_data_in_leaf 叶子具有最小节点数 设置的较大可以避免生成一个过深的树,但有可能导致欠拟合
min_sum_hessian_in_leaf 结点分裂的最小海森值之和 也叫min_child_weight,使一个节点分裂的最小海森值之和
feature_fraction 特征子抽样 可以用来防止过拟合及提高训练速度
bagging_fraction 降采样 相当于subsample样本采样,可以使bagging更快的运行,同时也可以降拟合
bagging_freq 降采样频率 表示bagging的频率,0意味着没有使用bagging,k意味着每k轮迭代进行一次bagging
reg_alpha L1正则化 降低过拟合
reg_lambda L2正则化 降低过拟合
cat_smooth 类别平滑 设置每个类别需要有的最小个数

二gridsearchcv工作机制

GridSearchCV=GridSearch+CV 即网格搜索和交叉验证

网格搜索,搜索的使参数,即在指定的参数范围内,按步长依次调整参数,利用调整的参数训练学习器,从所有的参数中找到在验证集上精度最高的参数,这其实是一个循环和比较的过程

GridSearchCV可以保证在指定的参数范围内找到精度最高的参数,但是这也是网格搜索的缺陷所在,它要求遍历所有可能参数的组合,在面对大数据集和多参数的情况下,非常耗时。

交叉验证的概念:

  • 将训练数据集划分为K份,K一般为10(也有取3~5)
  • 依次取其中一份为验证集,其余为训练集训练分类器,测试分类器在验证集上的精度;
  • 取K次实验的平均精度为该分类器的平均精度

参数名称及含义如下:

参数名称 含义
estimator 所使用的分类器
param_grid 值为字典或者列表,即需要最优化的参数的取值
scoring 准确度评价标准
cv 交叉验证参数,没人None,使用三折交叉验证。指定fold数量,默认为3
refit 默认为True,程序会以交叉验证数据集得到的最佳参数,重新对所有可用的训练集与开发集进行,作为最终用于性能评估的最佳模型参数。即在搜索参数结束后,用最佳参数结果再次fit一遍全部数据集
iid 默认True,为True时,默认为各个样本fold概率分布一致,误差估计为所有样本之和,而非各个fold的平均
verbose 日志冗长度,int:冗长度,0:不输出训练过程,1:偶尔输出 >1:对每个子模型都输出
n_jobs 并行数 int:个数 -1:跟CPU核数一致 默认值为1
pre_dispatch 指定总共分发的并行任务数。当n_jobs大于1时,数据将在每个运行点进行复制,这颗呢我那个导致OOM,而设置pre_dispatch参数,则可以预先划分总共的job数量,使数据最多被赋值pre_dispatch次

三 使用gridsearchcv对lightgbm调参

对于基于决策树的模型,调参的方法都是大同小异。一般都需要如下步骤:

  1. 首先选择较高的学习率 0.1附近 加快收敛速度
  2. 对决策树基本参数调参
  3. 正则化参数调参
  4. 最后降低学习率,这里是为了最后提高准确率

我使用的默认参数如下:

objective = 'binary',
is_unbalance = True,
metric = 'binary_logloss,auc',
max_depth = 6,
num_leaves = 40,
learning_rate = 0.1,
feature_fraction = 0.7,
min_child_samples=21,
min_child_weight=0.001,
bagging_fraction = 1,
bagging_freq = 2,
reg_alpha = 0.001,
reg_lambda = 8,
cat_smooth = 0,
num_iterations = 200,   

开始时,需要把学习率和迭代次数调整到一个比较大的值。本人一般刚开始时设置learning_rate=0.1,num_iterations = 200。


Machine Learning     

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!