机器学习——决策树(Decision Trees)

2023-11-16

决策树

决策树是机器学习中一种最为常见的算法。顾名思义,决策树是基于树结构来进行决策的,这恰是人类在面对决策问题时一种很自然的处理机制。决策树的生成算法可以说是信息论的一种应用,但它其实只用到了信息论中的一小部分思想。因此对信息论有个基础性的理解时很有必要的。

基本原理

1、信息论

1.1 信息论简介

信息论创始人克劳德·埃尔伍德·香农被公认为是二十世纪最聪明的人之一。他在1948年发表的划时代的论文——“通讯的数学原理”奠定了现代信息论的基础。
信息论主要内容可类比语言来阐述,通常具有以下两个重要特点。

  • 最常用的词汇(如:“的”、“好”、“行”)应该要比相对而言不太常用的词(如“自行车”、“宇宙”、“地球”)更短一些。
  • 如果句子的某一部分被漏听或者由于噪声干扰(比如身处闹市)而被误听,听者应该仍可以抓住句子的大概意思。该特点也被称为“鲁棒性(Robustness)”。

需要注意的一点是,信息论不会考虑一段消息的重要性或内在意义,比如像“救命”这样的话显然比“你好”这样的话更重要也更有意义,而信息论只会关注信息量和可读性方面的问题。
既然关注的是信息量,就需要定义一种信息量的度量方法。决策树生成算法背后的思想正是利用该度量方法衡量一种数据划分的优劣,从而生成一个“判定序列”。具体而言,它会不断寻找最优的数据划分,使得在该划分下获得的信息量最大。这也正是决策树的精髓所在。

1.2 不确定性

在决策树的生成中,获得信息量的度量方法是从反方向来定义的:若一种划分使得“不确定性”减少的越多,即意味着该划分获取的信息信息就越多。至此,关键问题就在于如何度量数据的不确定性(或说不纯度Impure)。常见的信息量度量标准有两个:信息熵(Entropy)和基尼系数(Gini index)。

1.2.1 信息熵

信息熵基本公式为:
在这里插入图片描述
在实际使用中经常采用经验熵来估计信息熵(其思想也就是“频率估计概率”):
在这里插入图片描述
上式假设随机变量 y y y的取值空间为 c 1 , c 2 , … , c k {c_1,c_2,…,c_k} c1,c2,,ck p k p_k pk表示 y y y
c k c_k ck的概率: p k = p ( y = c k ) p_k=p(y=c_k) pk=p(y=ck) ∣ C k ∣ |C_k | Ck代表随机变量 y y y中类别为 c k c_k ck的个数, ∣ D ∣ |D| D代表 D D D的总样本个数。
一般而言,公式中对数的底会取为2,此时信息熵H(y)的单位叫做比特(bit);如果把底数取为e(即取自然对数)的话, H ( y ) H(y) H(y)的单位就叫做纳特(nat)
那么上述公式是如何来度量不确定性的?可以证明当以下条件成立时:
在这里插入图片描述
H ( y ) H(y) H(y)达到最大值 − l o g 1 / K -log 1/K log1/K、亦即 l o g K logK logK。由于 p k = ( y = c k ) p_k=(y=c_k) pk=(y=ck),上式意味着随机变量 y y y取每一个类的概率是相同的,亦即 y y y完全没有规律可循,若像预测它的取值只能靠运气。而我们的目的是让y的不确定性减小、亦即让 y y y变得有规律可循,以方便我们预测。严格来说,就是 y y y取某个类的概率特别大,取其他类的概率特别小。极端的例子自然就是存在某个 k ∗ k^* k,使得 p ( y = c ( k ∗ ) ) = 1 p(y=c_{(k^* )} )=1 p(y=c(k))=1 p ( y = c k ) = 0 p(y=c_k )=0 p(y=ck)=0, ∀ k ≠ k ∗ ∀k≠k^* k=k,亦即 y y y生成的样本总属于 c ( k ∗ ) c_(k^* ) c(k)类。带入 H ( y ) H(y) H(y)的定义式,可以发现此时 H ( y ) = 0 H(y)=0 H(y)=0,亦即 y y y生成的样本没有不确定性。
接下来举个二分类的例子,加深一下对于信息熵的理解。即 K = 2 K=2 K=2时。不妨先假设 y y y只取0、1二值,再设:
在这里插入图片描述
那么此时的信息熵:
在这里插入图片描述
由此可以得到 H ( y ) H(y) H(y) p p p变化的函数曲线如下图所示(这里对数取底数为2)。
在这里插入图片描述
该图说明:随着这两类样本的分离的难易程度( p p p 1 − p 1-p 1p越接近越不容易分离,亦即 p = 0.5 p=0.5 p=0.5 H ( y ) H(y) H(y)达到最大),信息熵 H ( y ) H(y) H(y)呈现先增加后减少的变化趋势。
以上的叙述说明, y y y越乱意味着 H ( y ) H(y) H(y)越大, y y y越有规律意味着 H ( y ) H(y) H(y)越小,亦即 H ( y ) H(y) H(y)确实是可以作为不确定性的度量标准,从而可以作为信息的度量方法。

