03 决策树 - 量化纯度、信息增益度、停止条件、评估

简介:

本章将深入探讨上一章留下的知识点:$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)
Gain-信息增益度

较为理想的分割结果如下,红色方框里是分割后系统剩余的不纯度,这种分割情况下不纯度小了很多:

思考完后,请再次理解以下这句话的含义:
如果信息__增益度值越大__,表示在该特征属性上会损失的纯度越大,那么该属性越应该在决策树的上层。

三、决策树算法的停止条件

决策树构建过程是一个递归的过程,所以必须给定停止条件。
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,那么可以认为这个节点的划分比较成功,在计算整个决策树总损失的算法中,该节点要占用一个较大的比例。

所以:__不能将所有叶子节点的信息熵单纯的求和,还得乘上一个权重值,权重值=当前叶子节点的样本个数/总的样本个数。__

总决策树的损失程度

相关文章
|
Python
Anaconda安装找不到的依赖包,以DBUtils包为例
在使用Anaconda安装依赖包时,有时会找不到包,可以通过本文中方法切换进行下载
1017 0
Anaconda安装找不到的依赖包,以DBUtils包为例
|
JavaScript 前端开发
【vue】iview如何把input输入框和点击输入框之后的边框去掉
【vue】iview如何把input输入框和点击输入框之后的边框去掉
287 0
|
11月前
|
程序员
【Markdown速成】半小时入门Markdown教程(后缀.md文件详解)
作为程序员我们经常会看到README.md这种说明文件,以.md为后缀的文件就是我们所说的Markdown的文件。
1371 4
|
7月前
|
自然语言处理 前端开发 安全
指南:Claude 3.7 怎么样?国内如何使用Claude 3.7 Sonnet?
本文主要介绍了Claude 3.7 Sonnet模型的发布教你如何订阅使用Claude 3.7 Sonnect及其新功能,特别是Claude Code工具的推出。
3930 7
|
移动开发 JavaScript 前端开发
HTML5 MathML好用的第三方库推荐
HTML5 的 MathML 对数学公式的展现至关重要,但因浏览器兼容性和复杂性问题,开发者常选用第三方库增强其功能。本文推荐了四个库:MathJax、KaTeX、MathML Cloud 和 jsMath。MathJax 兼容性好,支持多种格式;KaTeX 渲染速度快,适合现代浏览器;MathML Cloud 提供云端转换服务;jsMath 则适用于基本 MathML 支持。根据项目需求选择合适的库,能显著提升数学内容展示质量和用户体验。
|
Rust Python
Python 解析 toml 配置文件
Python 解析 toml 配置文件
385 1
|
前端开发 JavaScript Java
全栈开发中的前后端分离技术探索
【2月更文挑战第1天】 本文将介绍全栈开发中的前后端分离技术,探索如何通过前后端分离的架构实现高效灵活的开发流程。我们将深入探讨前后端分离的概念、优势和常用工具,并提供一些实践经验和建议,帮助开发者在项目中更好地应用这种技术。
|
算法 Python
Python算法——树的最大深度和最小深度
Python算法——树的最大深度和最小深度
261 4
|
分布式计算 大数据 Linux
Python大数据之PySpark(三)使用Python语言开发Spark程序代码
Python大数据之PySpark(三)使用Python语言开发Spark程序代码
394 0