决策树8.19

决策树算法概述

  • 介绍了三种决策树算法:ID3、C4.5、CART。
    • ID3算法:通过信息增益评估特征选择,信息增益越大,特征划分效果越好。
    • C4.5算法:引入信息增益率(信息增益除以自身熵),缓解ID3对稀疏矩阵的偏好问题。
    • CART算法:基于基尼系数评估特征,基尼系数越小,纯度越高,适用于连续值和分类问题。

连续值处理

  • 连续值可通过设定阈值转换为分类问题(如大于/小于某值),类似逻辑回归的思想。
  • 示例:成绩阈值设为60分,将回归问题转换为分类问题(及格/不及格)。

决策树剪枝策略

  • 预剪枝:边构建树边剪枝,通过限制深度、叶子节点数、信息增益量等防止过拟合。
  • 后剪枝:先完整构建树,再通过损失函数(如基尼系数+叶子节点数×α)剪枝,α为可调参数,控制剪枝强度。

过拟合与泛化能力

  • 决策树易过拟合,需通过剪枝平衡模型复杂度。
  • 泛化能力指模型适应新数据的能力,决策树泛化能力较弱,需结合业务场景调整。

代码实现与参数

  • 使用基尼系数或信息熵作为分裂标准。
  • 特征选择策略:best(全局最优切分点)或random(随机子集最优切分点)。

讨论与答疑

  • 解释了稀疏矩阵下ID3算法的局限性及C4.5的改进。
  • 强调α(剪枝参数)需根据实际数据调整,通常取适中值以平衡过拟合与准确率。

随机森林与决策树铺垫

  • 讨论随机森林中寻找最佳切分点的重要性,强调若使用相同数据集和切分点会导致决策树完全相同,失去集成学习意义。
  • 关键参数包括:最大特征数(参考特征数量)、最大深度(预剪枝策略一致)。

泰坦尼克号数据集预测

  • 数据集内容:乘客ID、年龄、性别、存活标签(1为幸存,0为死亡)。
  • 数据预处理:
    • 删除无关列(如姓名、票号)及缺失值过多的列(如船舱号)。
    • 填充年龄缺失值(均值填充),删除港口缺失行(仅2条)。
    • 分类变量(如性别、港口)转换为数值型(如性别:0/1,港口:0/1/2)。

模型训练与评估

  • 数据切分:训练集70%、测试集30%,分离特征与标签。
  • 决策树分类器:
    • 初始准确率73.4%,十折交叉验证略高(因数据重复使用导致虚高)。
    • 网格搜索法优化超参数(最大深度、切分策略、最小样本数等),最优参数组合:
      • 最大深度=6、信息增益切分、最小混乱度下降=0、最小叶子样本数=5。
    • 最终模型准确率82%,存在过拟合(训练集91% vs 测试集82%)。
复制代码
## **关键概念与注意事项**

* **过拟合处理**:通过预剪枝(限制深度)或后剪枝调整。
* **网格搜索法**:替代多重循环,高效遍历超参数组合。
* **鲁棒性**:Python因封装函数多、调用便捷,适合快速开发。
* **离散特征处理**:稀疏特征(如姓名)需删除或转换,避免干扰模型。
复制代码
## **代码实现要点**

* 使用`pandas`处理数据,`sklearn`调用决策树分类器。
* 绘图展示深度与准确率关系,验证过拟合现象。
* 强调特征工程重要性(如性别、年龄对存活率的影响)。

总结:

文档围绕决策树算法 展开,介绍了 ID3、C4.5、CART 三种算法,ID3 用信息增益 选划分属性,却偏好可取值多的属性;C4.5 采用信息增益率 (信息增益 ÷ 自身熵)改进;CART 以基尼指数衡量数据集纯度。还涉及连续值处理(用贪婪算法离散化)、剪枝策略(预剪枝和后剪枝,预剪枝边建边剪,后剪枝基于损失函数等衡量)、代码实现参数及课堂练习。

相关推荐
山间小僧1 小时前
「AI学习笔记」RNN
机器学习·aigc·ai编程
W23035765733 小时前
经典算法:最长上升子序列(LIS)深度解析 C++ 实现
开发语言·c++·算法
minji...3 小时前
Linux 线程同步与互斥(三) 生产者消费者模型,基于阻塞队列的生产者消费者模型的代码实现
linux·运维·服务器·开发语言·网络·c++·算法
语戚4 小时前
力扣 968. 监控二叉树 —— 贪心 & 树形 DP 双解法递归 + 非递归全解(Java 实现)
java·算法·leetcode·贪心算法·动态规划·力扣·
skywalker_114 小时前
力扣hot100-7(接雨水),8(无重复字符的最长子串)
算法·leetcode·职场和发展
bIo7lyA8v6 小时前
算法稳定性分析中的输入扰动建模的技术9
算法
CoderCodingNo6 小时前
【GESP】C++三级真题 luogu-B4499, [GESP202603 三级] 二进制回文串
数据结构·c++·算法
sinat_286945196 小时前
AI Coding 时代的 TDD:从理念到工程落地
人工智能·深度学习·算法·tdd
炽烈小老头6 小时前
【 每天学习一点算法 2026/04/12】x 的平方根
学习·算法