决策树 Decision tree
一、决策树概述
1.1 决策树介绍
1.1.1 定义
- 决策树是一种典型的分类方法,首先对数据进行处理,利用归纳算法生成可读的规则和决策树,然后使用决策对新数据进行分析
- 例:
- 根据外面环境决定是否外出
- 根据外面环境决定是否外出
1.1.2 本质
- 本质上决策树是通过一系列规则对数据进行分类的过程
1.1.3 决策树的组成
- 根节点
- 决策结点:(非叶子节点) 决策结点代表一个问题或者决策.通常对应待分类对象的属性
- 分支: 测试的结果
- 叶子节点: 就是树最底部的节点,也就是决策结果
1.1.4 分类
(1)分类树
- 分类树使用信息增益或增益比率或其它绑定方式来划分节点,根据每个节点样本的类别情况投票决定测试样本的类别(输出为离散值)
(2)回归树(regression tree)
- 回归树(regression tree),顾名思义,就是用树模型做回归问题,每一片叶子都输出一个预测值(连续值)。预测值一般是该片叶子所含训练集元素输出的均值
1.2 相关术语
1.2.1 过拟合
- 算法生成的决策树非常详细并且庞大,每个属性都被详细地加以考虑,决策树的树叶节点所覆盖的训练样本都是“纯”的。因此用这个决策树来对训练样本进行分类的话,你会发现对于训练样本而言,这个树表现完好,误差率极低且能够正确得对训练样本集中的样本进行分类。训练样本中的错误数据也会被决策树学习,成为决策树的部分,但是对于测试数据的表现就没有想象的那么好,或者极差,这就是所谓的过拟合(Overfitting)问题
1.3 剪枝
1.3.1 剪枝原因
- 当训练数据量大、特征数量较多时构建的决策树可能很庞大,这样的决策树用来分类是否好?答案是否定的。
- 决策树是依据训练集进行构建的,当决策树过于庞大时,可能对训练集依赖过多,也就是对训练数据过度拟合。从训练数据集上看,拟合效果很好,但对于测试数据集或者新的实例来说,并不一定能够准确预测出其结果。
- 因此,对于决策树的构建还需要最后一步----即决策树的修剪
1.4.1 预剪枝(Pre-Pruning)
(1)什么是预剪枝
- 在构造决策树的同时进行剪枝。
(2)思想
- 在决策树生成过程中,对每个节点在划分前先进行估计,若当前节点的划分不能带来决策树泛化性能的提升,则停止划分并将当前节点标记为叶节点
(3)过程
- 所有决策树的构建方法,都是在无法进一步降低熵的情况下才会停止创建分支的过程,为了避免过拟合,可以设定一个阈值,熵减小的数量小于这个阈值,即使还可以继续降低熵,也停止继续创建分支。
- 但是这种方法实际中的效果并不好。
1.4.2 后剪枝(Post-Pruning)
(1)什么是后剪枝?
- 后剪枝是在决策树生长完成之后,对树进行剪枝,得到简化版的决策树。
(2)过程
- 剪枝的过程是对拥有同样父节点的一组节点进行检查,判断如果将其合并,熵的增加量是否小于某一阈值。
- 如果确实小,则这一组节点可以合并一个节点,其中包含了所有可能的结果。
- 后剪枝是目前最普遍的做法。
后剪枝的剪枝过程是删除一些子树,然后用其叶子节点代替,这个叶子节点所标识的类别通过大多数原则(majority class criterion)确定。所谓大多数原则,是指剪枝过程中, 将一些子树删除而用叶节点代替,这个叶节点所标识的类别用这棵子树中大多数训练样本所属的类别来标识,所标识的类称为majority class
1.4.3 两种方式比较
- 后剪枝决策树通常比预剪枝决策树保留了更多的分支,一般情况下,后剪枝决策树欠拟合的风险很小,其泛化能力往往优于预剪枝预测数。 但由于其是基于创建完决策树之后,再对决策树进行自底向上地剪枝判断,因此训练时间开销会比预剪枝或者不剪枝决策树要大
1.5 决策过程
- 在沿着决策树从上到下的遍历过程中,在每个结点都有一个测试。
- 对每个结点上问题的不同测试输出导致不同的分枝,最后会达到一个叶子结点。
- 这一过程就是利用决策树进行分类的过程,利用若干个变量来判断属性的类别
二、理论基础
2.1 香农理论
2.1.1 信息量
- 假设事件ai的发生概率为p(ai),则事件ai的所含有或所提供的信息量I(ai)为:
I ( a i ) = − l o g 2 p ( a i ) I(a_i)=-log_2{p(a_i)} I(ai)=−log2p(ai)
例:
- 从直觉上讲,小概率事件比大概率事件包含的信息量大。
- 如果某件事情是“百年一见”则肯定比“习以为常”的事件包含的信息量大。端案例就是“太阳从东方升起”,因为为确定事件,所以不携带任何信息量。
2.1.2 平均信息量/信息熵
(1) 信息熵定义
- 信息量度量的是一个具体事件发生所带来的信息,而熵则是在结果出来之前对可能产生的信息量的期望——考虑该随机变量的所有可能取值,即所有可能发生事件所带来的信息量的期望
- 熵是度量样本集合纯度最常用的一种指标,它是信息的期望值,即 信息熵 = 平均信息量(信息量的期望)
E n t ( D ) = H ( X ) = − ∑ k = 1 N p ( k ) log 2 p ( k ) Ent(D)=H(X)=-\sum_{k=1}^N{p(k)\log_2{p(k)}} Ent(D)=H(X)=−k=1∑Np(k)log2p(k)
(2) 平均信息量
- 假设有n个互不相容的事件a1,a2,a3,….,an,它们中有且仅有一个发生,则其平均的信息量可如下度量:
I ( a 1 , a 2 , . . . , a n ) = E [ I ( a i ) ] = − ∑ i = 1 N p ( a i ) log 2 p ( a i ) I(a_1,a_2,...,a_n)=E[I(a_i)]=-\sum_{i=1}^N{p(a_i)\log_2{p(a_i)}} I(a1,a2,...,an)=E[I(ai)]=−i=1∑Np(ai)log2p(ai)- 上式,对数底数可以为任何数,不同的取值对应了熵的不同单位。通常取2,
- 规定当p(ai)=0时:I(ai) = 0
(3)例
- 假设有一个数据集合D,其中只有两个类,一个是正例类,一个是负例类
计算D中正例类和负例类在三种不同的组分下熵的变化情况。- D中包含有50%的正例和50%的负例。
E n t r o p y ( D ) = − 0.5 l o g 2 0.5 − 0.5 l o g 2 0.5 = 1 Entropy(D)=-0.5log_20.5-0.5log_20.5=1 Entropy(D)=−0.5log20.5−0.5log20.5=1 - D中包含有20%的正例和80%的负例。
E n t r o p y ( D ) = − 0.2 l o g 2 0.2 − 0.8 l o g 2 0.8 = 0.722 Entropy(D)=-0.2log_20.2-0.8log_20.8=0.722 Entropy(D)=−0.2log20.2−0.8log20.8=0.722 - D中包含有100%的正例和0%的负例。
E n t r o p y ( D ) = − 1 l o g 2 1 − 0 l o g 2 0 = 0 Entropy(D)=-1log_21-0log_20=0 Entropy(D)=−1log21−0log20=0
- D中包含有50%的正例和50%的负例。
2.1.3 条件熵
(1)定义
- 条件熵H(Y|X)表示在已知随机变量X的条件下随机变量Y的不确定性。随机变量X给定的条件下随机变量Y的条件熵H(Y|X)
H ( Y ∣ X ) = ∑ x ∈ X p ( x ) H ( Y ∣ X = x ) H(Y|X)=\sum_{x\in{X}}p(x)H(Y|X=x) H(Y∣X)=x∈X∑p(x)H(Y∣X=x)
(2)公式推导
H ( Y ∣ X ) = ∑ x ∈ X p ( x ) H ( Y ∣ X = x ) = − ∑ x ∈ X p ( x ) ∑ y ∈ Y p ( y ∣ x ) l o g 2 p ( y ∣ x ) = − ∑ x ∈ X ∑ y ∈ Y p ( x , y ) l o g 2 p ( y ∣ x ) H(Y|X) = \sum_{x\in{X}}p(x)H(Y|X=x) =-\sum_{x\in{X}}p(x)\sum_{y\in{Y}}p(y|x)log_2p(y|x) = -\sum_{x\in{X}}\sum_{y\in{Y}}p(x,y)log_2p(y|x) H(Y∣X)=x∈X∑