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

决策树剪枝及数据处理

一、核心决策树算法(3 类主流算法)

  1. 1. ID3 算法:用 “信息增益” 选属性

    ID3 是决策树的 “开山鼻祖” 之一,它的核心逻辑是 “选能让数据最‘纯’的属性”—— 这里的 “纯” 用 “信息增益” 衡量。
    简单说,“信息增益” 就是 “划分前的混乱度(熵)减去划分后的混乱度”,增益越大,说明用这个属性划分后,数据从 “杂乱无章” 到 “类别分明” 的提升越明显。
    比如 PPT 里的例子:用 “天气、温度、湿度、是否多云” 这 4 个属性,预测 “是否出去玩”。ID3 会计算每个属性的信息增益,选增益最大的那个先划分(比如先按 “天气” 分,再按 “温度” 分)。

    但 ID3 有个明显的缺点:偏爱 “取值多的属性”。比如如果数据里有 “编号” 这种每个样本都不同的属性,ID3 会觉得它的信息增益最大(毕竟每个编号对应一个样本,划分后完全 “纯”),但这显然没意义 —— 相当于用 “身份证号” 做决策,对新数据毫无泛化能力。

    2. C4.5 算法:用 “信息增益率” 补坑

    为了修复 ID3 的 bug,C4.5 算法横空出世。它在 “信息增益” 的基础上,加了一个 “属性自身的熵” 作为分母,得到 “信息增益率”。
    为什么这么做?因为取值多的属性,自身的熵通常更大,除以它之后,就能平衡对 “多取值属性” 的偏好。比如 “编号” 的信息增益高,但自身熵也极高,算出来的增益率反而可能很低,这样就不会被误选为划分属性了。

    PPT 里还是用 “是否出去玩” 的数据集,C4.5 会通过信息增益率,避开不合理的属性,选出更有实际意义的划分依据(比如优先选 “天气”,而不是 “编号”)。

    3. CART 算法:用 “基尼指数” 兼顾分类与连续值

    CART 算法更灵活,它既能做分类,也能做回归,这里我们先看分类场景。它用 “基尼指数” 衡量数据纯度:基尼指数越小,说明数据越纯(比如随机从数据里抽两个样本,类别不一样的概率越低)。

    最实用的是,CART 能处理 “连续值” 属性 —— 比如 PPT 里的 “应税收入”(125K、100K、70K…),它会用 “贪婪算法” 先给连续值排序,再找最优分界点(比如把 “应税收入” 分成 “≤97.5K” 和 “>97.5K”),本质就是把连续值 “离散化”,再按分类逻辑划分。这一点比 ID3 和 C4.5 更贴近真实数据(毕竟现实中很多特征是连续的,比如年龄、身高)。

二、决策树剪枝策略(解决过拟合)

剪枝原因
决策树理论上能完全分割数据,但易因 “过度贴合训练数据” 导致过拟合,需通过剪枝降低复杂度、提升泛化能力。

1. 预剪枝:边建边剪,高效实用

预剪枝的思路很直接:在构建决策树的过程中,就提前设定 “停止条件”,不让树长太 “胖”。
比如设定 “树的最大深度不超过 10”“叶子节点至少有 5 个样本才继续划分”“信息增益小于 0.1 就不划分”—— 这些条件能从源头限制树的复杂度,避免过拟合。
预剪枝的优点是 “高效”,不用等树建完再改;缺点是可能 “剪太狠”,导致欠拟合(树太简单,没学到足够的规律),所以参数需要反复调试。

2. 后剪枝:先建全树,再 “砍枝”

后剪枝则是 “先把树建完整,再回头看哪些分支没必要”。它的核心是 “计算损失”:
最终损失 = 分支自身的基尼系数(拟合效果) + α× 叶子节点数量(复杂度)
这里的 α 是 “平衡系数”:α 越大,越看重简化树(减少叶子节点),越能避免过拟合;α 越小,越看重拟合效果,可能保留更多分支。判断是否剪枝的关键是 “验证集精度”。
后剪枝的优点是 “效果更稳”,不容易欠拟合;缺点是 耗时

三、实践

参数名作用说明
criterion选择纯度衡量标准:gini(基尼指数)、entropy(信息熵)
splitter选择切分点方式:best(全特征找最优)、random(部分特征找,适合大数据)
max_features划分时考虑的最大特征数:None(用全部)、sqrt(根号下总特征数)、log2 等
max_depth树的最大深度:推荐 5-20,太深易过拟合,太浅易欠拟合
http://www.xdnf.cn/news/1328491.html

相关文章:

  • AI 药物发现:化学分子到机器学习数值特征的转化——打通“化学空间”与“模型空间”关键路径
  • 【Git 子模块与动态路由映射技术分析文档】
  • Matplotlib数据可视化实战:Matplotlib子图布局与管理入门
  • 疏老师-python训练营-Day50预训练模型+CBAM注意力
  • PCL+Spigot服务器+python进行MC编程(使用Trae进行AI编程)---可以生成彩虹
  • Hugging Face 核心组件介绍
  • 35岁对工作的一些感悟
  • Ansible 中的文件包含与导入机制
  • noetic版本/ubuntu20 通过moveit控制真实机械臂
  • 常见的对比学习的损失函数
  • DataAnalytics之Tool:Metabase的简介、安装和使用方法、案例应用之详细攻略
  • 数字ic后端设计从入门到精通14(含fusion compiler, tcl教学)半定制后端设计
  • plantsimulation知识点25.8.19 工件不在RGV中心怎么办?
  • c#联合halcon的基础教程(案例:亮度计算、角度计算和缺陷检测)(含halcon代码)
  • 力扣面试150(60/150)
  • 机器学习之决策树:从原理到实战(附泰坦尼克号预测任务)
  • Mac(七)右键新建文件的救世主 iRightMouse
  • 大数据MapReduce架构:分布式计算的经典范式
  • 20250819 强连通分量,边双总结
  • 从线性回归到神经网络到自注意力机制 —— 激活函数与参数的演进
  • 人工智能统一信息结构的挑战与前景
  • 比赛准备之环境配置
  • 进程间的通信1.(管道,信号)
  • LINUX 软件编程 -- 线程
  • 决策树(续)
  • LeetCode100-560和为K的子数组
  • 决策树1.1
  • 项目一系列-第5章 前后端快速开发
  • 项目管理.管理理念学习
  • react-quill-new富文本编辑器工具栏上传、粘贴截图、拖拽图片将base64改上传服务器再显示