GBM参数
总的来说GBM的参数可以被归为三类:
- 树参数:调节模型中每个决定树的性质
- Boosting参数:调节模型中boosting的操作
- 其他模型参数:调节模型总体的各项运作
定义一个决定树所需要的参数:
min_ samples_split- 定义了树中一个节点所需要用来分裂的最少样本数。
- 可以避免过度拟合(over-fitting)。如果用于分类的样本数太小,模型可能只适用于用来训练的样本的分类,而用较多的样本数则可以避免这个问题。
- 但是如果设定的值过大,就可能出现欠拟合现象(under-fitting)。因此我们可以用CV值(离散系数)考量调节效果。
- 定义了树中终点节点所需要的最少的样本数。
- 同样,它也可以用来防止过度拟合。
- 在不均等分类问题中(imbalanced class problems),一般这个参数需要被设定为较小的值,因为大部分少数类别(minority class)含有的样本都比较小。
- 和上面min_ samples_ leaf很像,不同的是这里需要的是一个比例而不是绝对数值:终点节点所需的样本数占总样本数的比值。
- #2和#3只需要定义一个就行了
- 定义了树的最大深度。
- 它也可以控制过度拟合,因为分类树越深就越可能过度拟合。
- 当然也应该用CV值检验。
- 定义了决定树里最多能有多少个终点节点。
- 这个属性有可能在上面max_ depth里就被定义了。比如深度为n的二叉树就有最多2^n个终点节点。
- 如果我们定义了max_ leaf_ nodes,GBM就会忽略前面的max_depth。
- 决定了用于分类的特征数,是人为随机定义的。
- 根据经验一般选择总特征数的平方根就可以工作得很好了,但还是应该用不同的值尝试,最多可以尝试总特征数的30%-40%.
- 过多的分类特征可能也会导致过度拟合。
- 影响boosting过程的参数:
learning_ rate
这个参数决定着每一个决定树对于最终结果的影响。GBM设定了初始的权重值之后,每一次树分类都会更新这个值,而learning_ rate控制着每次更新的幅度。
一般来说这个值不应该设的比较大,因为较小的learning rate使得模型对不同的树更加稳健,就能更好地综合它们的结果。
n_ estimators- 定义了需要使用到的决定树的数量(步骤2)
- 虽然GBM即使在有较多决定树时仍然能保持稳健,但还是可能发生过度拟合。所以也需要针对learning rate用CV值检验。
subsample
- 训练每个决定树所用到的子样本占总样本的比例,而对于子样本的选择是随机的。
- 用稍小于1的值能够使模型更稳健,因为这样减少了方差。
- 一把来说用~0.8就行了,更好的结果可以用调参获得。
好了,现在我们已经介绍了树参数和boosting参数,此外还有第三类参数,它们能影响到模型的总体功能:
loss
- 指的是每一次节点分裂所要最小化的损失函数(loss function)
- 对于分类和回归模型可以有不同的值。一般来说不用更改,用默认值就可以了,除非你对它及它对模型的影响很清楚。
- 它影响了输出参数的起始化过程
- 如果我们有一个模型,它的输出结果会用来作为GBM模型的起始估计,这个时候就可以用init
- 作为每次产生随机数的随机种子
- 使用随机种子对于调参过程是很重要的,因为如果我们每次都用不同的随机种子,即使参数值没变每次出来的结果也会不同,这样不利于比较不同模型的结果。
- 任一个随即样本都有可能导致过度拟合,可以用不同的随机样本建模来减少过度拟合的可能,但这样计算上也会昂贵很多,因而我们很少这样用
- 决定建模完成后对输出的打印方式:
- 0:不输出任何结果(默认)
- 1:打印特定区域的树的输出结果
- >1:打印所有结果
- 这个参数的效果很有趣,有效地使用它可以省很多事
- 使用它我们就可以用一个建好的模型来训练额外的决定树,能节省大量的时间,对于高阶应用我们应该多多探索这个选项。
- 决定是否对数据进行预排序,可以使得树分裂地更快。
- 默认情况下是自动选择的,当然你可以对其更改
- 参数调节的一般方法
learning rate没有什么特别的调节方法,因为只要我们训练的树足够多learning rate总是小值来得好。
虽然随着决定树的增多GBM并不会明显得过度拟合,高learing rate还是会导致这个问题,但如果我们一味地减小learning rate、增多树,计算就会非常昂贵而且需要运行很长时间。了解了这些问题,我们决定采取以下方法调参:
- 选择一个相对来说稍微高一点的learning rate。一般默认的值是0.1,不过针对不同的问题,0.05到0.2之间都可以
- 决定当前learning rate下最优的决定树数量。它的值应该在40-70之间。记得选择一个你的电脑还能快速运行的值,因为之后这些树会用来做很多测试和调参。
- 接着调节树参数来调整learning rate和树的数量。我们可以选择不同的参数来定义一个决定树,后面会有这方面的例子
- 降低learning rate,同时会增加相应的决定树数量使得模型更加稳健
- 固定 learning rate和需要估测的决定树数量
为了决定boosting参数,我们得先设定一些参数的初始值,可以像下面这样:
- min_ samples_ split=500: 这个值应该在总样本数的0.5-1%之间,由于我们研究的是不均等分类问题,我们可以取这个区间里一个比较小的数,500。
- min_ samples_ leaf=50: 可以凭感觉选一个合适的数,只要不会造成过度拟合。同样因为不均等分类的原因,这里我们选择一个比较小的值
- max_ depth=8: 根据观察数和自变量数,这个值应该在5-8之间。这里我们的数据有87000行,49列,所以我们先选深度为8。
- max_ features=’sqrt’: 经验上一般都选择平方根。
- subsample=0.8: 开始的时候一般就用0.8
注意我们目前定的都是初始值,最终这些参数的值应该是多少还要靠调参决定。现在我们可以根据learning rate的默认值0.1来找到所需要的最佳的决定树数量,可以利用网格搜索(grid search)实现,以10个数递增,从20测到80。
- 调节树参数
树参数可以按照这些步骤调节:
- 调节max_depth和
num_samples_split
- 调节
min_samples_leaf
- 调节max_features
需要注意一下调参顺序,对结果影响最大的参数应该优先调节,就像max_depth
和num_samples_split
。
可以使用网格搜索(grid search),根据电脑情况适当调整需要测试的值。
- 调节子样本比例来降低learning rate
有一个技巧就是用“warm_start”选项。这样每次用不同个数的树都不用重新开始
参考https://blog.csdn.net/han_xiaoyang/article/details/52663170