本章将深入探讨上一章留下的知识点:$color{red}{纯度}$
阅读本章前,请先充分认识到在决策树中的作用和意义。
请参考:《02 决策树 - 概念》
一、决策树量化纯度
决策树的构建是基于样本概率和纯度来进行的,判断数据集是否“纯”可以通过三个公式进行判断:Gini系数、熵(Entropy)、错误率。
三个公式的值越大,表示数据越不纯。值越小,表示数据越纯。
例:偿还贷款的能力。
P(1) = 7/10 = 0.7; 可以偿还的概率;
P(2) = 3/10 = 0.3; 无法偿还的概率;
$Gini = 1-\sum_{i=1}^nP(i)^2 =1- (0.7^2+0.3^2) = 0.42$
$H(Entropy) = - \sum_{i=1}^np(i)log_2(p(i)) = -(0.7log_20.7+0.3log_20.3) $
Error = 1 - max {p(i)} (i =1 ~ n) = 1 - 0.7 = 0.3
如果只有两种分类情况,随着两种情况发生的概率的改变,最后根据三种公式的计算所得:
可以发现,三种公式的效果差不多,一般情况使用熵公式。
二、信息增益度
当计算出各个特征属性的量化纯度值后,使用__信息增益度__来选择出当前数据集的分割特征属性。如果信息__增益度值越大__,表示在该特征属性上会损失的纯度越大,那么该属性越应该在决策树的上层。计算公式如下:
Gain为A在特征对训练数据集D的信息增益,它为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差。
思考:
现在有两个事件A和D,下图黑色部分是特征A给定条件下D的经验条件熵 H(D|A)。
显然,Gain= 蓝色区域 = H(D) - H(D|A)
较为理想的分割结果如下,红色方框里是分割后系统剩余的不纯度,这种分割情况下不纯度小了很多:
思考完后,请再次理解以下这句话的含义:
如果信息__增益度值越大__,表示在该特征属性上会损失的纯度越大,那么该属性越应该在决策树的上层。
三、决策树算法的停止条件
决策树构建过程是一个递归的过程,所以必须给定停止条件。
1、大于决策树最大深度。 max_depth
2、小于内部节点再划分所需最小样本数。__min_samples_split__
设min_samples_split=3,一个叶子节点a中剩余的样本数位5,另一个叶子节点b中剩余样本数量为2。a可以继续划分,b停止划分。
3、小于叶节点最少样本数。__min_samples_leaf__
设min_samples_leaf=3,如果划分出的新叶子节点剩余样本数小于3,那么撤销这步划分。
4、大于最大叶节点数。__max_leaf_nodes__
设max_leaf_nodes=5,当划分出超过五个叶子节点时,撤销这步划分操作。
5、小于节点划分不纯度。__min_impurity_split__
当Gini系数、熵(Entropy)、错误率,小于 min_impurity_split时,不再生成新的叶子节点。一般不会设置这个参数,依靠上面4个停止条件即可。
四、决策树算法效果评估
决策树算法效果评估和一般的分类算法一样,采用混淆矩阵进行计算准确率、召回率、精确率等指标。混淆矩阵参考:《05 模型训练和测试》
也可以采用叶子节点的纯度值综合来评估算法的效果,值越小,效果越好。
思考:
在决策树中的每一个节点都能够表示一个系统,都能够计算其信息熵(系统稳定程度)。
如果将这些信息熵单纯的求和结果会不太理想。比如有100个节点,前99个节点中有很多数据,但是第100个节点只有1条数据。按理说,这第100个节点对于整个系统的不稳定性起了非常小的作用。如果还有一个节点,这个节点里有大量的数据,且结果都为分类0,那么可以认为这个节点的划分比较成功,在计算整个决策树总损失的算法中,该节点要占用一个较大的比例。
所以:__不能将所有叶子节点的信息熵单纯的求和,还得乘上一个权重值,权重值=当前叶子节点的样本个数/总的样本个数。__