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

【西瓜书】剪枝与样本值处理——预剪枝、后剪枝、连续值、缺失值

目录

预剪枝

后剪枝

处理连续值

处理缺失值


剪枝(pruning)是决策树学习算法对付“过拟合”的主要手段。

  • 在决策树学习过程中,有时会造成决策树分枝过多,就可能造成过拟合,可通过主动去掉一些分支来降低过离合的风险。
  • 决策树剪枝的基本策略有“预剪枝”(prepruning)和“后剪枝”(postpruning)。

预剪枝

  • 预剪枝是指在决策树的生成过程中,对每个节点在划分前先进行估计,若当前节点的划分不能带来决策数泛化性能提升,则停止划分,并将当前节点标记为叶节点。
  • 后剪枝是先从训练集生成一颗完整的决策树,然后自底向上的对非叶节点进行考察,若将该节点对应的子树替换为叶节点,能带来决策树泛化性能提升,则将该子树替换为叶节点。
  • 那么如何判断决策树的泛化性能提升呢?可以使用验证集进行验证。
  • 一颗仅有一层划分的决策树,称为“决策树桩”(decision stumb)。
  • 预剪枝使得决策树的很多分支都不进行展开,这既降低了过拟合的风险,又显著减少了决策树的训练时间开销和测试时间开销。
  • 另一方面,有些分支的当前划分虽不能提升泛化性能,甚至可能导致泛化性能暂时下降,但是在其基础进行的后续划分却有可能导致性能显著提高。这给预剪枝决策树带来了欠拟合的风险。
  • 预剪枝的本质是一种“贪心”算法。

后剪枝

  • 后剪枝决策树通常比预减值决策树保留了更多的分支,一般情况下后剪纸决策树的欠拟合风险很小,泛化性能往往优于预剪纸的决策树。
  • 后剪枝的训练时间开销比未剪枝决策树和预剪枝决策树都要大很多。

处理连续值

  • 在处理分类时都是基于离散属性来生成决策树,使用离散值进行分类也比较符合人们的思维习惯。
  • 如果输入样本的属性是连续值,就需要用到连续属性离散化的技术。
  • 二分法(bi-partition)对连续属性进行处理的最简单的策略。这也是 C4.5决策树 算法中采用的机制。
  • 与离散属性不同,若当前节点划分属性为连续属性,该属性还可作为其后代节点的划分属性(离散属性在决策树上只出现一次)。

处理缺失值

  • 现实任务中常会遇到不完整样本,即样本的某些属性值缺失。
  • 如果在属性值缺失的时候丢弃该样本,则会造成样本变得很小,因此有必要考虑利用缺失属性值的训练样例来进行学习。
  • 缺失值的处理需要解决两个问题:
    • 问题1:如何在属性值缺失的情况下进行划分属性选择。
    • 问题2:给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分。
  • 对于问题1:按照属性来,
    • 令D~表示D中在属性a上没有缺失值的样本,
    • 定义ρ为无缺失值的样本比例,\rho =\frac{\sum_{x\epsilon \tilde{D}}^{}w_{x}}{\sum_{x\epsilon D}^{}w_{x}}
    • 定义pk~为无缺失值样本中第k类所占的比例,\tilde{p_{k}}=\frac{\sum_{x\epsilon \tilde{D_{k}}}^{}w_{x}}{\sum_{x\epsilon D}^{}w_{x}}
    • 定义rv~为无缺失值样本中在属性a上取值为a^v的样本所占的比例;\tilde{r_{v}}=\frac{\sum_{x\epsilon \tilde{D^{v}}}^{}w_{x}}{\sum_{x\epsilon D}^{}w_{x}}
    • 则信息增益为:Gain(D,a)=\rho \times Gain(\tilde{D},a)=\rho \times (End(\tilde{D})-\sum_{v=1}^{V}\tilde{r}_{v}Ent(\tilde{D}^v))
    • 其中End(\tilde{D})=-\sum_{k=1}^{|y|}\tilde{p}_klog_2\tilde{p}_k
  • 对于问题2:按照概率来,

    • 若样本x在划分属性a上的取值已知,则将x划入与其取值对应的子节点,且样本全值在子节点中保持为w_x

    • 若样本x在划分属性a上的取值未知,则将x同时划入所有的子节点,且样本权值与属性值a^v对应的子节点中调整为\tilde{r}_v\cdot w_x。也就是说,让同一个样本以不同的概率划入到不同的子节点中去。

  • C4.5算法中使用了上述解决方案。

【西瓜书】决策树-CSDN博客


http://www.kler.cn/a/410971.html

相关文章:

  • 【ArcGISPro】Sentinel-2数据处理
  • Pytorch使用手册-快速开始(专题一)
  • lua除法bug
  • 三种蓝牙架构实现方案
  • 什么是 SQL 注入
  • 网络安全学习77天(记录)
  • python深度学习机器学习编程序接单服务代码指导编写脚本调试爬虫
  • docker 通过Dockerfile自定义的镜像部署Springboot项目
  • 一个专为云原生环境设计的高性能分布式文件系统
  • C嘎嘎探索篇:栈与队列的交响:C++中的结构艺术
  • 华为鸿蒙内核成为HarmonyOS NEXT流畅安全新基座
  • QML学习 —— 34、视频媒体播放器(附源码)
  • 8K超高清相机+双光谱融合技术
  • 二代三代社保卡读卡器串口命令协议,适用于单片机等嵌入式系统使用
  • WordCloud参数的用法:
  • 【VRChat 全身动捕】VIVE 手柄改 tracker 定位器教程,低成本光学动捕解决方案(持续更新中2024.11.26)
  • docker如何安装mysql8
  • 香橙派--安装RKMPP、x264、libdrm、FFmpeg(支持rkmpp)以及opencv(支持带rkmpp的ffmpeg)(适用于RK3588平台)
  • C语言数据结构学习:循环队列
  • GreatSQL 运行时内存太高,超过90%怎么办
  • 带有悬浮窗功能的Android应用
  • 极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【三】
  • 第 35 章 - Go语言 容器化应用
  • 分布式查询处理优化之数据分片
  • 医院信息化与智能化系统(22)
  • 微信小程序 WXS 的概念与基本用法教程