【机器学习】P23 决策树、熵和信息增益

news2024/10/6 8:27:48

决策树、熵与信息增益

  • 决策树
  • 信息增益
  • Python 与 决策树


决策树

决策树(Decision Tree) 是一种基于树形结构的分类算法,它通过一系列的询问(也称为测试或判定条件)来判断一个数据实例属于哪个类别。

以一个案例贯穿全文,我们尝试通过数据库表中三个特征判断是猫还是狗子:

  • 特征一: 耳朵形状(折耳、尖耳)
  • 特征二: 脸的形状(圆、不圆)
  • 特征三: 有无长须(有、无)
耳朵形状脸的形状有无长须是不是猫子
不圆
不是
不圆不是
不圆不是
不是
不是

根据上表,决策树的一种构造方案如下:

在这里插入图片描述

在这里容易产生两个疑问:

  • 为什么根节点选择判断耳朵形状,而不是根节点先判断脸的形状?
  • 为什么当耳朵形状是尖的时,去判断脸的形状而不是长须?

因为熵与信息增益。


熵(Entropy) 本意上,是一个表示数据集无序程度的指标,它可以用来衡量在数据集中混杂着多少种不同的类别。熵越高,表示数据集的无序程度越高,即混杂的类别越多。在决策树算法中,我们希望使用尽可能少的测试来划分数据 集,因此我们会选择那些能够最大程度地减少数据集熵的测试条件,也就是信息增益最大。

在本案例中,熵的概念为一个数据集中混杂的猫子和狗子的混乱程度。换句话说,如果一个数据集里全是猫子,熵为0,或者全是狗子,熵同样为0,但是如果一半猫子一半狗子,那就会达到熵的最大值:1。

熵的公式为:
H ( p 1 ) = − p 1 l o g 2 ( p 1 ) − ( 1 − p 1 ) l o g 2 ( 1 − p 1 ) H(p_1)=-p_1log_2(p_1)-(1-p_1)log_2(1-p_1) H(p1)=p1log2(p1)(1p1)log2(1p1)

其中 p 1 p_1 p1 代表着数据集中猫子的占比,故 ( 1 − p 1 ) (1-p_1) (1p1) 即为数据集中狗子的占比。

故有熵图像如下:

在这里插入图片描述

  • p = 0 p=0 p=0 代表着全是狗子
  • p = 1 p=1 p=1 代表着全是猫子

根据数据表格,初始情况下,熵的值为:
p 0 = 5 / 10 = 0.5 p_0=5/10=0.5 p0=5/10=0.5 H ( p 0 ) = − 0.5 ∗ l o g 2 ( 0.5 ) − ( 1 − 0.5 ) ∗ l o g 2 ( 1 − 0.5 ) = 1 H(p_0)=-0.5*log_2(0.5)-(1-0.5)*log_2(1-0.5)=1 H(p0)=0.5log2(0.5)(10.5)log2(10.5)=1

而在决策树算法中,我们要做的下一步就是最大程度地减少数据集的熵,也就是尝试将猫子和狗子区分出,而每次熵的减少的值,就是信息增益的值。


信息增益

信息增益(Information Gain) 是指在使用某个测试条件对数据集进行划分后,数据集熵的减少量。信息增益越大,表示使用该测试条件能够最大程度地减少数据集的熵,也就是最大程度地增加数据集的有序程度。

所以我们在初始状态下,我们有三种测试条件可以对数据集进行划分,从而减少熵,我们的目标是从这三种测试条件中筛选出最大信息增益的选择:

  • 耳朵的形状
  • 脸的形状
  • 有无长须

在这里插入图片描述
信息增益 = 初始熵 − 结果熵 信息增益 = 初始熵 - 结果熵 信息增益=初始熵结果熵

如上图所示,初始熵为 H ( 0.5 ) = 1 H(0.5)=1 H(0.5)=1,如果使用耳朵的形状作为测试条件,信息增益最大,所以我们选择耳朵的形状作为第一个测试条件对原始数据集进行划分。

下一步的划分原则同上述,按照信息增益最大作为判断条件,直到熵的值为0;

当然在实际情况下,会存在一些噪点,这些噪点会导致熵不会为0,所以我们常常会设定决策树的深度。构造有限深度的决策树。


Python 与 决策树

案例导入:

