李航统计学习方法----决策树章节学习笔记以及python代码

目录

1 决策树模型

2 特征选择

2.1 数据引入

2.2 信息熵和信息增益 

3 决策树生成

3.1 ID3算法

3.2 C4.5算法

4 决策树的剪枝

5 CART算法(classification and regression tree)

5.1 回归树算法

 5.2 分类树的生成

5.3 CART剪枝

6 PYTHON代码实例


决策树算法可以应用于分类问题与回归问题,李航的书中主要讲解的是分类树,构建决策树分为三个过程,分别是特征选择、决策树生成、决策树剪枝以及CART算法。

1 决策树模型

分类决策树模型是一种描述对实例进行分类的树形结构.决策树由结点(node)和有向边(directed edge)组成结点有两种类型:内部结点(internal node)和叶结点(leaf node)、内部结点表示一个特征或属性,叶结点表示一个类。

李航统计学习方法----决策树章节学习笔记以及python代码_第1张图片

决策树可以认为是if-then规则的集合,可以将决策树转化为if-then的规则,最终所有的样本实例都会被决策树所覆盖,在书写决策树代码的过程中就可以用if语句去构建决策树,决策树本质上就是针对数据集的一套分类规则。

假设输入的数据集为D,实例x是n维列向量,y是数据的标注。

D=\left\{\left(x_{1}, y_{1}\right),\left(x_{2}, y_{2}\right), \cdots,\left(x_{N}, y_{N}\right)\right\}

x_{i}=\left(x_{i}^{(1)}, x_{i}^{(2)}, \cdots, x_{i}^{(n)}\right)^{\mathrm{T}}

y_{i} \in\{1,2, \cdots, K\}

决策树学习本质上是从训练数据集中归纳出一组分类规则。与训练数据集不相矛盾的决策树(即能对训练数据进行正确分类的决策树)可能有多个,也可能一个也没有。我们需要的是一个与训练数据矛盾较小的决策树,同时具有很好的泛化能力。在构建决策树的过程中可以进行特征选择,但是决策树可能会出现过拟合的现象,因此要进行决策树的剪枝。

2 特征选择

2.1 数据引入

李航统计学习方法----决策树章节学习笔记以及python代码_第2张图片

从李航书中截取数据集,从该数据集中需要构建一套分类规则使得错误分类最少或者说拟合程度最好,选择不同的特征作为根结点就可以构建出不同的决策模型,如何选择根结点对应决策树的特征选择问题,因此首先要引入信息熵以及信息增益的概念。

李航统计学习方法----决策树章节学习笔记以及python代码_第3张图片

2.2 信息熵和信息增益 

在信息论与概率统计中,熵(entropy)是表示随机变量不确定性的度量.设X是一个取有限个值的离散随机变量,其概率分布为:

P\left(X=x_{i}\right)=p_{i}, \quad i=1,2, \cdots, n

则随机变量X的熵H(X)定义为:

H(X)=-\sum_{i=1}^{n} p_{i} \log p_{i}

规定当p=0时,p*logp=0,一般以2或者e作为自然对数的底数。

当变量X服从伯努利分布时,李航书中给出了该分布的熵曲线:

李航统计学习方法----决策树章节学习笔记以及python代码_第4张图片

设有随机变量(X,Y),其联合概率分布为 :

P\left(X=x_{i}, Y=y_{j}\right)=p_{i j}, \quad i=1,2, \cdots, n ; \quad j=1,2, \cdots, m

条件熵H(Y|X)表示在已知随机变量X的条件下随机变量Y的不确定性.

H(Y \mid X)=\sum_{i=1}^{n} p_{i} H\left(Y \mid X=x_{i}\right)

p_{i}=P\left(X=x_{i}\right)

在定义了条件熵之后就可以引入信息增益的概念,信息增益代表着A特征对数据集D的信息增益程度,两者之间的差被称为互信息,决策树中的信息增益等价于类于特征之间的互信息。信息增益越大说明就表明该特征对于数据集的区分能力就越大。

g(D, A)=H(D)-H(D \mid A)

设训练数据集为D,|D|表示其样本容量,即样本个数.设有K个类C, k =1,2,…,K ,|C|为属于类C的样本个数。D_{i}代表被特征A划分开的训练样本子集,D_{ik}则代表子集中第k个类别。

H(D)=-\sum_{k=1}^{K} \frac{\left|C_{k}\right|}{|D|} \log _{2} \frac{\left|C_{k}\right|}{|D|}

