决策树
Posted articlem2h
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了决策树相关的知识,希望对你有一定的参考价值。
一、信息论基础
(1)熵
信息熵即信息的期望值,熵是用来度量随机变量的不确定性。数学公式表达如下:
其中负号是用来保证信息量是正数或者零。H(X)就被称为随机变量x的熵,它是对所有可能发生的事件产生的信息量的期望。从公式可以得出结论:随机变量的取值个数越多,状态数也就越多,信息熵就越大,不确定性就越大。
如上图所示,当p=0或1时,H=0,随机变量完全没有不确定性;当p=0.5时H=1,熵值最大,随机变量的不确定性最大。
(2)联合熵
所谓联合熵就是度量一个联合分布的随机变量的不确定性,其物理意义是:观察一个多个随机变量的随机系统所获得的信息量。数学表达式为:
(3)条件熵
条件熵H(Y|X)表示在一直随机变量X的条件下,随机变量Y的不确定性。它被定义为X给定条件下Y的条件概率分布的熵对X的数学期望,具体用公式表达如下:
条件熵相当于联合熵减去信息熵,即:H(Y|X) = H(X,Y) - H(X)。证明如下:
注意:熵只依赖于随机变量的分布,与随机变量取值无关;0log0 = 0
(4)信息增益
信息增益在决策树算法中是用来选择特征的指标,信息增益越大,则这个特征的选择性越好,在概率中定义为:待分类的集合的熵和选定某个特征的条件熵之差(这里只的是经验熵或经验条件熵,由于真正的熵并不知道,是根据样本计算出来的),公式如下:
g(D,A) = H(D) - H(D|A)
根据公式我们可知信息增益是信息熵与条件熵之差
(5)信息增益比
特征选择时用信息增益进行选择的一个大问题就是偏向选择特征值比较多的属性从而导致过拟合,而信息增益比可以有效校正这一问题,信息增益比的本质是对信息增益乘以一个加权系数,当加权系数较小时,表示抑制该特征。公式表示如下:
其中的HA(D)表达式如下:
,n表示的是特征A的取值个数。
参考:http://www.cnblogs.com/kyrieng/p/8694705.html
二、决策树的不同分类算法
决策树是一种基本的分类和回归方法。其主要优点是模型可读性强,分类速度快。决策树的内部结点表示一个特征或者属性,叶子结点表示一个分类,有向边则代表了一个划分规则,它的路径是互斥并且是完备的。决策树学习主要包括3个步骤:特征选择(选取对训练数据具有分类能力的特征)、决策树的生成、决策树的修剪。决策树学习常用的算法有ID3、C4.5、CART。
(一)原理
(1)基本概念
决策树模型可以认为是if-then
规则的集合,也可以认为是定义在特征空间与类空间上的条件概率分布。决策树将特征空间划分为互不相交的单元,在每个单元定义一个类的概率分布,这就构成了一个条件概率分布。
决策树的学习目标是:根据给定的训练数据集构造一个决策树模型,使得它能够对样本进行正确的分类。
决策树最优化的策略是:损失函数最小化。决策树的损失函数通常是正则化的极大似然函数。
选择最优决策树的问题是个 NP
完全问题。一般采用启发式方法近似求解这个最优化问题,这时的解为次最优的。
决策树学习的算法通常递归地选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个最好的分类。
(2)决策树的生成
构建根结点:将所有训练数据放在根结点。
选择一个最优特征:根据这个特征将训练数据分割成子集,使得各个子集有一个在当前条件下最好的分类(若这些子集已能够被基本正确分类,则将该子集构成叶结点;若某个子集不能够被基本正确分类,则对该子集选择新的最优的特征,继续对该子集进行分割,构建相应的结点。)
如此递归下去,直至所有训练数据子集都被基本正确分类,或者没有合适的特征为止。
上面的生成过程容易发生过拟合问题,决策树解决过拟合的方法通常是对树进行剪枝,从而使得决策树具有更好的泛化能力。决策树的生成对应着模型的局部最优,剪枝则考虑了全局最优。
(二)特征选择
特征选择在决策树模型构建中起着至关重要的作用,常用的特征选择指标有:信息增益和信息增益比。这两个指标刻画了特征的分类能力。前面介绍信息论基础已经对这两个指标进行了详细介绍,这里就不再赘述了。
(三)生成算法
决策树常用的生成算法有两种:ID3和C4.5,下面对这两个算法进行详细介绍。
(1)ID3
ID3算法的核心是决策树的每个结点上都应用信息增益准则进行特征选择,递归地构建决策树。从根结点开始,计算结点所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征划分出子结点。再对子结点递归地调用以上方法,构建决策树。直到所有特征的信息增益均很小或者没有特征可以选择为止,最后得到一个决策树 。如果不设置特征信息增益的下限,则可能会使得每个叶子都只有一个样本点,从而划分得太细。
具体的算法步骤如下:
ID3算法的不足:ID3没有考虑连续特征,比如长度,密度都是连续值,无法在ID3运用。这大大限制了ID3的用途;
ID3采用信息增益大的特征优先建立决策树的节点。很快就被人发现,在相同条件下,取值比较多的特征比取值少的特征信息增益大。比如一个变量有2个值,各为1/2,另一个变量为3个值,各为1/3,其实他们都是完全不确定的变量,但是取3个值的比取2个值的信息增益大;
ID3算法对于缺失值的情况没有做考虑;
没有考虑过拟合的问题。
(2)C4.5
C4.5是对ID3算法的改进,解决了ID3算法的不足。其生成算法与ID3 算法相似,但是C4.5算法在生成过程中用信息增益比来选择特征。主要对ID3算法问题的改进方式如下:
对于第一个子问题,对于某一个有缺失特征值的特征A。C4.5的思路是将数据分成两部分,对每个样本设置一个权重(初始可以都为1),然后划分数据,一部分是有特征值A的数据D1,另一部分是没有特征A的数据D2. 然后对于没有缺失特征A的数据集D1来和对应的A特征的各个特征值一起计算加权重后的信息增益比,最后乘上一个系数,这个系数是无特征A缺失的样本加权后所占加权总样本的比例。
对于第二个子问题,可以将缺失特征的样本同时划分入所有的子节点,不过将该样本的权重按各个子节点样本的数量比例来分配。比如缺失特征A的样本a之前权重为1,特征A有3个特征值A1,A2,A3。 3个特征值对应的无缺失A特征的样本个数为2,3,4.则a同时划分入A1,A2,A3。对应权重调节为2/9,3/9, 4/9。
对于第三个缺失值处理的问题,主要需要解决的是两个问题,一是在样本某些特征缺失的情况下选择划分的属性,二是选定了划分属性,对于在该属性上缺失特征的样本的处理。
对于第四个问题,C4.5引入了正则化系数进行初步的剪枝。具体方法这里不讨论。下篇讲CART的时候会详细讨论剪枝的思路。
虽然C4.5改进了ID3算法,但是其本身也存在问题:
由于决策树算法非常容易过拟合,因此对于生成的决策树必须要进行剪枝。剪枝的算法有非常多,C4.5的剪枝方法有优化的空间。
C4.5只能用于分类,如果能将决策树用于回归的话可以扩大它的使用范围。
C4.5由于使用了熵模型,里面有大量的耗时的对数运算,如果是连续值还有大量的排序运算。
C4.5生成的是多叉树,即一个父节点可以有多个节点。很多时候,在计算机中二叉树模型会比多叉树运算效率高。如果采用二叉树,可以提高效率。
为了解决C4.5和ID3存在的问题,一种新的决策树分类算法便产生了,这就是CART分类树算法。
(3)CART分类树算法
CART分类树算法使用基尼系数来代替信息增益比,基尼系数代表了模型的不纯度,基尼系数越小,则不纯度越低,特征越好。这和信息增益(比)是相反的。
具体的,在分类问题中,假设有K个类别,第k个类别的概率为pkpk, 则基尼系数的表达式为:
对于个给定的样本D,假设有K个类别, 第k个类别的数量为Ck,则样本D的基尼系数表达式为:
特别的,对于样本D,如果根据特征A的某个值a,把D分成D1和D2两部分,则在特征A的条件下,D的基尼系数表达式为:
对于CART分类树连续值的处理问题,其思想和C4.5是相同的,都是将连续的特征离散化。唯一的区别在于在选择划分点时的度量方式不同,C4.5使用的是信息增益比,则CART分类树使用的是基尼系数。
CART分类树算法的具体步骤如下:
下面对以上三种分类树进行总结:
来源:https://www.cnblogs.com/pinard/p/6053344.html
三、回归树算法原理
回归树的算法原理这里就放上李航统计学习方法上面的截图进行说明。
实际上,回归树总体流程类似于分类树,分枝时穷举每一个特征的每一个阈值,来寻找最优切分特征j和最优切分点s,衡量的方法是平方误差最小化。分枝直到达到预设的终止条件(如叶子个数上限)就停止。
处理具体问题时,单一的回归树肯定是不够用的。可以利用集成学习中的boosting框架,对回归树进行改良升级,得到的新模型就是提升树(Boosting Decision Tree),在进一步,可以得到梯度提升树(Gradient Boosting Decision Tree,GBDT),再进一步可以升级到XGBoost。
来源:https://blog.csdn.net/weixin_40604987/article/details/79296427
四、过拟合问题
决策树模型存在一个极大的问题就是容易过拟合,过拟合产生得原因是决策树太复杂,使得模型在测试数据集上能很好的进行分类,但是验证集上分类效果很差。那么应该如何防止过拟合呢?李航统计学习方法上面提及了两种方式:先剪枝和后剪枝。
剪枝原理如下:
剪枝算法如下:
五、sklearn参数
1、特征选择标准(criterion):分类决策树可以使用"gini"或者"entropy",前者代表基尼系数,后者代表信息增益。一般说使用默认的基尼系数"gini"就可以了,即CART算法。除非你更喜欢类似ID3, C4.5的最优特征选择方法。 回归决策树可以使用"mse"或者"mae",前者是均方差,后者是和均值之差的绝对值之和。推荐使用默认的"mse"。一般来说"mse"比"mae"更加精确。除非你想比较二个参数的效果的不同之处。
2、特征划分点选择标准(splitter):可以使用"best"或者"random"。前者在特征的所有划分点中找出最优的划分点。后者是随机的在部分划分点中找局部最优的划分点。默认的"best"适合样本量不大的时候,而如果样本数据量非常大,此时决策树构建推荐"random"
3、划分时考虑的最大特征数(max_features):可以使用很多种类型的值,默认是"None",意味着划分时考虑所有的特征数;如果是"log2"意味着划分时最多考虑log2N个特征;如果是"sqrt"或者"auto"意味着划分时最多考虑√N个特征。如果是整数,代表考虑的特征绝对数。如果是浮点数,代表考虑特征百分比,即考虑(百分比xN)取整后的特征数。其中N为样本总特征数。一般来说,如果样本特征数不多,比如小于50,我们用默认的"None"就可以了,如果特征数非常多,我们可以灵活使用刚才描述的其他取值来控制划分时考虑的最大特征数,以控制决策树的生成时间。
4、决策树最大深度(max_depth): 决策树的最大深度,默认可以不输入,如果不输入的话,决策树在建立子树的时候不会限制子树的深度。一般来说,数据少或者特征少的时候可以不管这个值。如果模型样本量多,特征也多的情况下,推荐限制这个最大深度,具体的取值取决于数据的分布。常用的可以取值10-100之间。
5、内部节点再划分所需最小样本数(min_samples_aplit):这个值限制了子树继续划分的条件,如果某节点的样本数少于min_samples_split,则不会继续再尝试选择最优特征来进行划分。 默认是2.如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。我之前的一个项目例子,有大概10万样本,建立决策树时,我选择了min_samples_split=10。
6、叶子节点最少样本数(min_samples_leaf):这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。 默认是1,可以输入最少的样本数的整数,或者最少样本数占样本总数的百分比。如果样本量不大,不需要管这个值。如果样本量数量级非常大,则推荐增大这个值。之前的10万样本项目使用min_samples_leaf的值为5。
7、叶子节点最小的样本权重和(min_weight_fraction_leaf):这个值限制了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝。 默认是0,就是不考虑权重问题。一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这时我们就要注意这个值了。
8、最大叶子节点数(max_leaf_nodes):通过限制最大叶子节点数,可以防止过拟合,默认是"None”,即不限制最大的叶子节点数。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征分成多的话,可以加以限制,具体的值可以通过交叉验证得到。
9、节点划分最小不纯度(min_impurity_split):这个值限制了决策树的增长,如果某节点的不纯度(基尼系数,信息增益,均方差,绝对差)小于这个阈值,则该节点不再生成子节点。即为叶子节点 。
10、类别权重(class_weight):定样本各类别的的权重,主要是为了防止训练集某些类别的样本过多,导致训练的决策树过于偏向这些类别。这里可以自己指定各个样本的权重,或者用“balanced”,如果使用“balanced”,则算法会自己计算权重,样本量少的类别所对应的样本权重会高。当然,如果你的样本类别分布没有明显的偏倚,则可以不管这个参数,选择默认的"None",主要是分类决策树使用这个参数,回归树不适用。
来源:https://www.cnblogs.com/pinard/p/6056319.html
以上是关于决策树的主要内容,如果未能解决你的问题,请参考以下文章
sklearn决策树算法DecisionTreeClassifier(API)的使用以及决策树代码实例 - 莺尾花分类