首先剪枝(pruning)的目的是为了避免决策树模型的过拟合。因为决策树算法在学习的过程中为了尽可能的正确的分类训练样本,不停地对结点进行划分,因此这会导致整棵树的分支过多,也就导致了过拟合。分支过多在分类时考虑数据的信息就更为丰富(每次分支都会考虑一种特征信息),这就导致了能拟合住噪声信息。所以,我们要尽可能生成一个较矮的决策树。让树长不高,那就需要剪枝。
决策树的剪枝策略最基本的有两种:预剪枝(pre-pruning)和后剪枝(post-pruning):
预剪枝(pre-pruning):在构建决策树过程时,提前停止。预剪枝就是在构造决策树的过程中,先对每个结点在划分前进行估计,若果当前结点的划分不能带来决策树模型泛华性能的提升,则不对当前结点进行划分并且将当前结点标记为叶结点。后剪枝(post-pruning):决策树构建完毕后,然后开始剪枝。先把整颗决策树构造完毕,然后自底向上的对非叶结点进行考察,若将该结点对应的子树换为叶结点能够带来泛华性能的提升,则把该子树替换为叶结点。
通过剪枝操作,可以降低树的高度,降低过拟合的风险。如果树非常高,叶子节点可能就比较多,叶子节点过多对模型的泛化能力是有影响的,举个极端的例子,叶子的个数等于样本的个数,每个叶子节点可以划分到 1 个样本,这样叶子节点非常纯,但是也失去分类的意义。所以树矮,叶子节点少才是我们追求的目标。
衡量决策树算法的效果
衡量决策树算法的效果常常使用评价函数:
我们希望此评价函数越小越好。其中 t 为叶子节点, 计算所有叶子节点的
, 然后求和。其中
为当前叶子计算出来的熵值或者基尼系数的值, 而
是代表有几个样本归到当前叶子节点中, 作为权重。我们希望每个叶子节点划分到的样本类别是非常"纯"的,不混乱的, 这样才代表分类效果好, 分类效果稳定。所以, 越纯
越小,
越小, 故使评价函数尽可能小是我们的目标。
上面也是一个评价函数,该评价函数多了另一项
,其中
代表叶子节点的个数。意思很容易明白,叶子节点个数越多,损失越大。我们目的是使得
越来越小,
代表叶子个数对评价结果的影响程度。
随机森林
森林:刚刚提到的是如何构建一棵树,而很多树组合在一起便是一个森林。构建出了很多决策树,综合这些决