H(D \mid A)=\sum_{i=1}^{n} \frac{\left|D_{i}\right|}{|D|} H\left(D_{i}\right)=-\sum_{i=1}^{n} \frac{\left|D_{i}\right|}{D \mid} \sum_{k=1}^{K} \frac{\left|D_{i k}\right|}{\left|D_{i}\right|} \log _{2} \frac{\left|D_{i k}\right|}{\left|D_{i}\right|}

g(D, A)=H(D)-H(D \mid A)

通过三个式子可以求解出A特征对于数据集的信息增益。

对于2.1中的数据,可以带入公式计算出数据集的经验熵以及年龄特征与类别的互信息。

H(D)=-\frac{9}{15} \log _{2} \frac{9}{15}-\frac{6}{15} \log _{2} \frac{6}{15}=0.971

\begin{aligned} g\left(D, A_{1}\right)=& H(D)-\left[\frac{5}{15} H\left(D_{1}\right)+\frac{5}{15} H\left(D_{2}\right)+\frac{5}{15} H\left(D_{3}\right)\right] \\ =& 0.971-\left[\frac{5}{15}\left(-\frac{2}{5} \log _{2} \frac{2}{5}-\frac{3}{5} \log _{2} \frac{3}{5}\right)\right.\\ &\left.+\frac{5}{15}\left(-\frac{3}{5} \log _{2} \frac{3}{5}-\frac{2}{5} \log _{2} \frac{2}{5}\right)+\frac{5}{15}\left(-\frac{4}{5} \log _{2} \frac{4}{5}-\frac{1}{5} \log _{2} \frac{1}{5}\right)\right] \\ =& 0.971-0.888=0.083 \end{aligned}

依次可以求出其他特征的信息增益值,信息增益不具有绝对意义,因此可以引入信息增益比的概念:

g_{R}(D, A)=\frac{g(D, A)}{H(D)}

3 决策树生成

3.1 ID3算法

ID3算法的核心是在决策树各个结点上应用信息增益准则进行特征的选择,递归地构建决策树.具体方法是:从根结点(root node)开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点;再对子结点递归地调用以上方法,构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止.最后得到一个决策树.

因此应用ID3算法需要重复不断的计算根结点的信息熵和信息增益来构建决策树,以第二节的数据为例子,是否有自己的房子这个特征带来的信息增益是最大的,因此第一层结点就是是否有房子,从而将数据集分为两部分,在下一层的结点中再次计算结点下的信息熵,来进行下一层决策树的构建。

李航统计学习方法----决策树章节学习笔记以及python代码_第5张图片

 总结就是ID3算法的核心就是不断计算信息增益,计算原理相对简单易懂。

3.2 C4.5算法

前文提过信息增益不是一个绝对的概念,随着数据集的变化会有不同的信息熵和信息增益,因此在构建决策树选择特征时以信息增益比来衡量特征的重要性。决策树算法会递归的不断生成新的枝,直到信息增益很小或者没有特征使用为止。

4 决策树的剪枝

决策树生成算法递归地产生决策树,直到不能继续下去为止。这样产生的树往往对训练数据的分类很准确,但对未知的测试数据的分类却没有那么准确,即出现过拟合现象。过拟合的原因在于学习时过多地考虑如何提高对训练数据的正确分类,从而构建出过于复杂的决策树。解决这个问题的办法是考虑决策树的复杂度,对已生成的决策树进行简化。

决策树的剪枝往往通过极小化决策树整体的损失函数(loss function)或代价函数(cost function)来实现.设树T的叶结点个数为|T|,t是树T的叶结点,该叶结点有N_{t}个样本点,其中k类的样本点有N_{tk}个,k =1,2,…,K ,H,(T)为叶结点t上的经验嫡,α≥0为参数,则决策树学习的损失函数可以定义为:

C_{\alpha }(T) = \sum_{t=1}^{|T|} N_{t}H_{t}(T) + \alpha |T|

H_{t}(T) = -\sum_{k} \frac{N_{tk}}{N_{t}} \log\frac{N_{tk}}{N_{t}}

可以观察损失函数的前一项代表着整个决策树的信息熵,决策树的熵应该是越小越好的,即决策树所构建的分类规则能够很好的将数据集中的样本区分开,损失函数的后一项可以用LASSO去理解,在损失函数中添加叶结点的数量来减少模型的复杂度,α则是一个超参数,越大的α树模型就会越简单。

因此在决策树算法中,实现给定超参数α,进行树模型的构建,求解出损失函数最小的决策树,超参数不同,决策树的结构也会不同。

