@Channelchan
2018-01-28T19:52:26.000000Z
字数 3177
阅读 971
Boosting是如何工作的?
Boosting可以将一系列弱学习因子(weak learners)相结合来提升总体模型的预测准确度。在任意时间t,根据t-1时刻得到的结果我们给当前结果赋予一个权重。之前正确预测的结果获得较小权重,错误分类的结果得到较大权重。回归问题的处理方法也是相似的。
让我们用图像帮助理解:
图一: 第一个弱学习因子的预测结果(从左至右)
一开始所有的点具有相同的权重(以点的尺寸表示)。
分类线正确地分类了两个正极和五个负极的点。
图二: 第二个弱学习因子的预测结果
在图一中被正确预测的点有较小的权重(尺寸较小),而被预测错误的点则有较大的权重。
这时候模型就会更加注重具有大权重的点的预测结果,即上一轮分类错误的点,现在这些点被正确归类了,但其他点中的一些点却归类错误。
对图3的输出结果的理解也是类似的。这个算法一直如此持续进行直到所有的学习模型根据它们的预测结果都被赋予了一个权重,这样我们就得到了一个总体上更为准确的预测模型。
定义了树中一个节点所需要用来分裂的最少样本数。
可以避免过度拟合(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%.
过多的分类特征可能也会导致过度拟合。
这个参数决定着每一个决定树对于最终结果(步骤2.4)的影响。GBM设定了初始的权重值之后,每一次树分类都会更新这个值,而learning_ rate控制着每次更新的幅度。
一般来说这个值不应该设的比较大,因为较小的learning rate使得模型对不同的树更加稳健,就能更好地综合它们的结果。
定义了需要使用到的决定树的数量(步骤2)
虽然GBM即使在有较多决定树时仍然能保持稳健,但还是可能发生过度拟合。所以也需要针对learning rate用CV值检验。
训练每个决定树所用到的子样本占总样本的比例,而对于子样本的选择是随机的。
用稍小于1的值能够使模型更稳健,因为这样减少了方差。
一把来说用~0.8就行了,更好的结果可以用调参获得。
好了,现在我们已经介绍了树参数和boosting参数,此外还有第三类参数,它们能影响到模型的总体功能:
指的是每一次节点分裂所要最小化的损失函数(loss function)
对于分类和回归模型可以有不同的值。一般来说不用更改,用默认值就可以了,除非你对它及它对模型的影响很清楚。
它影响了输出参数的起始化过程
如果我们有一个模型,它的输出结果会用来作为GBM模型的起始估计,这个时候就可以用init
作为每次产生随机数的随机种子
使用随机种子对于调参过程是很重要的,因为如果我们每次都用不同的随机种子,即使参数值没变每次出来的结果也会不同,这样不利于比较不同模型的结果。
任一个随即样本都有可能导致过度拟合,可以用不同的随机样本建模来减少过度拟合的可能,但这样计算上也会昂贵很多,因而我们很少这样用
决定建模完成后对输出的打印方式:
0:不输出任何结果(默认)
1:打印特定区域的树的输出结果
1:打印所有结果
这个参数的效果很有趣,有效地使用它可以省很多事
使用它我们就可以用一个建好的模型来训练额外的决定树,能节省大量的时间,对于高阶应用我们应该多多探索这个选项。
决定是否对数据进行预排序,可以使得树分裂地更快。
默认情况下是自动选择的,当然你可以对其更改
为了解释梯度下降,我将使用经典的登山例子。
假设你在山顶,你必须到达一个位于山顶的湖泊(a.k.。一个山谷)。一个扭曲的地方是,你被蒙上眼睛,你的能见度是零,看你往哪里去。那么,你将采取什么措施来达到这个湖呢?
最好的方法是检查你附近的地面,观察土地的下降趋势。这将给你的第一步的方向提供一个思路。如果你沿着这条下降的路线走,很有可能你会到达那个湖。
要以图形的方式表示,请注意下面的图。
现在让我们用数学术语来描绘这个场景。
假设我们想找出最好的参数(1)和(2)学习算法。与上面的类比类似,当我们绘制“成本空间”时,我们会发现类似的山脉和山谷。成本空间是我们的算法在为参数选择特定值时的表现。
在y轴上,我们有成本J()分别在x轴和z轴上的参数1和2。在这里,山丘是由红色区域代表的,它们的成本很高,而山谷则由蓝色区域代表,而蓝色区域的成本较低。
现在有很多类型的梯度下降算法。它们可以通过两种方法进行分类:
让我们来看看最常用的梯度下降算法及其实现。
这是一种最简单的梯度下降法。在这里,香草( Vanilla Gradient Descent)的意思是纯的,没有任何掺假。它的主要特点是,通过对成本函数的梯度,我们在最小值的方向上采取小的步骤。
让我们看看它的伪代码。
update = learning_rate * gradient_of_parameters
parameters = parameters - update
在这里,我们看到参数的梯度对参数进行了更新。把它乘以一个学习速率,它本质上是一个常数表示我们想要达到最小值的速度。学习速率是一个超参数,在选择它的值时应该小心对待。