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

决策树进阶学习笔记

一、经典决策树算法

1. ID3算法

        核心指标:以信息增益为特征选择标准。信息增益越大,使用该属性划分数据的“纯度提升”越明显,优先选择该属性作为划分节点。

        公式逻辑:信息增益 = 划分前的熵 - 划分后的条件熵。

        局限性:对可取值数目较多的属性存在偏好(例如“编号”这类唯一值属性,理论上信息增益最大,但无实际决策意义)。

        示例数据:基于7条“是否出去玩”的记录(特征包括天气、温度、湿度、是否多云),ID3会优先选择信息增益最大的特征作为根节点。

2. C4.5算法

        核心改进:针对ID3的偏好问题,引入信息增益率作为特征选择标准,避免受多取值属性的过度影响。

        公式:信息增益率 = 信息增益 ÷ 该属性自身的熵(自身熵可理解为属性取值的不确定性,取值越多,自身熵越大,从而平衡信息增益)。

        适用场景:解决ID3对多取值属性的偏好问题,更适合特征取值差异较大的数据集。

3. CART算法

        核心指标:使用基尼指数(Gini(D)) 衡量数据纯度,用于分类任务(CART也可用于回归,此处聚焦分类)。

        基尼指数定义:反映从数据集D中随机抽取两个样本,类别标记不一致的概率。公式为 Gini(D) = 1 - \sum_{k=1}^{n} p_k^2(p_k是第k类样本在D中的占比)。

        关键规律:p_k越大(数据越集中于某一类),Gini(D)越小,数据集纯度越高;反之则纯度越低。

        划分逻辑:选择使划分后基尼指数最小的特征及切分点,构建二叉决策树(CART树均为二叉树,每个节点仅分两个分支)。

二、连续值特征的处理

        核心思路:通过“离散化”将连续值转化为离散的二分类(二分法),具体步骤依赖贪婪算法。

    1.    排序:将连续特征的所有取值按从小到大排序。

    2.    确定分界点:若连续值有m个不同取值,可产生m-1个潜在分界点(相邻两个取值的中点)。例如特征“应税收入(Taxable Income)”取值排序后为[60K,70K,75K,85K,90K,95K,100K,120K,125K,220K],可产生9个分界点(如65K、72.5K等)。

    3.    选择最优分界点:计算每个分界点二分数据后的纯度指标(如信息增益、基尼指数),选择纯度最优的分界点作为最终切分标准(例如将“Taxable Income”划分为“≤97.5K”和“>97.5K”)。

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

1. 剪枝原因

决策树在训练时易因“完全拟合训练数据”导致过拟合(理论上可完美划分训练集,但对新数据泛化能力差),需通过剪枝简化树结构,提升泛化能力。

2. 预剪枝

        定义:边构建决策树边剪枝,在树的生长过程中提前停止分支,是更实用的剪枝方式。

        剪枝依据:通过设置约束条件限制树的生长,常见约束包括:

        限制树的最大深度(如最大深度设为5-20,避免树过深)。

        限制叶子节点的最少样本数(如叶子节点至少包含10个样本,否则停止分支)。

        限制特征的最小信息增益/基尼指数变化(若划分后纯度提升未达阈值,停止分支)。

        优点:计算成本低,可避免构建复杂的全树;缺点:可能因“提前停止”导致欠拟合(树的复杂度不足)。

3. 后剪枝

        定义:先构建完整的决策树,再从叶子节点向根节点反向剪枝,移除对泛化能力无帮助的分支。

        衡量标准:通过“损失函数”判断是否剪枝,公式为:最终损失 = 树的自身基尼系数值 + α×叶子节点数量(α为正则化参数)。

        α越大:正则化越强,更倾向于减少叶子节点数量(简化树结构),降低过拟合风险,但可能牺牲模型精度。

        α越小:更注重模型对训练数据的拟合效果,剪枝力度弱,过拟合风险较高。

        剪枝逻辑:对比“保留某分支”与“将该分支剪为叶子节点”的损失函数值,若剪枝后损失更小,则执行剪枝。

        示例:某分支“色泽=?”剪枝前验证集精度57.1%,剪枝后提升至71.4%,则选择剪枝;“纹理=?”剪枝前精度42.9%,剪枝后57.1%,同样选择剪枝。

        优点:泛化能力通常优于预剪枝,不易欠拟合;缺点:需先构建全树,计算成本较高。

四、决策树代码实现(基于Python sklearn)

1. 核心函数

DecisionTreeClassifier():sklearn中用于创建分类决策树模型的核心类。

2. 关键参数说明
参数 含义与取值 
criterion 纯度衡量标准:gini(默认,基尼指数)、entropy(信息熵) 
splitter 切分点选择方式:best(默认,在所有特征中找最优切分点)、random(在部分特征中随机找切分点,用于随机森林) 
max_features 划分时考虑的最大特征数:None(默认,使用所有特征)、log2(取log2(特征数))、sqrt(取根号下特征数)、整数N(指定N个特征) 
max_depth 树的最大深度:None(默认,不限制深度)、整数(推荐5-20,控制树的复杂度,避免过拟合) 

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

相关文章:

  • 文件包含的学习笔记
  • ExcelUtils实现 设置内容 插入行 复制行列格式
  • Day11 数据统计 图形报表
  • 打造数字化资产管理新范式——资产管理系统实战体验
  • DIC技术极端环境案例分享:35MPa水下高压釜拉伸测试
  • Unity 自用帧同步架构分享
  • Python递归下降解析器深度解析:从原理到工程实践
  • layui.formSelects自定义多选组件在layer.open中使用、获取、复现
  • 2025年十大工程项目管理软件
  • 如何使用AI大语言模型解决生活中的实际小事情?
  • 【机器学习深度学习】LMDeploy的分布式推理实现
  • Laravel分布式全链路追踪实战
  • OpenCV 图像边缘检测
  • 设计模式之装饰模式
  • 技术革新:再互动平台如何以全链路数字化重构防伪溯源生态
  • 泵站远程监控与自动化控制系统:智慧泵房设备的创新实践
  • RLHF的定义
  • 无人机延时模块技术难点解析
  • 数字安全隐形基石:随机数、熵源与DRBG核心解析与技术关联
  • Kubernetes 构建高可用、高性能 Redis 集群
  • 服务器硬件中的磁盘SSD与HDD性能区别,以及分别适用于什么业务?
  • 高性能、高实时、高安全:如何在飞凌嵌入式i.MX95xx核心板上同时实现?
  • C++ 循环:从入门到精通的深度解析
  • KubeBlocks for MSSQL 高可用实现
  • 云原生(Cloud Native)技术概述
  • 企业级大模型解决方案:架构、落地与代码实现​
  • LeetCode 分类刷题:34. 在排序数组中查找元素的第一个和最后一个位置
  • Unreal Engine APawn 与 ACharacter 比较
  • 开发避坑指南(31):Oracle 11g LISTAGG函数使用陷阱,缺失WITHIN子句解决方案
  • 如何优雅统计知识库文件个数与子集下不同文件夹文件个数