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

决策树算法:三大核心流程解析

        决策树分类树是一种监督学习算法,通过递归地将数据集划分为更纯的子集来构建树形结构。每个内部节点代表一个特征测试,分支代表测试结果,叶节点代表最终的分类结果。常用于解决分类问题,如垃圾邮件识别、决策分类树有三种算法,分别是ID3,C4.5,和CART.

决策树算法具体计算过程

🔍 案例数据集:银行贷款决策
年龄有工作有房信贷情况类别(是否贷款)
青年一般拒绝
青年拒绝
青年批准
青年一般批准
青年一般拒绝
中年一般拒绝
中年拒绝
中年批准
中年非常好批准
中年非常好批准
老年非常好批准
老年批准
老年批准
老年非常好批准
老年一般拒绝

🌳 一. ID3算法计算过程(基于信息熵)

步骤1:计算整体信息熵
  • 类别分布:批准(9),拒绝(6)
  • 整体信息熵:
    H(D) = -[P(批准)log₂P(批准) + P(拒绝)log₂P(拒绝)]= -[9/15 * log₂(9/15) + 6/15 * log₂(6/15)]= -[0.6 * log₂(0.6) + 0.4 * log₂(0.4)]= -[0.6*(-0.737) + 0.4*(-1.322)]= -[-0.442 - 0.529]= 0.971
步骤2:计算各特征的信息增益

​(1)按"年龄"分裂:​

  • 青年(5):批准(2),拒绝(3) → H(青年)= -[0.4log₂0.4 + 0.6log₂0.6]=0.971
  • 中年(5):批准(3),拒绝(2) → H(中年)= -[0.6log₂0.6 + 0.4log₂0.4]=0.971
  • 老年(5):批准(5),拒绝(0) → H(老年)=0
  • 年龄条件熵:
    H(D|年龄) = (5/15)*0.971 + (5/15)*0.971 + (5/15)*0 = 0.647
  • 年龄信息增益:
    Gain(年龄) = H(D) - H(D|年龄) = 0.971 - 0.647 = 0.324

​(2)按"有工作"分裂:​

  • 有工作(5):批准(5),拒绝(0) → H(有工作)=0
  • 无工作(10):批准(4),拒绝(6) → H(无工作)= -[0.4log₂0.4 + 0.6log₂0.6]=0.971
  • 有工作条件熵:
    H(D|有工作) = (5/15)*0 + (10/15)*0.971 = 0.647
  • 有工作信息增益:
    Gain(有工作) = 0.971 - 0.647 = 0.324

​(3)按"有房"分裂:​

  • 有房(6):批准(6),拒绝(0) → H(有房)=0
  • 无房(9):批准(3),拒绝(6) → H(无房)= -[1/3 log₂(1/3) + 2/3 log₂(2/3)]=0.918
  • 有房条件熵:
    H(D|有房) = (6/15)*0 + (9/15)*0.918 = 0.551
  • 有房信息增益:
    Gain(有房) = 0.971 - 0.551 = 0.420
步骤3:选择信息增益最大的特征
特征信息增益
年龄0.324
有工作0.324
有房0.420​ (最大)
信贷情况(需计算,但当前最大)

✅ ​根节点分裂:选择"有房"特征

 

 二 C4.5核心步骤:计算信息增益率

1. 计算整体信息熵(同ID3)
  • 批准(9),拒绝(6)
  • H(D) = 0.971(计算过程见ID3部分)
2. 计算各特征的信息增益(同ID3)
  • Gain(年龄) = 0.324
  • Gain(有工作) = 0.324
  • Gain(有房) = 0.420
  • Gain(信贷情况) = (待计算)
3. 计算"信贷情况"特征的信息增益

信贷情况有3个取值:一般/好/非常好

  • 一般​(5):拒绝(4),批准(1) →
    H(一般) = -[0.2×log₂0.2 + 0.8×log₂0.8] ≈ 0.722

  • ​(6):批准(5),拒绝(1) →
    H(好) = -[5/6×log₂(5/6) + 1/6×log₂(1/6)] ≈ 0.650

  • 非常好​(4):全部批准(4) → H(非常好) = 0

  • 条件熵:

    H(D|信贷) = (5/15)×0.722 + (6/15)×0.650 + (4/15)×0 ≈ 0.472
  • 信息增益:

    Gain(信贷) = H(D) - H(D|信贷) = 0.971 - 0.472 = 0.499
4. 计算各特征的分裂信息量(Split Information)

分裂信息量衡量特征取值的分布情况:

IV(A) = -Σ(|D_v|/|D|) × log₂(|D_v|/|D|)
  • 年龄的IV值​:

    IV(年龄) = -[5/15×log₂(5/15) + 5/15×log₂(5/15) + 5/15×log₂(5/15)]= -[0.333×(-1.585) × 3]≈ 1.585
  • 有工作的IV值​:

    IV(有工作) = -[5/15×log₂(5/15) + 10/15×log₂(10/15)]= -[0.333×(-1.585) + 0.667×(-0.585)]≈ 0.918
  • 有房的IV值​:

    IV(有房) = -[6/15×log₂(6/15) + 9/15×log₂(9/15)]= -[0.4×(-1.322) + 0.6×(-0.737)]≈ 0.971
  • 信贷情况的IV值​:

    IV(信贷) = -[5/15×log₂(5/15) + 6/15×log₂(6/15) + 4/15×log₂(4/15)]= -[0.333×(-1.585) + 0.4×(-1.322) + 0.267×(-1.907)]≈ 1.577
