决策树是什么?
- 决策树是一种基于预测变量对数据分类的算法。作为预测模型,决策树通过分析预测变量来得到有关目标变量的结论。决策树具有类似于流程图的结构,其中每个内部节点是测试属性,并且每个分支是测试的结果。
- 在机器学习中,决策树是一个预测模型,他代表的是对象属性与对象值之间的一种映射关系
- 决策树是一种十分常用的分类方法。他是一种监督学习,所谓监督学习就是给定一堆样本,每个样本都有一组属性和一个类别,这些类别是事先确定的,那么通过学习得到一个分类器,这个分类器能够对新出现的对象给出正确的分类。这样的机器学习就被称之为监督学习。
- 缺点:过拟合。过拟合的意思是什么呢?过渡拟合,在训练集上表现良好,但是在测试集上表现很糟糕,学习能力强但是学的太过精细。
对应玉过拟合的是欠拟合,欠拟合的意思是,训练集和测试集的表现都很糟糕,学习能力很差。
前面几个概念是比较通用的,大家都接受的一种解释决策树是个什么东西。我理解中的决策树形式上就简单理解成一个树结构,有节点有分枝的结构。用决策树来做分类预测,通过我写的构造算法,对一个表中数据的各个属性进行分类,选择一个最优的结构树出来(依据什么属性来分类后面再说,最优的标准后面也会将到),用这个树结构去预测训练集的数据从而得到最终预测值。学习一种模型,最终目的也是为了利用这个模型,去解决一些问题。
先介绍几个概念
- 有几个参数,用来判断当前步骤或者行为”好“”坏“用的。尽量去理解吧?不理解也没关系,后面用着用着就习惯了。
不纯度
- “不纯度”:先举个例子,对一个班级学生分类,如果按照性别分类,一半男一半女,数据非常集中,不纯度就低。某一类标签的比例越大,这个节点就越纯。不纯度就越低,分枝就越好……有没有点感觉了,一个节点的不纯度高低就看这个节点中包含元素的是否存在某种元素的占比较大。如果特别分散就说不纯度高,比如班级按照名字分类,分为100个类别,班级节点不存度就非常低了。
误差率
C l a s s f i c a t i o n E r r o r = 1 − m a x [ p ( i ∣ t ) ] Classfication Error=1-max[p(i|t)] ClassficationError=1−max[p(i∣t)]
t为节点,p(I|t)表示给定节点t中属于类别i的样本所占的比例。简单理解,1-最大样本占比;举个例子:
班级节点t按照18岁分类,分为小于18有10人,等于18有1人,大于18有5人,这么三个类别,最大比例的是小于18岁的10人也就是 10 16 = 5 8 \frac{10}{16}=\frac{5}{8} 1610=85 ,那么这个节点的误差率就是 3 8 \frac{3}{8} 83
信息熵
- 信息熵(Entropy)也叫“香农熵”。就是样本混乱程度或者理解成变量的不确定性,熵越大,表明这样本越混乱,或者这个样本越不确定是什么东西,决策树决策的过程就是降低信息熵的过程,让不清晰变得清晰(降的越快越好,决策越好),先来说信息熵的公式:
E n t r o p y = − ∑ i = 0 c − 1 P ( i ∣ t ) l o g 2 P ( i ∣ t ) Entropy=-\sum\limits_{i=0}^{c-1}P(i|t)log_2P(i|t) Entropy=−i=0∑c−1P(i∣t)log2P(i∣t)
c表示本节点上标签类别的个数(就是有多少个分类),因为P是概率,所以取对数后为负数,故前面加一个负号(不懂c啊i啊之类的话就直接群后面的例子去理解其实计算很简单,就是概率乘概率大对数)。举个例子来说明这个公式怎么计算:比如我这个小组t有6个人,5男1女。还是按照性别分类,那么t表示我这个小组,c=2表示有男女两种分类, E n t r o p y = − 1 6 ∗ l o g 2 ( 1 6 ) − 5 6 ∗ l o g 2 ( 5 6 ) = 0.650 Entropy=-\frac16*log_2(\frac16)-\frac56*log_2(\frac56)=0.650 Entropy=−61∗log2(61)−65∗log2(65)=0.650
条件熵
- 条件熵以及后面的信息增益参考知乎一篇文章一文读懂决策树
- 熵是对事件结果不确定性的度量,但在知道有些条件时,不确定性会变小。例如,一个人是否是艾滋病的阳性,这个事件的不确定性会存着医疗检测结果而降低。条件熵衡量的就是在某个条件 X 下,事件 Y 的不确定性,记作 H(Y|X) 。其定义式为
H ( Y ∣ X ) = ∑ i = 1 n p i H ( Y ∣ X = x i ) H(Y|X)=\sum\limits_{i=1}^{n}p_iH(Y|X=x_i) H(Y∣X)=i=1∑npiH(Y∣X=xi)
理解为,X 事件每个可能性的结果的熵乘以发生概率的求和。
关于条件熵,再以单项选择题来举例子。在学霸圈做单项选择题有一个秘籍:三长一短选最短,三短一长选最长。姑且假设学霸的秘籍一般都是正确的。
如果在某场考试中,有10%的单项选题是三长一短,10%的选题是三短一长。计算该考试单项选题的关于长短题的条件熵:
H(三长一短)=0bit
H(三短一长)=0bit
H(都一样长)=2bit
得到结果,条件熵为0.10+0.10+0.8*2=1.6bit。
可见,学霸的秘诀就是好用,将信息熵由2bit降为了1.6bit,降幅达到了20%。
信息增益(重要概念)
- 信息增益是知道了某个条件后,事件的不确定性下降的程度。写作 g(X,Y)。它的计算方式为信息熵减去条件熵,如下
g ( X , Y ) = H ( Y ) − H ( Y ∣ X ) g(X,Y)=H(Y)-H(Y|X) g(X,Y)=H(Y)−H(Y∣X)
表示的是,知道了某个条件后,原来事件不确定性降低的幅度。在上面单项选择的例子中,通过了解每个考题的长度信息,可以将信息熵由2bit降为了1.6bit。其中,信息增益就是0.4bit。
信息增益率
-假如某个条件极其严格,比如某个同学提前知道了所有选题的答案,那么将选题的序号作为条件,不存在任何不确定性,所以可以得到最大的信息增益。但是这个条件是没有意义的,假设老师换一份考卷答案就全部作废了。
信息增益率在信息增益的基础上增加了惩罚项,惩罚项是特征的固有值,是避免上述情况而设计的。
写作
g
r
(
X
,
Y
)
g_r(X,Y)
gr(X,Y)。定义为信息增益除以特征的固有值,如下
g
r
(
X
,
Y
)
=
g
(
X
,
Y
)
H
(
Y
)
g_r(X,Y)=\frac{g(X,Y)}{H(Y)}
gr(X,Y)=H(Y)g(X,Y)
继续以单项选择题为例,通过分析选题的长短特征之后,信息增益g(X,Y)为2bit,惩罚项H(Y)=-0.1log0.1-0.1log0.1-0.8*log0.8=0.92
信息增益率为0.4/0.92=43%,其中,信息增益率为43%。
Gini指数
- 基尼系数表征的也是事件的不确定性,Gini指数计算公式:
G i n i = ∑ i = 0 c − 1 P ( i ∣ t ) ( 1 − P ( i ∣ t ) ) = 1 − ∑ i = 0 c − 1 [ P ( i ∣ t ) ] 2 Gini=\sum\limits_{i=0}^{c-1}P(i|t)(1-P(i|t))=1-\sum\limits_{i=0}^{c-1}[P(i|t)]^2 Gini=i=0∑c−1P(i∣t)(1−P(i∣t))=1−i=0∑c−1[P(i∣t)]2
跟信息增益很像是不是?继续举个例子来说明计算过程:还是上面例子小组t有5男1女。对性别划分,则 G i n i = 1 − ( 1 6 ) 2 − ( 5 6 ) 2 = 0.5 Gini=1-(\frac16)^2-(\frac56)^2=0.5 Gini=1−(61)2−(65)2=0.5 - 下面是基尼指数,信息熵,误差率的对比:
构造决策树的方式
决策树的构建参考知乎一篇文章决策树(Decision Tree):通俗易懂之介绍
- 决策树的生成主要分以下两步,这两步通常通过学习已经知道分类结果的样本来实现。
- 节点的分裂:一般当一个节点所代表的属性无法给出判断时,则选择将这一节点分成2个子节点(如不是二叉树的情况会分成n个子节点)
- 阈值的确定:选择适当的阈值使得分类错误率最小 (Training Error)。
- 比较常用的决策树有ID3,C4.5和CART(Classification And Regression Tree),CART的分类效果一般优于其他决策树
ID3
-
由信息熵(Entropy)原理来决定那个做父节点,那个节点需要分裂。对于一组数据,熵越小说明分类结果越好。在选取父节点的时候也是跟觉这个熵的大小来分类的:。熵取值在[0,1]之间。越小越准确。举个例子:学生很多属性,根据这额属性划分好学生和坏学生(已知分类结果的监督学习)。
直观分类如下,通过学习上表的数据,可以设置A,B,C,D,E的具体值,而A,B,C,D,E则称为阈值:
-
熵的不断最小化,实际上就是提高分类正确率的过程。
比如上表中的4个属性:单一地通过以下语句分类:
-
分数小于70为【不是好学生】:分错1个
-
出勤率大于70为【好学生】:分错3个
-
问题回答次数大于9为【好学生】:分错2个
-
作业提交率大于80%为【好学生】:分错2个
-
-
最后发现 分数小于70为【不是好学生】这条分错最少,也就是熵最小,所以应该选择这条为父节点进行树的生成,当然分数也可以选择大于71,大于72等等,出勤率也可以选择小于60,65等等,总之会有很多类似上述1~4的条件,最后选择分类错最少即熵最小的那个条件。而当分裂父节点时道理也一样,分裂有很多选择,针对每一个选择,与分裂前的分类错误率比较,留下那个提高最大的选择,即熵减最大的选择。
C4.5
通过对ID3的学习,可以知道ID3存在一个问题,那就是越细小的分割分类错误率越小,所以ID3会越分越细,比如以第一个属性为例:设阈值小于70可将样本分为2组,但是分错了1个。如果设阈值小于70,再加上阈值等于95,那么分错率降到了0,但是这种分割显然只对训练数据有用,对于新的数据没有意义,这就是所说的过度学习(Overfitting)。
分割太细了,训练数据的分类可以达到0错误率,但是因为新的数据和训练数据不同,所以面对新的数据分错率反倒上升了。决策树是通过分析训练数据,得到数据的统计信息,而不是专为训练数据量身定做。
就比如给男人做衣服,叫来10个人做参考,做出一件10个人都能穿的衣服,然后叫来另外5个和前面10个人身高差不多的,这件衣服也能穿。但是当你为10个人每人做一件正好合身的衣服,那么这10件衣服除了那个量身定做的人,别人都穿不了。
所以为了避免分割太细,c4.5对ID3进行了改进,C4.5中,优化项要除以分割太细的代价,这个比值叫做信息增益率,显然分割太细分母增加,信息增益率会降低。除此之外,其他的原理和ID3相同。
CART
分类回归树
CART是一个二叉树,也是回归树,同时也是分类树,CART的构成简单明了。
CART只能将一个父节点分为2个子节点。CART用GINI指数来决定如何分裂:
GINI指数:总体内包含的类别越杂乱,GINI指数就越大(跟熵的概念很相似)。
a. 比如出勤率大于70%这个条件将训练数据分成两组:大于70%里面有两类:【好学生】和【不是好学生】,而小于等于70%里也有两类:【好学生】和【不是好学生】。
b. 如果用分数小于70分来分:则小于70分只有【不是好学生】一类,而大于等于70分有【好学生】和【不是好学生】两类。
比较a和b,发现b的凌乱程度比a要小,即GINI指数b比a小,所以选择b的方案。以此为例,将所有条件列出来,选择GINI指数最小的方案,这个和熵的概念很类似。
CART还是一个回归树,回归解析用来决定分布是否终止。理想地说每一个叶节点里都只有一个类别时分类应该停止,但是很多数据并不容易完全划分,或者完全划分需要很多次分裂,必然造成很长的运行时间,所以CART可以对每个叶节点里的数据分析其均值方差,当方差小于一定值可以终止分裂,以换取计算成本的降低。
CART和ID3一样,存在偏向细小分割,即过度学习(过度拟合的问题),为了解决这一问题,对特别长的树进行剪枝处理,直接剪掉。
以上的决策树训练的时候,一般会采取Cross-Validation法:比如一共有10组数据:
第一次. 1到9做训练数据, 10做测试数据
第二次. 2到10做训练数据,1做测试数据
第三次. 1,3到10做训练数据,2做测试数据,以此类推
做10次,然后大平均错误率。这样称为 10 folds Cross-Validation。
比如 3 folds Cross-Validation 指的是数据分3份,2份做训练,1份做测试。
小结一下
关于上面构造决策树多方法的介绍有一个描述更加详细的文章决策树与自然语言