决策树(Decision Tree)

一. 概述

决策树是一种非参数有监督的机器学习方法,可以用于解决回归问题和分类问题。通过学习已有的数据,计算得出一系列推断规则来预测目标变量的值,并用类似流程图的形式进行展示。决策树模型可以进行可视化,具有很强的可解释性,算法容易理解,以决策树为基础的各种集成算法在很多领域都有广泛的应用。

二. 一些需要注意的概念

1.信息和信息熵

(1)熵的概念

熵的概念最早起源于物理学,用于度量一个热力学系统的无序程度。在信息论里面,信息熵代表着一个事件或一个变量等所含有的信息量。 在信息世界,熵越高,则能传输越多的信息,熵越低,则意味着传输的信息越少。

(2)信息的计算

事件的信息

发生概率低的事件比发生概率高的事件具有更大的不确定性,需要更多的信息去描述他们,信息熵更高。

我们可以用计算事件发生的概率来计算事件的信息,又称“香农信息”(Shannon Information)。一个离散事件x的信息可以表示为:
h(x) = -log(p(x))
p()代表事件x发生的概率,log()为以二为底的对数函数,即一个事件的信息量就是这个事件发生的概率的负对数。选择以二为底的对数函数代表计算信息的单位是二进制。因为概率p(x)小于1,所以负号就保证了信息熵永远不为负数。当事件的概率为1时,也就是当某事件百分之百发生时,信息为0。

随机变量的信息(信息熵)

熵(entropy),又称“香农熵”(Shannon entropy),表示一个随机变量的分布所需要的平均比特数。一个随机变量的信息熵可以表示为:
H(x) = -sum(each k in K p(k)log(p(k)))
K表示变量x所可能具有的所有状态(所有事件),将发生特定事件的概率和该事件的信息相乘,最后加和,即可得到该变量的信息熵。可以理解为,信息熵就是平均而言发生一个事件我们得到的信息量大小。所以数学上,信息熵其实是事件信息量的期望。

当组成该随机变量的一个事件的概率为1时信息熵最小,为0, 即该事件必然发生。当组成该随机变量的所有事件发生的概率相等时,信息熵最大,即完全不能判断那一个事件更容易发生,不确定性最大。

分布的信息(熵)

当一个事件主导时,比如偏态分布(Skewed Probability Distribution),不确定性减小,信息熵较低(low entropy);当所有事件发生概率相同时,比如均衡分布(Balanced Probability Distribution),不确定性极大,信息熵较高(high entropy)。

(3)信息熵的性质

由以上的香农信息公式可知,信息熵主要有三条性质:
-单调性。发生概率越高的事件,其所携带的信息熵越低。比如一个真理的不确定性是极低的,那么它所携带的信息熵就极低。
-非负性。信息熵不能为负。单纯从逻辑层面理解,如果得知了某个信息后,却增加了不确定性,这也是不合逻辑的。
-可加性。即多随机事件同时发生存在的总不确定性的量度是可以表示为各事件不确定性的量度的和。

(4)互信息(MI)

若两事件A和B同时发生,两个事件相互独立。 p(X=A,Y=B) = p(X = A)*p(Y=B), 那么信息熵为 H(A,B) = H(A) + H(B)。但若两事件不相互独立,那么H(A,B) = H(A) + H(B) - I(A,B)。其中I(A,B)是互信息(mutual information,MI),即一个随机变量包含另一个随机变量信息量的度量。即已知X的情况下,Y的分布是否会改变。

可以理解为,两个随机变量的互信息度量了两个变量间相互依赖的程度。X 和 Y的互信息可以表示为:
I(X;Y) = H(X) - H(X|Y)
H(X)是X的信息熵,H(X|Y)是已知Y的情况下,X的信息熵。结果的单位是比特。
简单来说,互信息的性质为:
-I(X;Y)>=0 互信息永远不可能为负
-H(X) - H(X|Y) = I(X;Y) = I (Y;X) = H(Y) - H(Y|X) 互信息是对称的
-当X,Y独立的时候,I(X;Y) = 0 互信息值越大,两变量相关性越强。
-当X,Y知道一个就能推断另一个的时候,I(X;Y) = H(Y) = H(X)

