决策树笔记
参考西瓜书及刘建平博客,仅此做简单笔记,帮助理解python操作。
决策树是一种常见的额机器学习方法。其中,CART算法可用于分类与回归问题。一般,一棵决策树包含一个根节点、若干个内部节点和若干个叶节点。根节点和内部节点都是对一个属性进行划分,而叶节点对应的是决策的结果。从根节点到每个叶节点的路径对应了一个判定测试序列。决策树学习的目的是为了产生一棵泛化能力强,即处理未见示例能力强的决策树。
决策树的关键是选择最优划分属性,随着划分的进行,让分支节点所包含的样本尽可能属于同一类别,即结点的纯度越来越高。
Generally,我们常见ID3、C4.5、CART三种算法来选择最优属性。
sklearn中直接用CART来进行,因为该算法在多种算法中较优,所以可直接用该模块中的方法生成决策树。
一.决策树的生成
1.ID3算法
在介绍ID3、C4.5前,我们先引入几个基本概念。
信息熵(information entropy):H(X)度量样本集合的纯度指标。熵越大,事物的不确定性越大。
条件熵:表示在已知Y的情况下,X剩下的不确定性,用H(X|Y)表示。
而信息增益:用H(X)-H(X|Y)表示,表达的是在知道Y的情况下,X的信息熵减少程度。(可借用条件概率来理解)
ID3就是用信息增益来选择最优划分属性,信息增益最大的属性,将作为划分属性。示例见西瓜书P75-77。
缺点:
1.仅针对类别属性,不能应用于连续型属性。
2.对于分类较多的属性,计算得出的信息增益通常较大,使得最优划分属性偏向于这类属性。(西瓜书P78,展示“编号”这一属性因分类较多,计算得出的信息增益最大,而作为最优划分属性。虽然用编号来划分样本,每个分支节点的纯度已达到最大,但是,obviously,这样的决策树压根不具有划分泛华能力。此时,用信息增益来选择最优属性无效。)
3.对缺失值的情况没有做考虑
4.没有考虑过拟合问题
2.C4.5算法
因为ID3的bug,C4.5算法采用二分法来处理连续型属性、对缺失值有了一定的处理方法,并用信息增益率和信息增益来选择最优属性。
信息增益率会偏向选择可取数目较少的属性,所以C4.5结合信息增益与信息增益率来选择最优划分属性。具体:从候选的划分属性中,挑选信息增益高于平均水平的属性,再从中选择信息增益率最高的划分属性。
3.CART算法
引入基尼值来度量数据集的纯度。Gini(D)越小,数据集D的纯度越高。
使用基尼指数来选择划分属性,基尼指数最小的属性将作为最优划分属性。
Python中sklearn中直接用CART。
CART中用二叉树,上面两种算法用的都是多叉树。每个划分属性出现次数可能大于1。
缺点:
(1)上述三种算法,都是选择最优划分属性来做分类决策(仅一个),但是大多数分类决策应该由一组特征决定,这样得到的决策树更加精准。由此,产生了多变量决策树,通过构造特征的一个线性组合,然后选择最优组合来做决策(代表算法OC1)。
(2)如果样本数据稍有改动,就会导致树结构的剧烈改变。解决办法是用升级版的:集成方法里的随机森林 。
分类树和回归树的最大区别在于:
1.对连续属性的处理方式不一样。
2.决策树建立后,做预测的方式不一样。
说明:
(1)分类树用基尼指数来衡量连续属性的各个划分点的好坏,选择基尼指数小的作为连续属性的最优划分点;而回归树采用了和方差指标来选定划分点。首先,对连续属性a,找到任意划分点b,将样本集D划分为D1和D2,使用基尼指数来选择划分属性。求出使D1和D2各自集合的均方差最小,同时D1和D2的均方差之和最小所对应的特征和特征值划分点。
(2)做预测时,分类树采用叶子节点里概率最大的类别作为当前节点的预测类别。回归树采用的是叶节点的均值or中位数来预测输出结果。
二.剪枝处理
决策树生成很可能造成过拟合现象,即将训练数据学得太好了,但是对新数据的预测能力却不那么好。那么,我们可以通过剪掉一些子树(分支)来降低过拟合的风险。
1.预剪枝
定义:在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化能力提升,则停止划分,并将当前结点标记为叶节点。
优点:因为预剪枝的动作,使得决策树未能完全展开。使得:
1.降低过拟合风险
2.显著减少决策树的训练时间开销和测试时间开销
缺点:
1.有些分支当前的划分可能不太理想(不能提升泛化能力,或者暂时导致泛化能力有所下降),但是可能后续的划分有显著的性能提升。
2.预剪枝基于贪心原则剪枝,可能带来欠拟合。
2.后剪枝
定义:At first,由训练集数据生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若该节点对应的子树替换为叶结点能提升决策树的泛化能力,则将子树替换为叶结点。
优点:
1.欠拟合的风险很小
2.泛化性能往往优于预剪枝
缺点:
1.训练时间开销较大。因为后剪枝是在完整的决策树生成后进行的,而且自底向上对树中的所有非叶结点逐个进行考察。
Skearn采用CART算法,而CART采用后剪枝法,其先生成决策树,然后产生所有可能的剪枝后的CART树,接着使用交叉验证来检验各种剪枝效果,最后选择泛化能力最好的剪枝策略。
度量损失标准:
分类树:基尼系数
回归树:均方差