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

决策树算法详解

一、引言

决策树是机器学习中一种常用的分类算法,其核心思想是通过对数据特征的逐步划分,构建一棵类似树状的决策模型,从而实现对数据类别的预测。本文将详细介绍决策树的几种主要算法(ID3、C4.5、CART)、连续值处理方法、剪枝策略以及代码实现相关内容。

二、决策树主要算法

(一)ID3 算法

ID3 算法以信息增益作为划分属性的选择依据。信息增益指的是某个属性带来的熵增,信息增益越大,意味着使用该属性进行划分所获得的 “纯度提升” 越大。

不过,ID3 算法存在一定局限性,其信息增益准则对可取值数目较多的属性有所偏好,例如在包含 “编号” 这类属性的数据集中,可能会将 “编号” 选为最优划分属性,而这在实际应用中往往没有意义。

如下表是一个用于判断是否出去玩的数据集,ID3 算法会基于各属性的信息增益来决定划分顺序:

ID天气温度湿度是否多云是否出去玩
1
2适中
3正常
4适中正常
5
6正常
7正常

(二)C4.5 算法

为了改进 ID3 算法对可取值数目较多的属性的偏好问题,C4.5 算法引入了信息增益率。信息增益率的计算方式为信息增益除以该属性自身的熵。

同样针对上述判断是否出去玩的数据集,C4.5 算法会通过计算信息增益率来选择更合适的划分属性,减少了对多取值属性的偏向。

(三)CART 算法

CART 算法使用基尼指数来衡量数据集的纯度。基尼指数 Gini (D) 反映了从数据集 D 中随机抽取两个样本,其类别标记不一致的概率。计算公式为\(Gini(D) = 1-\sum_{k=1}^{}P_k^2\),其中\(P_k\)是数据集 D 中第 k 类样本所占的比例。\(P_k\)越大,Gini (D) 越小,数据集 D 的纯度越高。

三、连续值处理方法

在实际数据中,经常会遇到连续值特征,对于连续值的处理,通常采用贪婪算法来选取合适的分界点,具体步骤如下:

  1. 对连续值进行排序;
  2. 考虑所有可能的二分分界点,例如对于排序后的 60、70、75、85、90、95、100、120、125、220,可能有 9 个分界点;
  3. 选择最优的分界点进行划分,这一过程实际上就是 “离散化” 过程。如可以将 TaxIn 分割成 TaxIn<=80 和 TaxIn>80,或者 TaxIn<=97.5 和 TaxIn>97.5 等。

四、决策树剪枝策略

由于决策树过拟合风险很大,理论上可以完全分得开数据,因此需要进行剪枝操作。剪枝策略主要有预剪枝和后剪枝两种。

(一)预剪枝

预剪枝是边建立决策树边进行剪枝的操作,更加实用。其主要通过限制一些参数来实现剪枝,如限制树的深度、叶子节点个数、叶子节点样本数、信息增益量等。

(二)后剪枝

后剪枝是当建立完决策树后再进行剪枝操作。其衡量标准为:最终损失 = 自身的 GINI 系数值 +α× 叶子节点数量。其中,α 的大小会影响剪枝效果:

α 越大,越不容易过拟合,但结果可能没那么好;

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

例如在对瓜的好坏进行判断的决策树中,针对 “色泽 =?” 的分支,剪枝前验证集精度为 57.1%,剪枝后为 71.4%,因此选择剪枝;针对 “纹理 =?” 的分支,剪枝前验证集精度为 42.9%,剪枝后为 57.1%,也选择剪枝。

五、决策树代码实现

在 Python 中,可以使用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/339586.html

相关文章:

  • Orange的运维学习日记--47.Ansible进阶之异步处理
  • ESP32应用——HTTP client(ESP-IDF框架)
  • STM32之MCU和GPIO
  • AT_abc397_f [ABC397F] Variety Split Hard
  • 高速传输的关键:8B/10B编码学习记录
  • 应用控制技术与内容审计技术
  • 系统架构设计师-操作系统-避免死锁最小资源数原理模拟题
  • 寻找旋转排序数组中的最小值
  • 黄金本周想法
  • 给类或实例打上标识即类的元数据标签方便程序在运行时对其进行分类、识别、筛选
  • 32K上下文开源语音理解、40分钟深度交互——Voxtral-Small-24B-2507本地部署教程
  • GCC编译输出中text,data,bss和dec的含义
  • 构建自主企业:AgenticOps 的技术蓝图
  • 基于 STM32 单片机的远程老人监测系统设计
  • 科大讯飞语音服务之:BNF文件
  • 基于用户画像的个性化匹配模型
  • 【Proteus仿真】【51单片机】基于51单片机自动售货机12864屏幕
  • 这是关于Oracle碎片的文章
  • 空间智能赋能低空经济建设
  • 录音转文字:怎么快速精转提取重点?
  • 【弦乐教程】四 / 五部和声铺底写作指南 —— 从声部配置到禁忌规避
  • 8.19笔记
  • 训练数据转 LMDB 格式:必要性解析与核心优势全指南
  • 假设检验的原理
  • PDR与RSSI融合定位入门:从原理到实践
  • 如何用Prometheus和FastAPI打造任务监控的“火眼金睛”?
  • WSL虚拟机(我的是ubuntu20.04)将系统文件转移到E盘
  • 前端面试核心技术30问
  • 35岁对工作的一些感悟
  • C++常见面试题-6.算法