5. 计算信息增益率(Gain Ratio)
GainRatio(A) = Gain(A) / IV(A)
  • 年龄的增益率​:

    GainRatio(年龄) = 0.324 / 1.585 ≈ 0.204
  • 有工作的增益率​:

    GainRatio(有工作) = 0.324 / 0.918 ≈ 0.353
  • 有房的增益率​:

    GainRatio(有房) = 0.420 / 0.971 ≈ 0.433
  • 信贷情况的增益率​:

    GainRatio(信贷) = 0.499 / 1.577 ≈ 0.316
6. 选择根节点特征

比较各特征的增益率:

特征信息增益分裂信息量(IV)增益率排序
年龄0.3241.5850.2044
有工作0.3240.9180.3533
有房0.4200.9710.4331
信贷情况0.4991.5770.3162

✅ ​根节点分裂:选择增益率最大的特征"有房"​


🌳 三. CART算法计算过程(基于基尼指数)

步骤1:计算整体基尼指数
  • 批准概率 P(+) = 9/15 = 0.6
  • 拒绝概率 P(-) = 6/15 = 0.4
  • 基尼指数:
    Gini(D) = 1 - (0.6² + 0.4²) = 1 - (0.36 + 0.16) = 1 - 0.52 = 0.48
步骤2:计算各特征分裂后的加权基尼指数

​(1)按"有房"分裂(二分裂):​

  • 有房子集(6):全部批准 → Gini(有房)=1-(1²+0²)=0
  • 无房子集(9):批准(3),拒绝(6) →
    Gini(无房)=1-(1/3)²-(2/3)²=1-1/9-4/9=4/9≈0.444
  • 加权基尼指数:
    Gini_{split}(有房) = (6/15)*0 + (9/15)*(4/9) = 0.267

​(2)按"年龄"分裂(需处理多分类):​
CART自动处理多分类转为二叉树:

  1. 青年 vs {中年,老年}
  2. 中年 vs {青年,老年}
  3. 老年 vs {青年,中年}
  4. {青年,中年} vs 老年
  5. {青年,老年} vs 中年
  6. {中年,老年} vs 青年

以{青年} vs {非青年}为例:

  • 青年子集(5):批准(2),拒绝(3) →
    Gini(青年)=1-((2/5)²+(3/5)²)=1-0.16-0.36=0.48
  • 非青年子集(10):批准(7),拒绝(3) →
    Gini(非青年)=1-((7/10)²+(3/10)²)=1-0.49-0.09=0.42
  • 加权基尼:
    Gini_{split}(年龄) = (5/15)*0.48 + (10/15)*0.42 = 0.44

​(3)按"有工作"分裂:​

  • 有工作子集(5):全部批准 → Gini=0
  • 无工作子集(10):批准(4),拒绝(6) →
    Gini(无工作)=1-((4/10)²+(6/10)²)=1-0.16-0.36=0.48
  • 加权基尼:
    Gini_{split}(有工作) = (5/15)*0 + (10/15)*0.48 = 0.32
步骤3:选择最优分裂点

比较各特征的最优二分裂结果:

特征分裂方式加权基尼指数
有房有房/无房0.267
年龄{青年}/{非青年}0.44
有工作有工作/无工作0.32

✅ 有房特征基尼指数最小(0.267),选为根节点


🌟 关键差异总结

算法分裂标准树结构处理多分类方式计算复杂度
ID3信息增益多叉树单特征多分支中等
CART基尼指数二叉树自动二值化高(需评估所有二分裂可能)

实际应用中:

  • ID3/C4.5​ 更注重信息理论纯度
  • CART​ 更注重计算效率和不平衡数据处理

💡 实践建议:现代库(如scikit-learn)默认使用CART+基尼指数组合,因其速度最快且实际效果优秀。

http://www.xdnf.cn/news/17031.html

相关文章:

  • 详解Python标准库之并发执行
  • 【王阳明代数讲义】基本名词解释
  • 机器学习消融实验:方法论演进、跨领域应用与前沿趋势
  • 海康皓视通 对接测试和比较
  • (吃饭)质数时间
  • AIDL当Parcelable序列化的数据类通信时报“Class not found when unmarshalling“找不到该类时的解决方案
  • JVM 01 运行区域
  • Python Pandas.from_dummies函数解析与实战教程
  • ubuntu双系统设置默认启动系统
  • Windows本地使用dify搭建知识库+ollama+deepseek
  • Java单元测试和设计模式
  • winscp 连openwrt 返回127错误码
  • InfluxDB 与 Node.js 框架:Express 集成方案(一)
  • 【网络原理】HTTP协议(一)
  • Chisel芯片开发入门系列 -- 17. CPU芯片开发和解释7(5级流水线指令原理)
  • 【Flutter3.8x】flutter从入门到实战基础教程(八):公共state的集中管理机制
  • WordPress AI写作插件开发实战:从GPT集成到企业级部署
  • 【Java】不允许直接操作数据表中的数据,开发前台界面来实现对多个数据表的增删改查
  • 【LeetCode刷题指南】--二叉树的前序遍历,二叉树的中序遍历
  • 力扣-105.从前序与中序遍历序列构造二叉树
  • Makefile 从入门到精通:自动化构建的艺术
  • 【人工智能agent】--服务器部署PaddleX 的 印章文本识别模型
  • 详解Python标准库之互联网数据处理
  • 电脑手机热点方式通信(下)
  • 基于OAuth2与JWT的微服务API安全实战经验分享
  • 【云计算】云主机的亲和性策略(四):云主机组
  • Go语言中的闭包详解
  • 【读代码】 KAG项目:开源知识图谱自动构建与推理平台原理与实践
  • Spring框架深度学习实战
  • 深度学习核心:神经网络-激活函数 - 原理、实现及在医学影像领域的应用