X_train = np.array([[1, 1, 1],[0, 0, 1],[0, 1, 0],[1, 0, 1],[1, 1, 1],[1, 1, 0],[0, 0, 0],[1, 1, 0],[0, 1, 0],[0, 1, 0]])

y_train = np.array([1, 1, 0, 0, 1, 1, 0, 1, 0, 0])

计算熵:

已知熵的计算公式为:
H ( p ) = − p l o g 2 ( p ) − ( 1 − p ) l o g 2 ( 1 − p ) H(p) = -plog_2(p)-(1-p)log_2(1-p) H(p)=plog2(p)(1p)log2(1p)

Python程序编程为:

def entropy(p):
    if p == 0 or p == 1:
        return 0
    else:
        return -p * np.log2(p) - (1- p)*np.log2(1 - p)

将原始数据集按照测试条件划分为两个部分:

def split_indices(X, index_feature):
    left_indices = []
    right_indices = []
    for i,x in enumerate(X):
        if x[index_feature] == 1:
            left_indices.append(i)
        else:
            right_indices.append(i)
    return left_indices, right_indices

计算带有权重的熵(结果熵):

def weighted_entropy(X,y,left_indices,right_indices):
    
    w_left = len(left_indices)/len(X)
    w_right = len(right_indices)/len(X)
    p_left = sum(y[left_indices])/len(left_indices)
    p_right = sum(y[right_indices])/len(right_indices)
    
    weighted_entropy = w_left * entropy(p_left) + w_right * entropy(p_right)
    return weighted_entropy

计算信息增益:

def information_gain(X, y, left_indices, right_indices):
    p_node = sum(y)/len(y)
    h_node = entropy(p_node)
    w_entropy = weighted_entropy(X,y,left_indices,right_indices)
    print(h_node)
    return h_node - w_entropy

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/451972.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Go | 一分钟掌握Go | 2 - 集成开发工具

作者:Mars酱 声明:本文章由Mars酱编写,部分内容来源于网络,如有疑问请联系本人。 转载:欢迎转载,转载前先请联系我! 工具介绍 编码是一门传统手艺活,手艺好不好很重要,器…

高精度气象模拟软件WRF实践技术

【原文链接】:高精度气象模拟软件WRF(Weather Research Forecasting)实践技术及案例应用https://mp.weixin.qq.com/s?__bizMzU5NTkyMzcxNw&mid2247538149&idx3&sn3890c3b29f34bcb07678a9dd4b9947b2&chksmfe68938fc91f1a99bbced2113b09cad822711e7f…

开发者必读!常用的二维码生成器 API 推荐

引言 二维码是一种能够存储信息的图形码,它在现代社会中扮演着越来越重要的角色。生成二维码的过程通常需要使用二维码生成器,而现在有很多二维码生成器 API 可以供开发者使用。 在本文中,我们将讨论二维码生成器 API 的工作原理、应用场景…

CHAPTER 6: 《DESIGN A KEY-VALUE STORE》 第6章 《设计一个键值存储》

CHAPTER 6: DESIGN A KEY-VALUE STORE 键值存储(也称为键值数据库)是一种非关系数据库。每一个唯一标识符存储为与其关联值的键。这种数据配对称为“键-值”对。 在一个键-值对中,键必须是唯一的,与该键相关联的值可以是通过密钥访问。键可以是纯文本或…

编译原理个人作业--第五章——基于 编译原理 国防工业出版社 第三版

1 文法 G 1 G_1 G1​为 E → E T ∣ T T → T ∗ F ∣ F F → ( E ) ∣ i E\rightarrow ET|T\\ T\rightarrow T*F|F\\ F\rightarrow(E)|i E→ET∣TT→T∗F∣FF→(E)∣i 请证明 E T ∗ F ET*F ET∗F是他的一个句型(课本写的是ET*T感觉是印错了),指出它的所有短语…

这份最新阿里、腾讯、华为、字节等大厂的薪资和职级对比,你看过没?

