从decision tree到bagging、boosting

本文主要讲解决策树模型,以及基于决策树模型的bagging、boosting模型。

一、决策树模型

  1. 决策树模型概览
    下面是一个决策树的例子
    这里写图片描述

决策树可以看作是对多维空间的划分,
这里写图片描述
上面的二维空间中,横线条代表以x作为划分的feature,而竖线条代表以y作为划分的feature。
结合上图,决策树的空间划分有两个特点,
1)给定数据集,可能的空间划分可能会有相当多种,甚至是难以穷举的。
2)所有的线条都是直线(平行于座标轴),没有斜线。

虽然决策树的空间划分图中所有的线条都是“直线“,没有“斜线“,但是决策树模型却是一个典型的non-linear model。
这里写图片描述
虽然决策树中的每一条空间划分都是直线,但是这些大量的直线组合起来,就起到了非线性的功能。如上图中的最右子图,可以认为是一条竖线和一条水平行组合成的折线,对样本进行了正确的分类。
从本质上讲,机器学习就是找到边界线(直线或曲线),对数据进行正确的区分。如果边界线是直线,则对应的模型是线性模型,而如果边界是曲线,则对应的模型是非线性模型。
这里写图片描述

对于上图中的分类任务,直线边界可以对样本进行正确的分类,决策树模型也可以用由若干个直线组合成的折线对样本进行正确的分类。

这里写图片描述
上图的例子,决策树模型通过复杂的折线可以实现样本的正确分类。
虽然上例中的折线过于复杂,而实际上一条简单的直线就能搞定,看似决策树模型是杀鸡用牛刀,但那是因为上例中的数据过于特殊,实际中可没有这样的好事,一条直线就能把样本完美分类。

2.决策树模型的训练
从最简单的决策树模型开始,逐步深入讨论决策树模型的节点分裂过程。
最简单的决策树,那就是一个只有root的树,输出只有一个类别,或只有一个值。
这里写图片描述
如果有两个层级的决策树呢?譬如由一个root和两个children组成的决策树,把所有样本分成两个集合,预测值有两个。

我们怎么衡量决策树对样本分类效果的好坏?那就是看叶子结点的不纯度(impurity)。好的分类就是叶子结点的不纯度较低。如果纯度是50%,那该叶子结点就毫无分类作用(近乎瞎猜)。
这里写图片描述
上图中的例子中,右图的分类导致总的不纯度没有降低,所以这样的分类没有意义。
这里写图片描述
上图中的分类还是没能降低不纯度。
而下图中的分类则实现了样本的完美分类
这里写图片描述

这里写图片描述

0/1 loss存在一些问题,比如容易想到的一个问题是,0/1 loss在计算每个叶子结点的loss的时候没有考虑该叶子结点的样本总数,所以对于0/1 loss来说,100个样本分错1个和10个样本分错一个的loss是一样的。
这里写图片描述
0/1 Loss 是离散的,对于训练也是不利的。

那该用什么样的loss来代替0/1 loss呢?
先用伯努利方差来作为loss,伯努利分布的方差为np(1p)np(1-p)
这里写图片描述

其他的loss
这里写图片描述

决策树中最常见的loss是entropy loss,这个已经比较熟悉了。
决策树的生长什么时候停止呢?理论上,决策树可以一直生长下去,直到train error为0,但是这样的决策树可能会过拟合,
这里写图片描述
为了避免过拟合,加正则!
决策树有哪些正则项方法呢?常用的正则项包括
1)max_depth,即树的最大深度;
2)min_samples_split,即节点进行进一步分裂的最小样本数(如果一个节点的样本树小于这个值,则不进行进一步的分裂);
3)min_samples_leaf,即叶子结点所包含的最小样本数,如果一个节点分裂后的子节点包含的样本数小于该值,则不进行分裂;
4)min_impurity_decrease,即不纯度下降的最小值,如果对该节点分裂后不纯度的减小值大于该值,则对该节点进行分裂;
5)min_impurity_split,即分裂的不纯度最小值,如果该节点的不纯度大于该值,则对该节点进行分裂。

