GBM参数

GBM参数

转载自:http://blog.csdn.net/mr_tyting/article/details/73004303

总的来说GBM的参数可以被归为三类:
  1. 树参数:调节模型中每个决定树的性质
  2. Boosting参数:调节模型中boosting的操作
  3. 其他模型参数:调节模型总体的各项运作
从树参数开始,首先一个决定树的大致结构是这样的:


 
现在我们看一看定义一个决定树所需要的参数。注意我在这里用的都是 python 里scikit-learn里面的术语,和其他软件比如R里用到的可能不同,但原理都是相同的。
  1. min_ samples_split 
    1. 定义了树中一个节点所需要用来分裂的最少样本数。
    2. 可以避免过度拟合(over-fitting)。如果用于分类的样本数太小,模型可能只适用于用来训练的样本的分类,而用较多的样本数则可以避免这个问题。
    3. 但是如果设定的值过大,就可能出现欠拟合现象(under-fitting)。因此我们可以用CV值(离散系数)考量调节效果。
  2. min_ samples_leaf 
    1. 定义了树中终点节点所需要的最少的样本数。
    2. 同样,它也可以用来防止过度拟合。
    3. 在不均等分类问题中(imbalanced class problems),一般这个参数需要被设定为较小的值,因为大部分少数类别(minority class)含有的样本都比较小。
  3. min_ weight_ fraction_leaf 
    1. 和上面min_ samples_ leaf很像,不同的是这里需要的是一个比例而不是绝对数值:终点节点所需的样本数占总样本数的比值。
    2. #2和#3只需要定义一个就行了
  4. max_ depth 
    1. 定义了树的最大深度。
    2. 它也可以控制过度拟合,因为分类树越深就越可能过度拟合。
    3. 当然也应该用CV值检验。
  5. max_ leaf_ nodes 
    1. 定义了决定树里最多能有多少个终点节点。
    2. 这个属性有可能在上面max_ depth里就被定义了。比如深度为n的二叉树就有最多2^n个终点节点。
    3. 如果我们定义了max_ leaf_ nodes,GBM就会忽略前面的max_depth。
  6. max_ features 
    1. 决定了用于分类的特征数,是人为随机定义的。
    2. 根据经验一般选择总特征数的平方根就可以工作得很好了,但还是应该用不同的值尝试,最多可以尝试总特征数的30%-40%.
    3. 过多的分类特征可能也会导致过度拟合。
在继续介绍其他参数前,我们先看一个简单的GBM二分类伪代码:
1. 初始分类目标的参数值2. 对所有的分类树进行迭代: 2.1 根据前一轮分类树的结果更新分类目标的权重值(被错误分类的有更高的权重) 2.2 用训练的子样本建模 2.3 用所得模型对所有的样本进行预测 2.4 再次根据分类结果更新权重值3. 返回最终结果

以上步骤是一个极度简化的BGM模型,而目前我们所提到的参数会影响2.2这一步,即建模的过程。现在我们来看看影响boosting过程的参数:
  1. learning_ rate 
    1. 这个参数决定着每一个决定树对于最终结果(步骤2.4)的影响。GBM设定了初始的权重值之后,每一次树分类都会更新这个值,而learning_ rate控制着每次更新的幅度。
    2. 一般来说这个值不应该设的比较大,因为较小的learning rate使得模型对不同的树更加稳健,就能更好地综合它们的结果。
  2. n_ estimators 
    1. 定义了需要使用到的决定树的数量(步骤2)
    2. 虽然GBM即使在有较多决定树时仍然能保持稳健,但还是可能发生过度拟合。所以也需要针对learning rate用CV值检验。
  3. subsample
    1. 训练每个决定树所用到的子样本占总样本的比例,而对于子样本的选择是随机的。
    2. 用稍小于1的值能够使模型更稳健,因为这样减少了方差。
    3. 一把来说用~0.8就行了,更好的结果可以用调参获得。
  4. 好了,现在我们已经介绍了树参数和boosting参数,此外还有第三类参数,它们能影响到模型的总体功能:
  5. loss
    1. 指的是每一次节点分裂所要最小化的损失函数(loss function)
    2. 对于分类和回归模型可以有不同的值。一般来说不用更改,用默认值就可以了,除非你对它及它对模型的影响很清楚。
  6. init 
    1. 它影响了输出参数的起始化过程
    2. 如果我们有一个模型,它的输出结果会用来作为GBM模型的起始估计,这个时候就可以用init
  7. random_ state 
    1. 作为每次产生随机数的随机种子
    2. 使用随机种子对于调参过程是很重要的,因为如果我们每次都用不同的随机种子,即使参数值没变每次出来的结果也会不同,这样不利于比较不同模型的结果。
    3. 任一个随即样本都有可能导致过度拟合,可以用不同的随机样本建模来减少过度拟合的可能,但这样计算上也会昂贵很多,因而我们很少这样用
  8. verbose 
    1. 决定建模完成后对输出的打印方式: 
      1. 0:不输出任何结果(默认)
      2. 1:打印特定区域的树的输出结果
      3. >1:打印所有结果
  9. warm_ start 
    1. 这个参数的效果很有趣,有效地使用它可以省很多事
    2. 使用它我们就可以用一个建好的模型来训练额外的决定树,能节省大量的时间,对于高阶应用我们应该多多探索这个选项。
  10. presort 
    1. 决定是否对数据进行预排序,可以使得树分裂地更快。
    2. 默认情况下是自动选择的,当然你可以对其更改
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
lightgbm是一种强大的机器学习算法,参数调整对于其性能的优化至关重要。下面是一些常见的lightgbm参数调整的方法: 1. 学习率(learning rate):学习率控制每一步迭代中算法对问题的贡献。较小的学习率可以帮助算法更好地适应数据,但也会增加训练时间。如果您的模型欠拟合,可以尝试增加学习率,反之则减小学习率。 2. 树的数量(num_iterations):树的数量决定了模型的复杂度,太少的树可能导致欠拟合,而太多的树可能导致过拟合。您可以通过验证集上的性能来选择最佳的树的数量。 3. 树的深度(max_depth):树的深度控制模型的复杂度,太深的树可能导致过拟合。因此,您可以通过限制树的深度来避免过拟合。 4. 正则化参数(lambda和alpha):正则化参数用于控制模型的复杂度。lambda是L2正则化参数,用于控制模型权重的平方和的大小;alpha是L1正则化参数,用于控制模型权重的绝对值的大小。适当调整正则化参数可以帮助防止过拟合。 5. 特征子采样比例(feature_fraction):特征子采样比例是指在每一次迭代中使用的特征的比例。通过减少特征子集的大小,可以减少过拟合的风险。 6. 数据子采样比例(bagging_fraction):数据子采样比例是指在每一次迭代中使用的数据的比例。通过减少数据子集的大小,可以减少过拟合的风险。 请记住,这些只是一些常见的参数调整方法,实际上,您可能需要尝试不同的参数组合来找到最佳的模型性能。您可以使用交叉验证来评估不同参数组合的性能,并选择表现最好的参数设置。 参考资料: 引用:https://lightgbm.readthedocs.io/en/latest/Parameters-Tuning.html 引用:https://machinelearningmastery.com/gentle-introduction-lightgbm-library-python/ 引用[3]:https://www.analyticsvidhya.com/blog/2017/06/which-algorithm-takes-the-crown-light-gbm-vs-xgboost/

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值