【机器学习基础】机器学习入门核心算法:决策树(Decision Tree)

article/2025/6/18 3:08:03

在这里插入图片描述

机器学习入门核心算法:决策树(Decision Tree)

  • 一、算法逻辑
      • 1.1 基本概念
      • 1.2 算法流程
  • 二、算法原理与数学推导
      • 2.1 特征选择指标
        • 信息熵(ID3算法)
        • 信息增益(Information Gain)
        • 信息增益率(C4.5算法)
        • 基尼系数(CART算法)
      • 2.2 决策树生成算法
      • 2.3 剪枝处理
        • 预剪枝(Pre-pruning)
        • 后剪枝(Post-pruning)
  • 三、模型评估
      • 3.1 评估指标
      • 3.2 学习曲线分析
  • 四、应用案例
      • 4.1 鸢尾花分类
      • 4.2 金融风控评分卡
  • 五、经典面试题
      • 问题1:ID3、C4.5、CART的区别?
      • 问题2:如何处理连续特征?
      • 问题3:决策树的优缺点?
  • 六、高级优化技术
      • 6.1 多变量决策树
      • 6.2 增量学习
      • 6.3 异构决策树
  • 七、最佳实践指南
      • 7.1 参数调优建议
      • 7.2 特征处理技巧
  • 总结与展望

一、算法逻辑

1.1 基本概念

决策树是一种树形结构监督学习算法,通过递归地将特征空间划分为互不重叠的区域来完成分类或回归任务。核心组成元素:

  • 根节点:包含全体数据的起始节点
  • 内部节点:表示特征判断条件的分支节点
  • 叶节点:存放最终决策结果的终端节点

关键特点

  1. 天然支持可解释性(白盒模型)
  2. 可处理数值型和类别型数据
  3. 通过树深度控制模型复杂度

1.2 算法流程

构建决策树的递归过程

  1. 选择当前最优划分特征
  2. 根据特征取值分割数据集
  3. 对每个子集重复上述过程直到:
    • 节点样本纯度达到阈值
    • 达到最大树深度
    • 样本数量小于分裂阈值

决策过程可视化

是否年龄>30?
├── 是 → 是否有房产?
│   ├── 是 → 批准贷款
│   └── 否 → 拒绝贷款
└── 否 → 收入>50k?├── 是 → 批准贷款└── 否 → 拒绝贷款

二、算法原理与数学推导

2.1 特征选择指标

信息熵(ID3算法)

衡量数据集混乱程度:
E n t ( D ) = − ∑ k = 1 K p k log ⁡ 2 p k Ent(D) = -\sum_{k=1}^K p_k \log_2 p_k Ent(D)=k=1Kpklog2pk
其中 p k p_k pk为第 k k k类样本的比例

信息增益(Information Gain)

G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) Gain(D, a) = Ent(D) - \sum_{v=1}^V \frac{|D^v|}{|D|} Ent(D^v) Gain(D,a)=Ent(D)v=1VDDvEnt(Dv)
缺点:偏向选择取值多的特征

信息增益率(C4.5算法)

G a i n _ r a t i o ( D , a ) = G a i n ( D , a ) I V ( a ) Gain\_ratio(D, a) = \frac{Gain(D, a)}{IV(a)} Gain_ratio(D,a)=IV(a)Gain(D,a)
其中固有值:
I V ( a ) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ log ⁡ 2 ∣ D v ∣ ∣ D ∣ IV(a) = -\sum_{v=1}^V \frac{|D^v|}{|D|} \log_2 \frac{|D^v|}{|D|} IV(a)=v=1VDDvlog2DDv

基尼系数(CART算法)