在数据科学中,互信息常用于特征筛选。在通信系统中互信息也应用广泛。在一个点到点的通信系统中,发送信号为X,通过信道后,接收端接收到的信号为Y,那么信息通过信道传递的信息量就是互信息I(X,Y)。根据这个概念,香农推导出信道容量(即临界通信传输速率的值)。

(5)信息增益(IG)

信息增益(Information Gain)是用来按照一定规则划分数据集后,衡量信息熵减少量的指数。

那数据集的信息熵又是怎么计算的呢?比如一个常见的0,1二分类问题,我们可以计算它的熵为:
Entropy = -(p(0) * log(P(0)) + p(1)\ * log(P(1)))
当该数据集为50/50的数据集时,它的信息熵是最大的(1bit)。而10/90的数据集将会大大减少结果的不确定性,减小数据集的信息熵(约为0.469bit)。

这样来说,信息熵可以用来表示数据集的纯度(purity)。信息熵为0就表示该数据集只含有一个类别,纯度最高。而较高的信息熵则代表较为平衡的数据集和较低的纯度。

信息增益是提供了一种可以使用信息熵计算数据集经过一定的规则(比如决策树中的一系列规则)进行数据集分割后信息熵的变化的方法。
IG(S,a) = H(S) - H(S|a)
其中,H(s) 是原数据集S的信息熵(在做任何改变之前),H(S|a)是经过变量a的一定分割规则。所以信息增益描述的是数据集S变换后所节省的比特数。

信息增益可以用做决策树的分枝判断方法。比如最常用CART树(Classification and Regression Tree)中的分枝方法,只要在python中设置参数criterion“entropy”即可。

信息增益也可以用作建模前的特征筛选。在这种场景下,信息增益和互信息表达的含义相同,会被用来计算两变量之间的独立性。比如scikit-learn 中的函数mutual_info_classiif()

(6)信息增益率

信息增益在面对类别较少的离散数据时效果较好,但是面对取值较多的特征时效果会有偏向性。因为当特征的取值较多时,根据此特征划分得到的子集纯度有更大的可能性会更高(对比与取值较少的特征),因此划分之后的熵更低,由于划分前的熵是一定的,因此信息增益更大,因此信息增益比较偏向取值较多的特征。举一个极端的例子来说,如果一个特征为身份证号,当把每一个身份证号不同的样本都分到不同的子节点时,熵会变为0,意味着信息增益最大,从而该特征会被算法选择。但这种分法显然没有任何实际意义。

这种时候,信息增益率就起到了很重要的作用。
gR(D,A)=g(D,A)/HA(D)
HA(D) 又叫做特征A的内部信息,HA(D)其实像是一个衡量以特征AA的不同取值将数据集D分类后的不确定性的度量。如果特征A的取值越多,那么不确定性通常会更大,那么HA(D)的值也会越大,而1/HA(D)的值也会越小。这相当于是在信息增益的基础上乘上了一个惩罚系数。即gR(D,A)=g(D,A)∗惩罚系数

