当前位置: 首页 > news >正文

一起啃西瓜书(四)

一起啃西瓜书(四)

  • 前言
    • 基本流程
    • 信息增益
      • CART决策树
    • 剪枝处理
      • 预剪枝
      • 后剪枝
    • 连续与缺失
      • 连续值
      • 缺失
    • 多变量决策树

前言

本章内容为西瓜书第四章决策树,前面三章内容后期会补的
注释:图片来源为网络寻找的西瓜书图示,与周志华老师的西瓜书实体书一致,侵删

基本流程

决策树是基于树结构来进行决策的,这也是人类在面临决策问题时一种很自然的处理机制。
举一个例子,如果我们要对“这是好瓜吗?”这样的问题进行决策时,我们通常会进行一系列的判断或“子决策”:先要看看“它是什么颜色?”,如果是:”青绿色”,再看“他的根蒂是什么形态?”如果是“蜷缩”在判断“它敲起来是什么的声音?”最后,我们得出最终的决策:这是个好瓜
决策过程如下图
在这里插入图片描述
一棵决策树包含一个根节点、若干个内部结点和若干个叶结点,根节点包含了样本全集,其中叶节点对应于决策结果(根蒂蜷缩,敲声浊响),其他每个结点对应于一个属性测试(例如 根蒂=?),每个结点包含的样本集合根据属性测试的结果被划分到子节点中,根节点包含了样本全集。从根节点到每个叶节点的路径对应了一个判定测试序列。
决策树学习的目的是为了产生一颗泛化能力强,吃力未见示例能力强的决策树,基本流程如下
在这里插入图片描述

信息增益

划分数据集的之前之后信息发生的变化称为信息增益,知道如何计算信息增益,就可以计算每个特征值划分数据集获得的信息增益,获取信息增益最高的特征就是最好的选择。
信息熵表示信息的混乱程度,熵越大数据越混乱。分类的目的是为了使同一类别的数据尽可能“纯净”,因此追求尽量小的信息熵。
信息增益表示分类前后信息熵的差值。分类前信息熵是定值,分类后信息熵越小,信息增益越大。因此我们追求尽量大的信息增益值。

ent(D)表示未分类时数据D的信息熵:
在这里插入图片描述
信息熵越小,则样本集D的纯度越大
信息增益,如果经过某节点之后,我们得到的信息越纯粹,即信息熵越高,则信息增益越大
在这里插入图片描述
但是我们要考虑一个问题,比如我们有这么一个属性——“西瓜的编号”,由于他是唯一的,也就是经过编号这一个节点以后,数据就非常纯粹了,如果我们简简单单不加以处理进行计算的话,计算结果将会是,我们只需要一个编号结点就可以将西瓜分类了,很显然这个不是我们想要的,所以引入一个新概念“增益率”
在这里插入图片描述
其实就是Gain(D,a)除以一个参数,这个参数的值随着该属性的可能取值增加而增大(这个公式的图没找到原版的)
使用增益率进行评估就可以实现一种启发式的划分选择

CART决策树

西瓜书中只讨论了分类决策树,因此这里也只讨论分类模型
在此之前,我们先引入与一个 新的概念,基尼指数
在这里插入图片描述
在这里插入图片描述

基尼指数反映了从数据集中随机抽取两个样本,其标记类别不一样的概率,因此基尼指数越小,经过结点的数据越纯粹

剪枝处理

剪枝是为了防止过拟合

预剪枝

我们先对数据进行留出法分成两部分,在决策树生成的过程中进行剪枝,如果将中间结点(非叶子节点的父结点)作为决策树叶子结点的父结点,整体在测试集上精度提高了或者继续生长下去精度不变,则不继续生长
使用预剪枝会导致欠拟合

后剪枝

我们先对数据进行留出法分成两部分,先使用训练集生成一棵决策树,在使用测试集判断是否剪枝,后剪枝代价开销太大

连续与缺失

连续值

比如西瓜的密度,我们采用取中间值的方法,比如有17个数据,那就有16个中间值作为候选节点,把连续值离散化进行处理

缺失

缺失处理包含两个任务:选择如何划分、缺失值如何分类
问题一:
在这里插入图片描述
没找到单独的公式图片,这里用人话概述一下,就是Gain公式,中间乘一个系数,然后系数算法如图所示
问题二:
答案是缺少的全部分配进下一个结点,只不过携带权重值r*w,如上图所示计算即可

多变量决策树

实际上我们每个结点不是那简简单单的单一属性,而是多个属性的线性组合,这样组成的决策树就是多变量决策树
在这里插入图片描述

相关文章:

  • 贪婪算法(Huffman编码)
  • 在Windows使用VSCode搭建嵌入式Linux开发环境
  • 嵌入式C语言编程中经验教训总结(七)指针、指针数组和数组指针
  • 表哥月薪22k+,而我还在混日子……
  • 【饭谈】在学习测开网课之前,你的心脏需要武装一下
  • Jetson Agx Xavier平台ov5693 glass-to-glass 延时测试
  • C++ 命名类型转换
  • 【定制项目】【M15 消防安全宣传】【横屏版】主要模块:视频 + 音频 + 图标 + 问答游戏
  • 在 Linux 中使用 tcp 转储命令来分析网络
  • 结合viewBinding实现RecyclerView组件的滚动列表显示
  • 【C++】STL——stack和queue(万字详解)
  • Kunyu安装使用教程(linux)
  • 34岁本科男,做了5年功能测试想转行,除了进厂还能干什么?
  • 数据库--mysql(SQL语句)
  • 论文分享 | SpeechFormer: 利用语音信号的层次化特性提升Transformer在认知性语音信号处理领域中的性能
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • [译]如何构建服务器端web组件,为何要构建?
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • Android Studio:GIT提交项目到远程仓库
  • cookie和session
  • E-HPC支持多队列管理和自动伸缩
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • flask接收请求并推入栈
  • Javascript 原型链
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • react-native 安卓真机环境搭建
  • REST架构的思考
  • vue自定义指令实现v-tap插件
  • Vue组件定义
  • webpack+react项目初体验——记录我的webpack环境配置
  • 程序员该如何有效的找工作?
  • 使用 @font-face
  • 温故知新之javascript面向对象
  • 学习JavaScript数据结构与算法 — 树
  • 云大使推广中的常见热门问题
  • 怎么将电脑中的声音录制成WAV格式
  • 智能合约Solidity教程-事件和日志(一)
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ###C语言程序设计-----C语言学习(3)#
  • (day 12)JavaScript学习笔记(数组3)
  • (Matlab)使用竞争神经网络实现数据聚类
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .Net IE10 _doPostBack 未定义
  • .NET 设计模式初探
  • .NET成年了,然后呢?
  • .net反编译的九款神器
  • .NET关于 跳过SSL中遇到的问题
  • .net经典笔试题
  • .net连接MySQL的方法
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • @Builder用法