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

决策树学习(2)

一、决策树概述

决策树是机器学习中一种常用的分类算法,通过对数据特征的逐步划分来构建树状模型,实现对数据类别的预测。本次学习主要围绕 ID3、C4.5、CART 三种经典决策树算法展开,同时涉及了连续值处理、剪枝策略及代码实现等内容。

二、经典决策树算法

(一)ID3 算法

  1. 核心思想:以信息增益作为划分属性的选择标准。

  2. 信息增益:某个属性带来的熵增,信息增益越大,使用该属性划分所获得的 “纯度提升” 越大。

  3. 缺点:对可取值数目较多的属性有所偏好,例如在包含 “编号” 这类属性的数据集中,可能会将 “编号” 选为最优划分属性,而这显然不合理。

  4. 示例数据: |ID | 天气 | 温度 | 湿度 | 是否多云 | 是否出去玩 | |---|---|---|---|---|---| |1 | 晴 | 高 | 高 | 是 | 是 | |2 | 阴 | 适中 | 高 | 是 | 否 | |3 | 雨 | 高 | 正常 | 否 | 否 | |4 | 雨 | 适中 | 正常 | 否 | 是 | |5 | 阴 | 高 | 高 | 是 | 是 | |6 | 晴 | 低 | 正常 | 否 | 是 | |7 | 阴 | 低 | 正常 | 是 | 是 |

(二)C4.5 算法

  1. 改进点:为解决 ID3 算法对多值属性的偏好问题,引入信息增益率作为划分标准。

  2. 信息增益率:信息增益 ÷ 自身熵。

  3. 示例数据:同 ID3 算法的示例数据,通过计算信息增益率来选择更合适的划分属性。

(三)CART 算法

  1. 划分标准:使用基尼指数。

  2. 基尼指数:反映了从数据集 D 中随机抽取两个样本,其类别标记不一致的概率。公式为\(Gini(D) = 1-\sum_{k=1}^{}P_k^2\)(其中\(P_k\)为各类别在数据集中的概率)。\(P_k\)越大,Gini (D) 越小,数据集 D 的纯度越高。

三、连续值处理

当遇到连续值属性时,可采用贪婪算法进行处理,步骤如下:

  1. 排序:将连续值进行排序。

  2. 确定分界点:若进行 “二分”,对于有 n 个不同值的连续属性,可能有 n-1 个分界点。

  3. 离散化:通过选择合适的分界点,将连续值进行离散化处理。例如,将 Taxable Income 属性的取值 60、70、75、85、90、95、100、120、125、220,可分割成 TaxIn<=80 和 TaxIn>80,或 TaxIn<=97.5 和 TaxIn>97.5 等。

四、决策树剪枝策略

(一)剪枝原因

决策树过拟合风险很大,理论上可以完全分得开数据,需要通过剪枝来提高模型的泛化能力。

(二)预剪枝

  1. 定义:边建立决策树边进行剪枝的操作,更具实用性。

  2. 剪枝方式:通过限制深度、叶子节点个数、叶子节点样本数、信息增益量等方式进行剪枝。

(三)后剪枝

  1. 定义:当建立完决策树后来进行剪枝操作。

  2. 衡量标准:最终损失 = 自身的 GINI 系数值 +α× 叶子节点数量。

    • α 越大,模型越不容易过拟合,但结果可能没那么好。

    • α 越小,更注重结果的好坏,但过拟合可能没那么重要。

  3. 示例:原分支 “色泽 =?” 验证集精度剪枝前为 57.1%,剪枝后为 71.4%,决策剪枝;原分支 “纹理 =?” 验证集精度剪枝前为 42.9%,剪枝后为 57.1%,决策剪枝。

五、决策树代码实现

使用DecisionTreeClassifier()创建决策树模型,主要参数如下:

参数

说明

criterion

可选 gini(基尼系数)或者 entropy(信息熵)

splitter

可选 best(在所有特征中找最好的切分点)或者 random(在部分特征中找切分点)

max_features

可选 None(所有特征)、log2、sqrt、N 等

max_depth

int 或 None,可选(默认 None),设置决策树的最大深度,深度越大越容易过拟合,推荐在 5-20 之间

http://www.dtcms.com/a/339881.html

相关文章:

  • almalinux9.6系统:k8s可选组件安装(1)
  • 数字ic后端设计从入门到精通14(含fusion compiler, tcl教学)半定制后端设计
  • 第三阶段数据库-2:数据库连接
  • [超表面论文快讯-200]PNAS-超表面辅助的多模态量子成像-南京大学祝世宁院士/新国立仇成伟院士团队
  • 警惕可变参数构造函数无限递归
  • Day13_【DataFrame数据组合join合并】【案例】
  • 让模型不再忽视少数类:MixUp、CutMix、Focal Loss三种技术解决数据不平衡问题
  • RabbitMQ:SpringAMQP Direct Exchange(直连型交换机)
  • RabbitMQ:SpringAMQP 入门案例
  • Flink on Native K8S安装部署
  • 3.Kotlin 集合 Set 所有方法
  • es9.0.1语义检索简单示例
  • 颠覆性进化:OpenAI正式发布GPT-5,AI大模型进入“超级智能”时代
  • InnoDB为什么使用B+树实现索引?
  • 神经网络拆解:用Excel模拟手写数字识别
  • Flume学习笔记
  • OR+DBLINK的关联SQL优化思路
  • Transformer中的编码器和解码器是什么?
  • LLMs之RL之GSPO:《Group Sequence Policy Optimization》翻译与解读
  • 高校数字化转型实战:破解数据孤岛、构建智能指标体系与AI落地路径
  • 数据清理后续
  • 低功耗模式
  • Java配置文件
  • Consul- acl机制!
  • 01-Docker-简介、安装与使用
  • Linux学习-通信(信号,共享内存)
  • C++实现教务管理系统,文件操作账户密码登录(附源码)
  • gitlab、jenkins等应用集成ldap
  • AI学习之DeepSeek本地化部署
  • 数据结构-栈和队列