二、bagging
1.bagging方法
模型的error由bias和variance组成
这里写图片描述
决策树是low bias、high variance的模型,除非你做很严格的regularization,但如果是做了过于严格的regularization(比如决策树退化为一个stump),效果可能还不如一个linear model。
决策树是一种高度非线性化的模型,容易overfitting,决策树模型的另一个特点是不同的训练数据可能会长出很不同的决策树。
如何降低决策树的variance呢?bagging就派上了用场。
所谓bagging,就是Bootstrap Aggregation的简写,这里的bootstrap,主要是针对样本进行(又放回)抽样。每次从总样本SS中又放回的抽出数据集SS^{'}(二者包含的样本树相等),分别训练决策树模型,把诸多的决策树的output取average或majority vote作为最后的预测。
bagging主要应用于bias较低而variance较高的模型,而线性模型一般variance较低,所以加bagging往往收效甚微。

2.random forest

3.extremely randomized trees
ET或Extra-Trees(Extremely randomized trees,极端随机树)是由PierreGeurts等人于2006年提出。该算法与随机森林算法十分相似,都是由许多决策树构成。但该算法与随机森林有两点主要的区别:
1)随机森林应用的是Bagging模型,而ET是使用所有的训练样本得到每棵决策树,也就是每棵决策树应用的是相同的全部训练样本;
2)随机森林是在一个随机子集内得到最佳分叉属性,而ET是完全随机的得到分叉值,从而实现对决策树进行分叉的。
对于第2点的不同,我们再做详细的介绍。我们仅以二叉树为例,当特征属性是类别的形式时,随机选择具有某些类别的样本为左分支,而把具有其他类别的样本作为右分支;当特征属性是数值的形式时,随机选择一个处于该特征属性的最大值和最小值之间的任意数,当样本的该特征属性值大于该值时,作为左分支,当小于该值时,作为右分支。这样就实现了在该特征属性下把样本随机分配到两个分支上的目的。然后计算此时的分叉值(如果特征属性是类别的形式,可以应用基尼指数;如果特征属性是数值的形式,可以应用均方误差)。遍历节点内的所有特征属性,按上述方法得到所有特征属性的分叉值,我们选择分叉值最大的那种形式实现对该节点的分叉。从上面的介绍可以看出,这种方法比随机森林的随机性更强。
对于某棵决策树,由于它的最佳分叉属性是随机选择的,因此用它的预测结果往往是不准确的,但多棵决策树组合在一起,就可以达到很好的预测效果。
当ET构建好了以后,我们也可以应用全部的训练样本来得到该ET的预测误差。这是因为尽管构建决策树和预测应用的是同一个训练样本集,但由于最佳分叉属性是随机选择的,所以我们仍然会得到完全不同的预测结果,用该预测结果就可以与样本的真实响应值比较,从而得到预测误差。如果与随机森林相类比的话,在ET中,全部训练样本都是OOB样本,所以计算ET的预测误差,也就是计算这个OOB误差。

4.totally randomized trees
在每一颗树内部的分裂节点山,都是随机选取一个特征及分裂点进行分裂。所以该种方法就不去寻找最优分裂点,是一种无监督的方法(而如果要寻找最优分裂点,则必须参考样本的标签,也就是有监督方法)。
该方法常用来做embedding,也就是把每个样本无监督地映射到高维空间中,参考sklearn中的RandomTreesEmbedding函数
三、boosting
1.boosting方法
boosting展示了weak classifiers的强大力量。
shallow decision tree,很浅的决策树,即只有少量的node的决策树,拥有高bias低variance,对于这样的决策树,不同的训练集得到的树很相似,error偏大,模型的效果可能只是略好于random guessing。这样的决策树的典型例子就是decision stump,即只分裂一次的树。
shallow decision tree在不同的训练集上学到的树很相似,例如下图
这里写图片描述
把shallow decision tree推而广之,它属于weak classifier的一种,所谓weak classifier就是准确率略高于0.5的分类器。

四、对比bagging和boosting
1.Bagging doesn’t work so well with stable models. Boosting might still help.

2.Boosting might hurt performance on noisy datasets. Bagging doesn’t have this problem

3.In practice bagging almost always helps.

4.On average, boosting helps more than bagging, but it is also more common for boosting to hurt performance.

5.The weights grow exponentially.

6.Bagging is easier to parallelize.

参考资料:
https://www.quora.com/What-are-the-differences-between-Random-Forest-and-Gradient-Tree-Boosting-algorithms

https://blog.csdn.net/zhaocj/article/details/51648966

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章