互联网大厂新入职员工各职级薪资对应表(技术线)~ 最新阿里、腾讯、华为、字节跳动等大厂的薪资和职级对比 上面的表格不排除有很极端的收入情况,但至少能囊括一部分同职级的收入。这个表是“技术线”新入职员工的职级和薪资情况,非技术线(如产品、运营、…

pbootcms自动配图出图插件

pbootcms文章无图自动出图配图插件的优点 1、提高文章的可读性和吸引力:插入图片可以丰富文章的内容和形式,增强读者的阅读体验和吸引力,提高文章的点击率和转化率。 2、节省时间和精力:手动添加图片需要花费大量时间和精力去寻找…

【LeetCode: 1416. 恢复数组 | 暴力递归=>记忆化搜索=>动态规划 】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

【花雕学AI】超级提问模型大全!150个ChatGPT神奇示例,让你的聊天更有趣!

引言 你是否想要成为聊天高手,让你的对话更加有趣和深入?你是否想要掌握一些超级提问模型,让你的聊天更加有创意和挑战?你是否想要借助人工智能的力量,生成一些适合你的超级提问模型? 如果你的答案是肯定…

浅谈新能源电动汽与汽车传感器充电桩的影响

安科瑞 徐浩竣 江苏安科瑞电器制造有限公司 zx acrelxhj 摘要:随着我国能源战略发展以及低碳行动的实施,电动汽车已逐步广泛应用,而电动汽车的应用非常符合当今社会对环保意识的要求,以及有效节省化石燃料的消耗。由于其无污染…

Flutter+YesAPI 快速构建零运维的APP

前言 移动互联网经过多年的发展,已经进入一个成熟的阶段,几乎每个公司都有自己的移动应用程序或移动网站。随着5G技术的不断发展,也带来了更高效的数据传输速度和更稳定的网络连接,这使得更多的应用程序和服务能够在互联网上运行&…

NFT介绍及监管规则

什么是NFT NFT是Non-Fungible Token(非同质化代币)的缩写。 NFT是“Non-Fungible Token”的缩写,即非同质化代币。不同于FT(Fungible Token,同质化代币),每一个NFT都是独一无二且不可相互替代的…

cmake管理子程序,lib库和so库应用实践

cmake在管理大型项目时经常被用到,本文以简单程序演示来说明camke管理项目应用,其中包括主程序,子程序,so库程序,lib程序。 目录 1.程序目录结构 2.编译执行 3.清除临时文件 4.完整代码 1.程序目录结构 ├── bu…

【PWN刷题__ret2text】[BJDCTF 2020]babystack

新手上路~低速慢行~ 目录 前言 1. checksec 2. IDA 反汇编 3. payload编写 4. exp编写 5. pwntools用法 前言 作为pwn新手,尽可能在刷题中,记录、学习一些通用的知识点,因此wp是少不了的。 本题是一道简单的ret2text 1. checksec 没有…

6.2 龙格—库塔法

学习目标: 学习龙格-库塔法的具体明确的学习目标可以有以下几点: 理解龙格-库塔法的基本思想和原理:我们应该了解龙格-库塔法的数值求解思想和数值误差的概念,包括截断误差和稳定性等基本概念,并且要熟悉龙格-库塔法的…

大学生无线耳机怎么选?内行推荐四款高性价比蓝牙耳机

随着蓝牙耳机的使用频率越来越高,大学生成为了蓝牙耳机的主要用户群体之一。最近看到很多网友问,大学生无线耳机怎么选?针对这个问题,我来给大家推荐几款高性价比蓝牙耳机,一起来看看吧。 一、南卡小音舱Lite2蓝牙耳机…

MIMO-OFDM系统中信道估计的快速谐波搜索技术(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 目前,由OFDM技术与空时编码技术相融合而成的MIMO-OFDM技术已经引起了通信领域的广泛关注和研究.在无线通信系统中,MIMO-OFDM技…

11. 图的入门

11. 图的入门 11.1 图的实际应用: ​ 在现实生活中,有许多应用场景会包含很多点以及点点之间的连接,而这些应用场景我们都可以用即将要学习的图这种数据结构去解决。 地图: ​ 我们生活中经常使用的地图,基本上是由…

关于函数栈帧的创建与销毁和可变参数列表

目录 1. 深刻理解函数调用过程1.1 基本概念1.2 函数栈帧的创建于销毁1.2.1 栈帧创建1.2.2 栈帧销毁1.2.3 有趣的现象 2. 了解可变参数列表的使用与原理2.1 可变参数列表与函数栈帧的关系2.2 宏的工作过程2.3 宏的具体实现原理 1. 深刻理解函数调用过程 1.1 基本概念 关于函数…

VBA智慧办公9——图例控件教程

如图,利用VBA进行可视化交互界面的设计,在界面中我们用到了label,button,text,title等多个工具,在进行框图效果的逐一实现后可进行相应的操作和效果实现。 VBA(Visual Basic for Applications&a…