从decision tree到bagging、boost

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

一、决策树模型
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,伯努利分布的方差为 n p ( 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,主要是针对样本进行(又放回)抽样。每次从总样本 S 中又放回的抽出数据集 S (二者包含的样本树相等),分别训练决策树模型,把诸多的决策树的output取average或majority vote作为最后的预测。
bagging主要应用于bias较低而variance较高的模型,而线性模型一般variance较低,所以加bagging往往收效甚微。

2.random forest

三、boost
1.boost方法
boost展示了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和boost
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

猜你喜欢

转载自blog.csdn.net/u010859324/article/details/81208168