1.2.2 基尼系数

基尼系数基本公式为:
在这里插入图片描述
在实际使用中经常采用经验基尼系数来进行估计:
在这里插入图片描述
与信息熵类型,同样可以证明,当
在这里插入图片描述
是, G i n i ( y ) Gini(y) Gini(y)取得最大值 1 − 1 / K 1-1/K 11/K;当存在 k ∗ k^* k使得 k ∗ = 1 k^*=1 k=1 G i n i ( y ) = 0 Gini(y)=0 Gini(y)=0
这里再次以上述二分类为例子,即当 K = 2 K=2 K=2时可以导出:
加粗样式
此时 G i n i ( y ) Gini(y) Gini(y) p p p变化的函数曲线如下图所示。
在这里插入图片描述
同理,基尼系数也可以作为信息的度量方法。

1.2.3 信息增益

在定义好不确定性的度量标准后,我们便把问题转向了如何来获取“信息量”的大小。为加深直观印象,先假设数据集 D = ( x 1 , y 1 ) , … , ( x n , y n ) D={(x_1,y_1 ),…,(x_n,y_n)} D=(x1,y1),,(xn,yn),其中 x i = ( x i 1 , … x i n ) x_i=(x_i1,…x_in) xi=(xi1,xin)是描述 x i x_i xi n n n维特征。此时以 x i x_i xi的第 m ( m < n ) m(m<n) m(m<n)个特征 x i m x_{im} xim为例,那么所谓的信息增益,反映的就是特性 x i m x_{im} xim所能带来的关于 y i y_i yi的“信息量”大小。
可以引入条件熵 H ( y │ A ) H(y│A) H(yA)的概念来定义信息增益。所谓条件熵,就是在 x i x_i xi m m m个特征 x i m x_{im} xim的不同取值限制下的各个部分的不确定性以取值本身的概率加权求和的计算结果。(可以这么理解,假设 Y Y Y的某个特征 A A A m m m个取值,即 A = a 1 , … a m A={a_1,…a_m } A=a1,am,依次用这些特征对 y y y限制,分别计算被其限制的 y y y的信息熵,再把这些信息熵根据限制特征本身的概率加权求和,即得到条件熵)
我们先认可该结论:条件熵 H ( y │ A ) H(y│A) H(yA)越小,就意味着 y y y A A A限制后的总的不确定性越小,从容决策的结果更加有可信度。
条件熵的数学定义如下:
在这里插入图片描述
其中
在这里插入图片描述
同样用经验条件熵来估计条件熵:
在这里插入图片描述
从条件熵出发,我们先定义互信息(

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器学习——决策树(Decision Trees) 的相关文章

随机推荐

  • 共识算法-PBFT

    简介 1 PBFT简介 BFT Byzantine Fault Tolerance 是区块链共识算法中需要解决的一个核心问题 例如 公有链网络中 比特币和以太访中用的是POW EOS用的是DPOS PBFT一般用于联盟链场景中 它是共识节点
  • Vivado时序约束(转载)

    Vivado时序约束 本文主要介绍如何在Vivado设计套件中进行时序约束 原文出自Xilinx中文社区 Timing Constraints in Vivado UCF to XDC Vivado软件相比于ISE的一大转变就是约束文件 I
  • vue3 父子组件传参

    父向子传参 父组件
  • bootstrap table复选框选多页勾选

    bootstrap table复选框选多页勾选 在项目中发现 bootstrap table的复选框选中后 翻页操作会导致上一页选中的丢失 api中的 bootstrapTable getSelections 只能拿到当前页的复选框 js
  • 正则表达式大全

    1 匹配中文 u4e00 u9fa5 2 英文字母 a zA Z 3 数字 0 9 4 匹配中文 英文字母和数字及下划线 u4e00 u9fa5 a zA Z0 9 同时判断输入长度 u4e00 u9fa5 a zA Z0 9 4 10 5
  • (Java)leetcode-236 Lowest Common Ancestor of a Binary Tree(二叉树的最近公共祖先)

    题目描述 给定一个二叉树 找到该树中两个指定节点的最近公共祖先 百度百科中最近公共祖先的定义为 对于有根树 T 的两个结点 p q 最近公共祖先表示为一个结点 x 满足 x 是 p q 的祖先且 x 的深度尽可能大 一个节点也可以是它自己的
  • MTK多国语言相关经验总结

    MTK多国语言相关经验总结 一 移植多国语言移植多国语言主要牵涉到对mmi features h 整个工程的宏控定义文件 fontres c 字体资源文件 的修改 并添加相应的字库文件 1 语言宏控的修改在mmi features h文件中
  • 使用C#语言,基于OpenCvSharp 开发摄像头后台,移动物体位置识别 (一)

    刚刚入门OpenCvSharp 也是小白一枚 教程很少 慢慢摸索 边学边记录 文末附链接 效果 要求 Visual Studio 2017 摄像头x1 准备工作 新建一个 Net Framework 控制台应用 右击解决方案 gt 管理解决
  • 京城游戏人-Day13: 获取被点击的 Button 以及其上的文字内容

    京城游戏人 Day13 获取被点击的 Button 以及其上的文字内容 作者 大锐哥 地址 http blog csdn net prevention 获取被点击的 button var button UnityEngine EventSy
  • Centos + docker,Ubuntu + docker介绍安装及详细使用

    docker笔记 常用命令 设置docker开机自启 sudo chkconfig docker on 查所有镜像 docker images 删除某个镜像 docker rmi CONTAINER ID 容器ID 删除所有镜像 docke
  • Linux命令大全!

    系统信息 arch 显示机器的处理器架构 1 uname m 显示机器的处理器架构 2 uname r 显示正在使用的内核版本 dmidecode q 显示硬件系统部件 SMBIOS DMI hdparm i dev hda 罗列一个磁盘的
  • Grid 布局实现九宫格图片动画

    前言 Grid 布局实现九宫格 background position设置背景图像起始位置 速速来Get吧 文末分享源代码 记得点赞 关注 收藏 1 实现效果 2 实现步骤 定义css变量 九宫格中每个宫格的长 宽为w 宫格之间的间距为ga
  • STL容器的线程安全

    众所周知 STL容器不是线程安全的 对于vector 即使写方 生产者 是单线程写入 但是并发读的时候 由于潜在的内存重新申请和对象复制问题 会导致读方 消费者 的迭代器失效 实际表现也就是招致了core dump 另外一种情况 如果是多个
  • firefox os_如何在电视上测试Firefox OS应用

    firefox os One of my responsibilities in my new role in Partner Engineering at Mozilla is testing HTML5 powered apps and
  • 解决git中出现的“bash syntax error near unexpected token ’(‘”错误

    今天来分享一篇关于我在git使用过程中出现的一个错误 错误信息 bash syntax error near unexpected token 翻译过来就是提示我在 这里有错误 而这个错误是我在使用git commit提交时候产生的 我当时
  • 4. Docker 构建镜像

    Docker 构建镜像 docker制作镜像通常是通过两种方式来实现的 第一种是通过容器的 commit 第二种是通过 Buildfile来实现的 docker commit 打包镜像 容器在运行过程中我们难免会做一些修改 比如运行的mys
  • 程序框架---缩进(Python)

    缩进 类定义 函数定义 选择结构 循环结构 with块 行尾的冒号表示缩进的开始 python程序是依靠代码块的缩进来体现代码之间的逻辑关系的 缩进结束就表示一个代码块结束了 同一级别代码块的缩进量必须相同 一般而言 以4个空格或一个TAB
  • OLED透明屏:在广告领域中的应用,为品牌注入更强的视觉冲击

    OLED透明屏作为一项引人注目的技术创新 其独特的透明度和高清晰度为各行各业带来了全新的展示和创意空间 本文将详细介绍其透明度 高对比度 超薄柔性设计以及强大的颜色表现力 并探讨其在零售 汽车和建筑等领域的应用前景 一 透明度 开启全新的透
  • 聊透spring @Configuration配置类

    本章节我们来探索Spring中一个常用的注解 Configuration 我们先来了解一下该注解的作用是 用来定义当前类为配置类 那啥是配置类啊 有啥用啊 这个我们得结合实际使用场景来说 通常情况下 加了 Configuration的配置类
  • 机器学习——决策树(Decision Trees)

    决策树 决策树是机器学习中一种最为常见的算法 顾名思义 决策树是基于树结构来进行决策的 这恰是人类在面对决策问题时一种很自然的处理机制 决策树的生成算法可以说是信息论的一种应用 但它其实只用到了信息论中的一小部分思想 因此对信息论有个基础性