李航统计学习方法----决策树章节学习笔记以及python代码_第6张图片

设一组叶结点回缩到其父结点之前与之后的整体树分别为T_{b}T_{a},,其对应的损失函数值分别是C_{b}(T)C_{a}(T),如果C_{b}(T) >= C_{a}(T),则进行剪枝操作。

介绍至此,算法所构建的决策树有一个特征,就是决策树是多叉的。

5 CART算法(classification and regression tree)

5.1 回归树算法

假设输入的数据集为D,实例x是n维列向量,y是数据的标注。

D=\left\{\left(x_{1}, y_{1}\right),\left(x_{2}, y_{2}\right), \cdots,\left(x_{N}, y_{N}\right)\right\}

x_{i}=\left(x_{i}^{(1)}, x_{i}^{(2)}, \cdots, x_{i}^{(n)}\right)^{\mathrm{T}}

y_{i} \in\{1,2, \cdots, K\}

一个回归树对应着输入空间(即特征空间)的一个划分以及在划分的单元上的输出值.假设已将输入空间划分为M个单元R1,R2,…,RM,,并且在每个单元R上有一个固定的输出值c_{m},于是回归树模型可表示为:

f(x) = \sum_{m=1}^{M}c_{m}I(x\in R_{m})

要使回归树每个结点的误差最小,根据经验损失最小的原则或者L2损失函数都可以得出每个结点的输出值是在这个结点上的所有y值的平均值,即:

c_{m} = ave(y_{i} \mid x_{i} \in R_{m})

根据该规则可以导出回归树算法的算法流程:

INPUT : 数据集 D

OUTPUT : 回归树 f(x)

(1):选择最优切分变量和最优的切分点

遍历变量 j ,并寻找变量 j 的最优切分点 s ,求解:

\min _{j, s}\left[\min _{c_{1}} \sum_{x_{i} \in R_{1}(j, s)}\left(y_{i}-c_{1}\right)^{2}+\min _{c_{2}} \sum_{x_{i} \in R_{2}(j, s)}\left(y_{i}-c_{2}\right)^{2}\right]

损失函数的内层可以看出所有变量被区分成了两类,前面提过ID3,C4.5算法生成的决策树是多叉的,而回归树是二叉树,内层损失函数确定了结点的输出值,外层则遍历了所有变量和所有切分点,来实现寻找最优切分变量和最优切分点的目标。

内层输出的固定值是所有被分到该分支的y值的平均值。

(2):循环生成回归树

重复调用(1)的步骤,直到满足停止条件为止。

(3):决策树生成

最终就可以生成决策树 f(x)

f(x) = \sum_{m=1}^{M}c_{m}I(x\in R_{m})

 5.2 分类树的生成

ID3,C4.5算法在生成决策树的过程是基于信息熵和信息增益,而CART算法分类树则是基于基尼系数,假设有K个类,样本属于第K类的概率为p_{k},则

GINI(taimei)=\sum_{taimei=1}^{k}taimei_{k}(1 - taimei_{k})

对于整个样本 D 的基尼系数为:

\operatorname{Gini}(D)=1-\sum_{k=1}^{K}\left(\frac{\left|C_{k}\right|}{|D|}\right)^{2}

在特征A的条件下,样本集的基尼系数为:

\operatorname{Gini}(D, A)=\frac{\left|D_{1}\right|}{|D|} \operatorname{Gini}\left(D_{1}\right)+\frac{\left|D_{2}\right|}{|D|} \operatorname{Gini}\left(D_{2}\right)

基尼系数表示样本的混乱程度,GINI (D, A) 表示了在特征A的划分下,样本集的混乱度,特征的区分能力越强,基尼系数就会越小,因此在分类树中,在选择特征时,要选择基尼系数最小的特征作为决策树的切分点。

整个算法的流程相对好懂,这里就不再给出算法的流程,大家可以参考李航书中内容。

5.3 CART剪枝

首先给定CART树的损失函数:

C_{\alpha}(T)=C(T)+\alpha|T|

其中C(T)为树的预测损失,例如均方误差或者基尼系数等等,α则是人工给定的超参数,与前文一样,给定一个α总能得到一个最优的树,当α=0时,最优结果为整体树,当α趋近于正无穷时,决策树就只有一个根结点。

6 PYTHON代码实例

决策树的Python实现(含代码)_CDA·数据分析师的博客-CSDN博客_决策树算法python代码

参考该博客链接哈哈哈哈哈哈.........该博客写的很好啦!

你可能感兴趣的:(大数据,python,决策树,算法,剪枝)