2.基尼不纯度(Gini Impurity

在CART算法中,基尼不纯度表示一个随机选中的样本被分错类别的可能性,即这个样本被选中的概率乘以它被分错的概率。当一个节点中所有样本均为一种时(没有被分错的样本),基尼不纯度达到最低值0。

举例来说,如果有绿色和蓝色两类数据点,各占一半(蓝色50%,绿色50%)。那么我们随机分类,有以下四种情况:
-分为蓝色,但实际上是绿色(❌),概率25%
-分为蓝色,实际上也是蓝色(✔️),概率25%
-分为绿色,实际上也是绿色(✔️),概率25%
-分为绿色,但实际上是蓝色(❌),概率25%
那么将任意一个数据点分错的概率为25%+25% = 50%。基尼不纯度为0.5。

在特征选择中,我们可以选择加入后使数据不纯度减少最多的特征。

3.噪音数据(Noisy Data

噪音数据简单来说就是会对模型造成误导的数据。分为类别噪声(class noiselabel noise)和 变量噪声(attribute noise)。类别噪声指的的是被错误标记的错误数据,比如两个相同的样本具有不同的标签等情况。变量噪声指的是有问题的变量,比如缺失值、异常值和无关值等。

4.节点(node

决策树其实是一种图结构,由节点和边构成。
-根节点:只有出边没有入边。包含样本全集,表示一个对样本最初的判断。
-内部节点:一个入边多个出边。表示一个特征或是属性。每个内部节点都是一个判断条件,包含数据集中从根节点到该节点所有满足条件的数据的集合。
-叶节点:一个入边无出边。表示一个类,对应于决策结果。

决策树的节点.png

三. 决策树的生成

决策树的生成主要分为三个步骤:
1.节点的分裂:当一个节点不够纯(单一分类占比不够大或者说信息熵较大)时,则选择将这一节点进行分裂。
2.决策边界的确定:选择正确的决策边界(Decision Boundary),使分出的节点尽量纯,信息增益(熵减少的值)尽可能大。
3.重复及停止生长:重复1,2步骤,直到纯度为0或树达到最大深度。为避免过拟合,决策树算法一般需要制定树分裂的最大深度。到达这一深度后,即使熵不等于0,树也不会继续进行分裂。

下面以超级知名的鸢尾花数据集举例来说明。
这个数据集含有四个特征:花瓣的长度(petal length)、花瓣的宽度(petal width)、花萼的长度(sepal length)和花萼的宽度(sepal width)。预测目标是鸢尾花的种类iris setosa, iris versicoloriris virginica

鸢尾花的种类.png

建立决策树模型的目标是根据特征尽可能正确地将样本划分到三个不同的“阵营”中。

第一步:确定根节点

根结点的选择基于全部数据集,使用了贪婪算法:遍历所有的特征,选择可以使信息熵降到最低、基尼不纯度最低的特征。

根结点的选择.png

上左图表示以花瓣和花萼的宽度为横坐标和纵坐标的数据点的分布。其中,红点代表setosa,黄点代表versicolor,蓝点代表virginica
上右图是由python构造的决策树的根结点,其中:
-一共有68例样本('samples=68')
-'value=[23,20,25]'描述了68例样本中不同类型鸢尾花的分布-23例setosa,20例versicolor,25例virginica
-'class=virginica' 这是根据样本类型的分布作出的根结点的预测值。因为virginica最多,所以任意一个鸢尾花为virginica类型的可能性最大。

第二步:节点的分裂

node0.png

如上图,根节点的决策边界为'petal width = 0.8cm'。那么这个决策边界是怎么决定的呢?
-遍历所有可能的决策边界(需要注意的是,所有可能的决策边界代表的是该子集中该特征所有的值,不是以固定增幅遍历一个区间内的所有值!那样很没有必要的~)
-计算新建的两个子集的基尼不纯度。
-选择可以使新的子集达到最小基尼不纯度的分割阈值。这个“最小”可以指两个子集的基尼不纯度的和或平均值。

第三步:重复和停止生长

tree.png

重复以上过程,最终直到所有节点都达到'gini=0', 即基尼不纯度最低(如上图)该决策树就会停止生长。
(当然,可以看到这棵树中最后叶子节点中只有一个样本,有些过拟合了,可以通过设置决策树中的参数进行改变)

四.决策树的分类

1.ID3

ID3是最早提出的决策树算法。ID3算法的核心是在决策树各个节点上根据信息增益来选择进行划分的特征,然后递归地构建决策树。
-缺点
(1)没有剪枝
(2)只能用于处理离散特征
(3)采用信息增益作为选择最优划分特征的标准,然而信息增益会偏向那些取值较多的特征(例如,如果存在唯一标识属性身份证号,则ID3会选择它作为分裂属性,这样虽然使得划分充分纯净,但这种划分对分类几乎毫无用处。)

2.C4.5

优点:

C4.5 与ID3相似,但对ID3进行了改进:
-引入“悲观剪枝”策略进行后剪枝
-信息增益率作为划分标准
-将连续特征离散化,假设 n 个样本的连续特征 A 有 m 个取值,C4.5 将其排序并取相邻两样本值的平均数共 m-1 个划分点,分别计算以该划分点作为二元分类点时的信息增益,并选择信息增益最大的点作为该连续特征的二元离散分类点;
-可以处理缺失值

对于缺失值的处理可以分为两个子问题:
(1)在特征值缺失的情况下进行划分特征的选择?(即如何计算特征的信息增益率)
C4.5 中对于具有缺失值特征,用没有缺失的样本子集所占比重来折算;
(2)选定该划分特征,对于缺失该特征值的样本如何处理?(即到底把这个样本划分到哪个结点里)
C4.5 的做法是将样本同时划分到所有子节点,不过要调整样本的权重值,其实也就是以不同概率划分到不同节点中。

缺点:

(1)剪枝策略可以再优化;
(2)C4.5 用的是多叉树,用二叉树效率更高;
(3)C4.5 只能用于分类;
(4)C4.5 使用的熵模型拥有大量耗时的对数运算,连续值还有排序运算;
(5)C4.5 在构造树的过程中,对数值属性值需要按照其大小进行排序,从中选择一个分割点,所以只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时,程序无法运行。

3.CART

可以用于分类,也可以用于回归问题。CART 算法使用了基尼系数取代了信息熵模型,计算复杂度更低。

CART 包含的基本过程有分裂,剪枝和树选择
分裂:分裂过程是一个二叉递归划分过程,其输入和预测特征既可以是连续型的也可以是离散型的,CART 没有停止准则,会一直生长下去;
剪枝:采用“代价复杂度”剪枝,从最大树开始,每次选择训练数据熵对整体性能贡献最小的那个分裂节点作为下一个剪枝对象,直到只剩下根节点。CART 会产生一系列嵌套的剪枝树,需要从中选出一颗最优的决策树;
树选择:用单独的测试集评估每棵剪枝树的预测性能(也可以用交叉验证)。

优点:

(1)C4.5 为多叉树,运算速度慢,CART 为二叉树,运算速度快;
(2)C4.5 只能分类,CART 既可以分类也可以回归;
(3)CART 使用 Gini 系数作为变量的不纯度量,减少了大量的对数运算;
(4)CART 采用代理测试来估计缺失值,而 C4.5 以不同概率划分到不同节点中;
(5)CART 采用“基于代价复杂度剪枝”方法进行剪枝,而 C4.5 采用悲观剪枝方法。

五. 决策树的优缺点

优点:

(1)决策树易于理解和解释,可以可视化分析,容易提取出规则
(2)可以同时处理分类型和数值型数据
(3)可以处理缺失值
(4)运行速度比较快(使用Gini的快于使用信息熵,因为信息熵算法有log)

缺点:

(1)容易发生过拟合(集成算法如随机森林可以很大程度上减少过拟合)
(2)容易忽略数据集中属性的相互关联;
(3)对于那些各类别样本数量不一致的数据,在决策树中,进行属性划分时,不同的判定准则会带来不同的属性选择倾向。

写在后面:这个专辑主要是本小白在机器学习算法学习过程中的一些总结笔记和心得,如有不对之处还请各位大神多多指正!(关于决策树的剪枝还有很多没有搞懂,之后弄明白了会再单独出一篇总结哒)

参考资料链接:
1.https://machinelearningmastery.com/what-is-information-entropy/
2.https://zhuanlan.zhihu.com/p/29679277
3.https://machinelearningmastery.com/information-gain-and-mutual-information/
4.https://victorzhou.com/blog/gini-impurity/
5.https://sci2s.ugr.es/noisydata
6.https://towardsdatascience.com/understanding-decision-trees-once-and-for-all-2d891b1be579
7.https://blog.csdn.net/weixin_36586536/article/details/80468426
8.https://zhuanlan.zhihu.com/p/85731206

你可能感兴趣的:(决策树(Decision Tree))