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

机器学习(决策树2)

一、决策树算法
  1. ID3 算法
    • 核心概念:使用信息增益选择划分属性,信息增益是某个属性带来的熵增,其值越大,使用该属性划分获得的 “纯度提升” 越大。
    • 缺点:对可取值数目较多的属性有所偏好,例如最优划分为 “编号” 这类属性。
    • 示例数据:包含 7 条记录,涉及天气、温度、湿度、是否多云及是否出去玩等属性,用于演示算法应用。
  2. C4.5 算法
    • 核心概念:采用信息增益率(信息增益 ÷ 自身熵)来选择划分属性,以改进 ID3 算法的不足。
    • 示例数据:与 ID3 算法使用相同的 7 条记录数据。
  3. CART 算法
    • 核心概念:通过基尼指数衡量数据集纯度,基尼指数 Gini (D) 反映从数据集 D 中随机抽取两个样本,其类别标记不一致的概率,p 越大,Gini (D) 越小,数据集纯度越高。
二、连续值处理
  • 方法:采用贪婪算法,先对连续值进行排序,然后确定可能的分界点进行二分,这一过程实质是 “离散化”。
  • 示例:对于 Taxable Income 的连续值 60、70、75、85、90、95、100、120、125、220,有 9 个可能的分界点,可分割为如 TaxIn<=80 和 TaxIn>80,或 TaxIn<=97.5 和 TaxIn>97.5 等情况。
三、决策树剪枝策略
  1. 剪枝原因:决策树过拟合风险大,理论上可完全分开数据,需通过剪枝避免过拟合。
  2. 预剪枝
    • 定义:边建立决策树边进行剪枝的操作,更实用。
    • 方式:可通过限制深度、叶子节点个数、叶子节点样本数、信息增益量等进行剪枝。
  3. 后剪枝
    • 定义:建立完决策树后进行剪枝操作。
    • 衡量标准:最终损失 = 自身的 GINI 系数值 +α× 叶子节点数量。
      • α 越大,越不易过拟合,但结果可能欠佳。
      • α 越小,更注重结果好坏,过拟合可能较严重。
    • 示例:原分支 “色泽 =?” 剪枝前验证集精度 57.1%,剪枝后 71.4%,决策为剪枝;原分支 “纹理 =?” 剪枝前 42.9%,剪枝后 57.1%,决策为剪枝。
四、决策树代码实现
  • 函数DecisionTreeClassifier()用于创建决策树模型。
  • 主要参数

参数说明
criterion可选择 gini(基尼系数)或者 entropy(信息熵)
splitter可选择 best(在所有特征中找最好的切分点)或者 random(在部分特征中找)
max_features可设为 None(所有)、log2、sqrt、N
max_depthint or None, optional (default=None),设置决策树的最大深度,深度越大越易过拟合,推荐 5-20 之间
五、课堂练习
  • 任务:使用决策树对泰坦尼克号幸存者进行预测。

关键问题

  1. 问题:ID3、C4.5、CART 三种决策树算法在划分属性选择上有何不同?
    答案:ID3 算法使用信息增益选择划分属性,信息增益越大,纯度提升越大,但偏好可取值多的属性;C4.5 算法采用信息增益率(信息增益 ÷ 自身熵)来选择,以改进 ID3 的不足;CART 算法则通过基尼指数衡量数据集纯度,基尼指数越小,数据集纯度越高,以此选择划分属性。
  2. 问题:决策树为何需要剪枝?预剪枝和后剪枝有何区别?
    答案:决策树过拟合风险很大,理论上可完全分开数据,剪枝是为了避免过拟合。预剪枝是边建立决策树边进行剪枝,更实用,可通过限制深度等方式实现;后剪枝是建立完决策树后进行剪枝,以最终损失(自身的 GINI 系数值 +α× 叶子节点数量)为衡量标准,α 大小影响过拟合和结果好坏。
  3. 问题:在决策树中,如何处理连续值属性?
    答案:处理连续值属性采用贪婪算法,首先对连续值进行排序,然后确定可能的分界点进行二分,这一过程实质是 “离散化”。例如对于 Taxable Income 的连续值,排序后可找到多个分界点,将其分割为不同的区间。
http://www.xdnf.cn/news/18174.html

相关文章:

  • MVVM开源项目
  • Netty处理粘包与拆包
  • vue使用vue-cropper实现图片裁剪之单图裁剪
  • 关于mybatis表关联查询和mybatis-Plus单表查询传入时间查询数据(走索引)
  • Linux Namespace 隔离的“暗面”——故障排查、认知误区与演进蓝图
  • CVPR 2025 | 具身智能 | HOLODECK:一句话召唤3D世界,智能体的“元宇宙练功房”来了
  • 【HTML】3D动态凯旋门
  • 通过C#上位机串口写入和读取浮点数到stm32的片内flash实战4(通过串口下发AD9833设置值并在上位机显示波形曲线)
  • “你不干有的是AI干”,提示词中的“情感化提示”
  • 如何在 Ubuntu Linux 上安装 RPM 软件包
  • 【SQL优化案例】统计信息缺失
  • Vercel v0 iOS版重磅发布:AI驱动的移动开发新篇章
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘paramiko’问题
  • C++入门自学Day14-- Stack和Queue的自实现(适配器)
  • Java高级面试实战:Spring Boot微服务与Redis缓存整合案例解析
  • “R语言+遥感”的水环境综合评价方法实践技术应用
  • Centos7物理安装 Redis8.2.0
  • 【GNSS定位原理及算法杂记6】​​​​​​PPP(精密单点定位)原理,RTK/PPK/PPP区别讨论
  • 【部署相关】DockerKuberbetes常用命令大全(速查+解释)
  • 孩子王披露半年报:多数据持续增长,全年预期增强
  • git仓库和分支的关系
  • Linux GPIO子系统中开漏模式软件仿真机制的深度分析
  • 【深度学习计算性能】06:多GPU的简洁实现
  • 树状数组/差分数组/线段树/莫队算法介绍
  • 政务窗口服务满意度调查:服务型政府建设赋能方案(北京市场调研)
  • 2025年12大AI测试自动化工具
  • 电子电气架构 --- 软件项目风险管理
  • 「内力探查术」:用 Instruments 勘破 SwiftUI 卡顿迷局
  • Android Coil 3拦截器Interceptor计算单次请求耗时,Kotlin
  • 软件测试-Selenium学习笔记