G i n i ( D ) = 1 − ∑ k = 1 K p k 2 Gini(D) = 1 - \sum_{k=1}^K p_k^2 Gini(D)=1k=1Kpk2
基尼指数:
G i n i _ i n d e x ( D , a ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G i n i ( D v ) Gini\_index(D, a) = \sum_{v=1}^V \frac{|D^v|}{|D|} Gini(D^v) Gini_index(D,a)=v=1VDDvGini(Dv)

2.2 决策树生成算法

ID3算法伪代码

def create_tree(D, A):if D中样本全属于同一类别C:return 叶节点标记为Cif A =or D在所有特征上取值相同:return 叶节点标记为D中最多类选择最优划分特征a*生成分支节点:for a*的每个取值v:Dv = D中在a*上取值为v的子集if Dv为空:分支标记为D中最多类else:递归调用create_tree(Dv, A-{a*})return 分支节点

2.3 剪枝处理

预剪枝(Pre-pruning)

在树生成过程中提前停止分裂:

  • 设置最大深度max_depth
  • 设置节点最小样本数min_samples_split
  • 设置信息增益阈值min_impurity_decrease
后剪枝(Post-pruning)

生成完整树后进行剪枝:

  1. 计算节点经验熵:
    C α ( T ) = C ( T ) + α ∣ T ∣ C_{\alpha}(T) = C(T) + \alpha |T| Cα(T)=C(T)+αT
    • C ( T ) C(T) C(T):模型对训练数据的预测误差
    • ∣ T ∣ |T| T:叶节点个数
  2. 自底向上递归剪枝,选择使 C α C_{\alpha} Cα最小的子树

三、模型评估

3.1 评估指标

任务类型常用指标计算公式
分类准确率、F1 Score、AUC A c c u r a c y = T P + T N N Accuracy = \frac{TP+TN}{N} Accuracy=NTP+TN
回归MSE、MAE、R² M S E = 1 n ∑ ( y i − y ^ i ) 2 MSE = \frac{1}{n}\sum(y_i-\hat{y}_i)^2 MSE=n1(yiy^i)2

3.2 学习曲线分析

过拟合识别

训练集准确率:0.98
测试集准确率:0.72
→ 模型过拟合

解决方案

  • 增加剪枝强度
  • 减少树的最大深度
  • 使用集成方法(如随机森林)

四、应用案例

4.1 鸢尾花分类

数据集:150个样本,4个特征(花萼长宽、花瓣长宽)
实现代码

from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_irisiris = load_iris()
clf = DecisionTreeClassifier(max_depth=3)
clf.fit(iris.data, iris.target)# 可视化决策树
from sklearn.tree import plot_tree
plot_tree(clf, feature_names=iris.feature_names)

模型效果

  • 准确率:0.96
  • 关键分裂特征:花瓣长度(Petal length)

4.2 金融风控评分卡

业务场景:信用卡申请风险评估
特征工程

  1. WOE编码处理类别变量:
    W O E i = ln ⁡ ( B a d i / T o t a l B a d G o o d i / T o t a l G o o d ) WOE_i = \ln\left(\frac{Bad_i/TotalBad}{Good_i/TotalGood}\right) WOEi=ln(Goodi/TotalGoodBadi/TotalBad)
  2. IV值筛选特征:
    I V = ∑ ( B a d % − G o o d % ) × W O E IV = \sum (Bad\% - Good\%) \times WOE IV=(Bad%Good%)×WOE

模型输出

  • 高风险客户识别率:82%
  • KS值:0.48

五、经典面试题

问题1:ID3、C4.5、CART的区别?

对比分析

算法分裂标准任务类型树结构缺失值处理
ID3信息增益分类多叉树不支持
C4.5信息增益率分类多叉树支持
CART基尼系数/MSE分类/回归二叉树支持

问题2:如何处理连续特征?

解决方案

  1. 排序所有特征值: a 1 , a 2 , . . . , a n a_1, a_2,...,a_n a1,a2,...,an
  2. 计算候选划分点:
    T a = { a i + a i + 1 2 ∣ 1 ≤ i ≤ n − 1 } T_a = \left\{\frac{a_i + a_{i+1}}{2} | 1 \leq i \leq n-1\right\} Ta={2ai+ai+1∣1in1}
  3. 选择使指标最优的划分点:
    G a i n ( D , a , t ) = E n t ( D ) − ∣ D l ∣ ∣ D ∣ E n t ( D l ) − ∣ D r ∣ ∣ D ∣ E n t ( D r ) Gain(D, a, t) = Ent(D) - \frac{|D^l|}{|D|}Ent(D^l) - \frac{|D^r|}{|D|}Ent(D^r) Gain(D,a,t)=Ent(D)DDlEnt(Dl)DDrEnt(Dr)

问题3:决策树的优缺点?

优势分析

  • 直观易懂,可视化效果好
  • 无需数据归一化
  • 自动特征选择

主要缺点

  • 容易过拟合
  • 对样本扰动敏感
  • 忽略特征间相关性

六、高级优化技术

6.1 多变量决策树

在非叶节点使用线性组合进行划分:
∑ i = 1 d w i x i > t \sum_{i=1}^d w_i x_i > t i=1dwixi>t
优势:能捕捉特征间交互作用

6.2 增量学习

支持在线更新决策树:

  1. 保留历史划分结构
  2. 仅更新统计量
  3. 动态调整分裂点

6.3 异构决策树

混合不同分裂标准:

  • 上层使用信息增益率
  • 下层使用基尼指数

七、最佳实践指南

7.1 参数调优建议

参数推荐值范围作用说明
max_depth3-10控制模型复杂度
min_samples_split10-100防止过拟合
ccp_alpha0.01-0.1后剪枝强度

7.2 特征处理技巧

  • 类别变量:优先使用目标编码而非One-Hot
  • 缺失值:采用代理分裂(Surrogate Splits)
  • 高基数特征:进行分箱处理

总结与展望

决策树作为基础机器学习算法,具有模型直观训练高效的特点,在金融风控、医疗诊断等领域广泛应用。随着技术的发展,决策树的改进方向包括:

  1. 与神经网络结合(如深度森林)
  2. 自动化特征工程
  3. 分布式计算优化

http://www.hkcw.cn/article/DUwYdisVjP.shtml

相关文章

基于晶体塑性有限元(CPFEM)的钛合金圆棒拉伸过程模拟

作者:辞殇 关键词:CPFEM;钛合金;单轴拉伸;织构极图;孪晶 晶体塑性有限元是一种结合了晶体塑性理论和有限元方法的数值模拟技术‌。这种方法考虑了晶体材料的各向异性、滑移系统的开动和相互作用、以及变形…

开源是什么?我们为什么要开源?

本片为故事类文章推荐听音频哦 软件自由运动的背景 梦开始的地方 20世纪70年代,软件行业处于早期发展阶段,软件通常与硬件捆绑销售,用户对软件的使用、修改和分发权利非常有限。随着计算机技术的发展和互联网的普及,越来越多的开…

帕金森带来的生活困境

当这种健康状况出现,行动不再自如成为最明显的改变。日常行走时,步伐会逐渐变小、变慢,甚至会出现 “小碎步” 往前冲,难以停下,简单的起身、转身都可能变得艰难。手部也会不受控制地颤抖,拿水杯、系纽扣这…

第3期:PCB设计教程:自动布线与导出制版文件详解

第3期:PCB设计教程:自动布线与导出制版文件详解 一、前言 本篇教程主要聚焦于PCB设计中的自动布线功能及文件导出步骤。通过本教程,您将学习如何: 使用自动布线工具高效完成线路连接处理自动布线失败的情况进行DRC检查确保设计…

NACOS 动态配置

1.引入Nacos 配置中心依赖 <!-- nacso 配置中心--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency> 2.在application.properties 配置…

【清晰教程】查看和修改Git配置情况

目录 查看安装版本 查看特定配置 查看全局配置 查看本地仓库配置 设置或修改配置 查看安装版本 打开命令行工具&#xff0c;通过version命令检查Git版本号。 git --version 如果显示出 Git 的版本号&#xff0c;说明 Git 已经成功安装。 查看特定配置 如果想要查看特定…

C语言 — 动态内存管理

目录 1.malloc和free函数1.1 malloc函数1.2 free函数1.3 malloc函数的使用 2.calloc函数2.1 calloc函数2.2 calloc函数的使用 3.realloc函数3.1 realloc函数3.2 realloc函数的使用 4.动态内存管理笔试题4.1 笔试题&#xff08;1&#xff09;4.2 笔试题&#xff08;2&#xff09…

动态规划算法

简称 DP&#xff0c;是一种求解多阶段决策过程最优化问题的方法。在动态规划中&#xff0c;通过把原问题分解为相对简单的子问题&#xff0c;先求解子问题&#xff0c;再由子问题的解而得到原问题的解。 一、概念 动态规划最早由理查德 贝尔曼于 1957 年在其著作「动态规划&…

Qt -使用OpenCV得到SDF

博客主页&#xff1a;【夜泉_ly】 本文专栏&#xff1a;【暂无】 欢迎点赞&#x1f44d;收藏⭐关注❤️ 目录 cv::MatdistanceTransform获得SDF 本文的目标&#xff0c; 是简单学习并使用OpenCV的相关函数&#xff0c; 并获得QImage的SDF(Signed Distance Field 有向距离场) 至…

【小米拥抱AI】小米开源 MiMo-7B-RL-0530

更新日志 [2025.05.30] 在强化学习训练过程中&#xff0c;通过持续扩大训练窗口尺寸&#xff08;从32K提升至48K&#xff09;&#xff0c;MiMo-7B-RL-0530模型在AIME24基准测试上的表现持续提升&#xff0c;最终超越DeepSeek R1模型的性能水平。 BenchmarkMiMo-7B-RLMiMo-7B-…

俄布良斯克州桥梁坍塌致列车脱轨事故造成3死28伤

△图片来源:莫斯科交通检察院总台记者当地时间6月1日获悉,据俄罗斯紧急情况部初步统计,布良斯克州桥梁坍塌致火车脱轨事故共造成31人伤亡,其中3人不幸遇难,28人已送往医疗机构救治。此前据俄罗斯BAZA网站报道,事件造成4人死亡,至少44人受伤。俄紧急情况部称,救援人员正…

JDK17 与JDK8 共同存在一个电脑上

官网下载JDK17 官网链接 &#xff1a;https://www.oracle.com/java/technologies/downloads/#java17-windows 下载这个 安装 环境变量设置 因为之前设置过JDK 8这里为了使 两者共存&#xff0c;采用设置变量方式来实现具体操作如下 1、进入高级系统环境设置 1.1先建一个关…

打开NRODIC SDK编译不过怎么处理,keil与segger studio

打开NRODIC SDK编译不过怎么处理,以下是keil处理. 1,如图,不要安装安装也不会过 2. 不要安装点击否 3.点击确定后进来这个样子 4.这里选择这个勾,OK后就不会再有后面的pack_license 5.去掉勾后这里要选择自己SDK对应的pack版本,我的是8.27.0 6.OK后弹出个界面也要反复选择…

每日八股文5.31

每日八股-5.31 Go1.切片是值传递还是引用传递&#xff1f;2.切片的深拷贝与浅拷贝3.切片的底层实现4.切片的扩容机制5.Map是线程安全的吗&#xff1f;6.哪些类型可以作为map的key&#xff1f;7.Map删除一个key内存是否会释放&#xff1f;8.Map为什么是无序的&#xff1f;9.如何…

智能重塑连接:AI原生互联网的范式革命与未来十年

引言:互联网的下一幕——智能涌现与体验重塑 2024年初,OpenAI发布的文生视频模型Sora,以其惊人的逼真度和对物理世界的理解能力,再次将人工智能的魔力推向了全球聚光灯下。这不仅仅是一个技术演示,更像是一个强烈的信号:我们正加速驶向一个由AI深度重塑的未来。回望互联…

【深度学习相关安装及配环境】Anaconda搭建虚拟环境并安装CUDA、cuDVV和对应版本的Pytorch,并在jupyter notebook上部署

目录 1. 查看自己电脑的cuda版本2.安装cuda关于环境变量的配置测试一下&#xff0c;安装完成 3.安装cuDVV环境变量的配置测试一下&#xff0c;安装完成 4.创建虚拟环境先安装镜像源下载3.11版本py 5.在虚拟环境下&#xff0c;下载pytorch6.验证是否安装成功7.在jupyter noteboo…

2. 手写数字预测 gui版

2. 手写数字预测 gui版 背景1.界面绘制2.处理图片3. 加载模型4. 预测5.结果6.一点小问题 背景 做了手写数字预测的模型&#xff0c;但是老是跑模型太无聊了&#xff0c;就配合pyqt做了一个可视化界面出来玩一下 源代码可以去这里https://github.com/Leezed525/pytorch_toy拿 …

用JS实现植物大战僵尸(前端作业)

1. 先搭架子 整体效果&#xff1a; 点击开始后进入主场景 左侧是植物卡片 右上角是游戏的开始和暂停键 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevic…

巴黎球迷打出TIFO悼念恩里克女儿 感人至深的纪念

北京时间6月1日,巴黎圣日耳曼在欧冠决赛中以5-0战胜国际米兰,夺得本赛季欧冠冠军。赛后,安联球场展示了一个感人至深的TIFO,主角是巴黎圣日耳曼主教练恩里克和他的已故女儿Xana。十年前,恩里克带领巴塞罗那夺得欧冠冠军时,曾与女儿Xana一起将巴萨的旗帜插进球场。然而,X…

六一儿童节 实践我先行活动举行

5月30日,在“六一”国际儿童节来临之际,“实践我先行——2025年在宋庆龄奶奶生活过的地方过六一”活动在北京宋庆龄故居举行,逾百名中外少年儿童和教师代表参加。活动现场,北京市西城区金融街惠泽幼儿园的小朋友们表演了群鼓节目《华夏少年》。中国宋庆龄基金会党组书记、副…