13.Python决策树

104 阅读5分钟

优点:

应用到了y,可很好解决噪声问题。分类和预测表现更好

分为:

分类树和回归树

基本原理

分类树:叶节点将类别占比最大的类比作为该叶节点的预测值
回归树:节点内所有响应变量实际值的平均值作为该叶节点的预测值

本质:

 依次选取最为合适的向量特征,按向量特征的具体取值,不断对特征空间矩形分割。因为每次切割都是直线,所以决策边界为矩形。
决策树是自下而上的贪心算法,每次选取一个变量按临界值切割,该变量及其临界值都是当前步骤下,能够实现局部最优的分割变量和分割临界值。并未从全盘考虑整体最优
决策树不用对特征变量标准化,准确率高,不用了解业务知识。简单高效。所以成了和朴素贝叶斯并驾齐驱的两大机器学习算法。

特征变量选择与临界值确定

 决策树生长的过程,就是按某一特征变量对响应变量分类,将样本示例全集不断按照响应变量分类进行分割的过程。那么应该按照什么的样的规则进行分割,或者说按照什么样的规则使树生长,才能取得最好的分类效果?一言以蔽之,就是要使得分裂生长后同一样本子集内的相似性程度(或称“纯度”)越高越好,或者说样本示例全集的“不纯度”通过切割样本的方式下降越多越好。这在本质上就是特征变量选择及其临界值确定的问题,常用的方法包括信息增益(Information gain)、增益比率(gain ratio)、基尼指数(Gini index),对应于ID3、C4.5CART三种决策树算法。下面,我们逐一介绍下这几种方法。

信息熵

image.png

信息增益(Information gain)

image.png

image.png

增益比率(gain ratio)

image.png

基尼指数(Gini index)

image.png

image.png

决策树的剪枝

在决策树的生长过程中,如果我们不加限制,那么决策树就会尽情生长下去,造成决策树分支过多。最为极端的情形就是生长到最后每个样本示例都成为一个节点,那么可以预见的就是势必造模型产生过拟合线性,泛化能力不足。所以为达到应有的泛化能力或预测效果,我们有必要对决策树进行“剪枝(pruning)”处理,使其达到一定程度后能够停止生长。

剪枝有分预剪枝(prepruning)和后剪枝(post-pruning)两种。预剪枝的基本思路是“边构造边剪枝”,在树的生长过程中设定一个指标,如果达到该指标,或者说当前节点的划分不能带来决策树泛化性能的提升,决策树就会停止生长并将当前节点标记为叶节点。

后剪枝的基本思路是“构造完再剪枝”,首先让决策树尽情生长,从训练集中生成一棵完整的决策树,一直到叶节点都有最小的不纯度值,然后自底向上遍历所有非叶节点,若将该节点对应的子树直接替换成叶节点能带来决策树泛化能力的提升,则将该子树替换成叶节点,达到剪枝的效果。 在两张剪枝方法的选择方面,预剪枝存在一定局限性,因为在树的生长过程中,很多时候虽然当前的划分会导致测试集准确率降低,但如果能够继续生长,在之后的划分中,准确率可能会有显著上升;而一旦停止分支,使得节点N成为叶节点,就断绝了其后继节点进行“好”的分支操作的任何可能性,所以预剪枝容易造成欠拟合。

后剪枝则较好的克服了这一局限性,而且可以充分利用全部训练集的信息而无需保留部分样本用于交叉验证,所以优势较为明显。但是后剪枝是在构建完全决策树之后进行的,并且要自底向上自底向上遍历所有非叶节点,所以其计算时间、计算量要远超预剪枝方法,尤其是针对大样本数据集的时候。实务中,针对小样本数据集,后剪枝方法是首选;针对大样本数据集,用户需要权衡预测效果和计算量。

包含剪枝决策树的损失函数

image.png

image.png

变量重要性

决策树算法是一种典型的非参数算法,这也意味着在其模型中不包含类似于回归系数之类的参数存在,难以直接评价特征变量对于响应变量的影响程度。实务中,用户常遇到的一个问题就是,在决策树模型中采纳的诸多特征变量之间,重要性排序是怎样的?

一个非常明确但又容易被误解的事实就是,并非先采用的特征变量就必然是贡献最大的,而是应该通过计算因采纳该变量引起的残差平方和(或信息增益、信息增益率、基尼指数等指标)变化的幅度来进行排序,残差平方和下降或基尼指数下降越多、信息增益或信息增益率提升越多,说明变量在决策树模型中越为重要。