机器学习(3)——决策树

文章目录

  • 1. 决策树基本原理
    • 1.1. 什么是决策树?
    • 1.2. 决策树的基本构成:
    • 1.3. 核心思想
  • 2. 决策树的构建过程
    • 2.1. 特征选择
    • 2.1.1. 信息增益(ID3)
    • 2.1.2. 基尼不纯度(CART)
    • 2.1.3. 均方误差(MSE)
    • 2.2. 节点划分
    • 2.3. 停止条件:
  • 3. 决策树的剪枝(防止过拟合)
  • 4. 决策树的优缺点
  • 5. 常见决策树算法
  • 6. 样例代码:
  • 7. 归纳

1. 决策树基本原理

1.1. 什么是决策树?

决策树(Decision Tree)是一种非参数的监督学习算法,适用于分类和回归任务。其核心思想是通过一系列规则(if-then结构)对数据进行递归划分,最终形成一棵树形结构,实现预测或分类。

1.2. 决策树的基本构成:

  • 根节点(Root Node):代表整个数据集,选择第一个最优特征进行分裂。
  • 内部节点(Internal Nodes):代表对某个特征的判断,用来决定如何分裂数据。
  • 叶子节点(Leaf Nodes):存放最终的预测结果,表示分类或回归结果。

1.3. 核心思想

  • 目标:构建一棵树,使得每个分支节点代表一个特征判断,每个叶子节点代表一个预测结果。
  • 关键问题:
    • 如何选择划分特征?(特征选择准则)
    • 何时停止划分?(防止过拟合)

2. 决策树的构建过程

决策树的构建是一个递归分割(Recursive Partitioning)的过程

2.1. 特征选择

选择最佳特征:在每一步分裂中,算法会选择一个最优的特征来进行数据划分。

常用的准则

  • 信息增益(Information Gain, ID3算法)
  • 信息增益比(Gain Ratio, C4.5算法)
  • 基尼不纯度(Gini Impurity, CART算法)
  • 均方误差(MSE, 回归树)

2.1.1. 信息增益(ID3)

  • 衡量使用某特征划分后信息不确定性减少的程度。

  • 计算公式: 信息增益 = H ( D ) − H ( D ∣ A ) 信息增益=H(D)−H(D∣A) 信息增益=H(D)H(DA)

    • H(D):数据集的熵(不确定性)。
    • H(D∣A):在特征 A划分后的条件熵。

2.1.2. 基尼不纯度(CART)

  • 衡量数据集的不纯度,越小越好,表示数据集越纯。

  • 计算公式:
    Gini ( D ) = 1 − ∑ k = 1 K p k 2 \text{Gini}(D) = 1 - \sum_{k=1}^{K} p_k^2 Gini(D)=1k=1Kpk2

    • p k p_k pk :数据集中第 k k k 类样本的比例。

2.1.3. 均方误差(MSE)

  • 用于回归问题,计算预测值与真实值的差异。

  • 计算公式: 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

    • y i y_i yi是实际值, y ^ i \hat y_i y^i 是预测值。

2.2. 节点划分

  • 分类任务:选择使信息增益最大(或基尼不纯度最小)的特征进行划分。
  • 回归任务:选择使均方误差(MSE)最小的特征进行划分。

2.3. 停止条件:

  • 当前节点所有样本属于同一类别(纯度100%)。
  • 所有特征已用完,或继续划分无法显著降低不纯度。
  • 达到预设的最大深度(max_depth)或最小样本数(min_samples_split)。

3. 决策树的剪枝(防止过拟合)

决策树容易过拟合(训练集表现好,测试集差)。为了防止过拟合,我们通常会使用剪枝技术。

  • 预剪枝(Pre-pruning):在训练时提前停止(如限制树深度)。

  • 后剪枝(Post-pruning):先训练完整树,再剪掉不重要的分支(如C4.5的REP方法)。

4. 决策树的优缺点

  • ✅ 优点
    • 可解释性强:规则清晰,易于可视化(if-then结构)。
    • 无需数据标准化:对数据分布无严格要求。
    • 可处理混合类型数据(数值型+类别型)。
    • 适用于小规模数据。
  • ❌ 缺点
    • 容易过拟合(需剪枝或限制树深度)。
    • 对噪声敏感(异常值可能导致树结构不稳定)。
    • 不稳定性:数据微小变化可能导致完全不同的树。
    • 不适合高维稀疏数据(如文本数据)。

5. 常见决策树算法

算法适用任务特征选择准则特点
ID3分类信息增益只能处理离散特征,容易过拟合
C4.5分类信息增益比可处理连续特征,支持剪枝
CART分类/回归基尼不纯度(分类) 均方误差(回归)二叉树结构,Scikit-learn默认实现
CHAID分类卡方检验适用于类别型数据

6. 样例代码:

# 导入必要的库
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
from sklearn.tree import plot_tree# 加载鸢尾花数据集
data = load_iris()
X = data.data
y = data.target# 将数据分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建决策树分类器
clf = DecisionTreeClassifier(criterion='gini', max_depth=3, random_state=42)# 训练决策树
clf.fit(X_train, y_train)# 预测测试集
y_pred = clf.predict(X_test)# 输出准确率
print(f"Accuracy: {accuracy_score(y_test, y_pred):.4f}")# 可视化决策树
plt.figure(figsize=(12, 8))
plot_tree(clf, filled=True, feature_names=data.feature_names, class_names=data.target_names)
plt.show()

7. 归纳

决策树的核心:递归划分数据,选择最优特征,构建树结构。

  • 关键问题:

    • 如何选择划分特征?(信息增益、基尼不纯度)
    • 如何防止过拟合?(剪枝、限制树深度)
  • 适用场景:

    • 需要可解释性的任务(如金融风控)。

    • 小规模、低维数据分类/回归

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/77126.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

充电桩领域垂直行业大模型分布式推理与训练平台建设方案 - 慧知开源充电桩平台

没有任何广告! 充电桩领域垂直行业大模型分布式推理与训练平台建设方案 一、平台定位与核心价值 行业首个垂直化AI平台 专为充电桩运营场景设计的分布式大模型训练与推理基础设施,实现"算力-算法-场景"三位一体闭环管理。 核心价值主张&am…

NLP高频面试题(四十五)——PPO 算法在 RLHF 中的原理与实现详解

近端策略优化(Proximal Policy Optimization, PPO)算法是强化学习领域的一种新颖且高效的策略优化方法,在近年大规模语言模型的人类反馈强化学习(Reinforcement Learning with Human Feedback, RLHF)中发挥了关键作用。本文将以学术严谨的风格,详细阐述 PPO 算法的原理及…

C++指针和引用之区别(The Difference between C++Pointers and References)

面试题:C指针和引用有什么区 C指针和引用有什么区别? 在 C 中,指针和引用都是用来访问其他变量的值的方式,但它们之间存在一些重要的区别。了解这些区别有助于更好地理解和使用这两种工具。 01 指针 指针(Pointer…

LWIP学习笔记

TCP/ip协议结构分层 传输层简记 TCP:可靠性强,有重传机制 UDP:单传机制,不可靠 UDP在ip层分片 TCP在传输层分包 应用层传输层网络层,构成LWIP内核程序: 链路层;由mac内核STM芯片的片上外设…

【经验记录贴】活用shell,提高工作效率

背景 最近在做测试的时候,需要手动kill服务的进程,然后通过命令重启服务,再进行测试。每次重启都会涉及到下面三个命令的执行: 1)检索进程ID $ ps -eLf | grep programname root 1123 112 1234 0 0 0 0:00…

MacOS 系统下 Git 的详细安装步骤与基础设置指南

MacOS 系统下 Git 的详细安装步骤与基础设置指南—目录 一、安装 Git方法 1:通过 Homebrew 安装(推荐)方法 2:通过 Xcode Command Line Tools 安装方法 3:手动下载安装包 二、基础配置1. 设置全局用户名和邮箱2. 配置 …

一文读懂 AI

2022年11月30日,OpenAI发布了ChatGPT,2023年3月15日,GPT-4引发全球轰动,让世界上很多人认识了ai这个词。如今已过去快两年半,AI产品层出不穷,如GPT-4、DeepSeek、Cursor、自动驾驶等,但很多人仍…

【教程】检查RDMA网卡状态和测试带宽 | 附测试脚本

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 目录 检查硬件和驱动状态 测试RDMA通信 报错修复 对于交换机的配置,可以看这篇: 【教程】详解配置多台主机通过交换机实现互…

计算机网络 - TCP协议

通过一些问题来讨论 TCP 协议 什么是 TCP ?举几个应用了 TCP 协议的例子TCP协议如何保证可靠性?tcp如何保证不会接受重复的报文?Tcp粘包拆包问题了解吗?介绍一下,如何解决?TCP拥塞控制与流量控制区别&…

Fiddler 进行断点测试:调试网络请求

目录 一、什么是断点测试? 二、Fiddler 的断点功能 三、如何在 Fiddler 中设置断点? 步骤 1:启动 Fiddler 步骤 2:启用断点 步骤 3:捕获请求 步骤 4:修改请求或响应 四、案例:模拟登录失…

OpenCv高阶(三)——图像的直方图、图像直方图的均衡化

目录 一、直方图 1、计算并显示直方图 2、使用matplotlib方法绘制直方图(不划分小的子区间) 3、使用opencv的方法绘制直方图 (划分16个小的子亮度区间) 4、绘制彩色图像的直方图,将各个通道的直方图值都画出来 二、…

Flutter 与原生通信

Flutter 与原生之间的通信主要基于通道机制,包括 MethodChannel、EventChannel 和 BasicMessageChannel。 MethodChannel:用于 Flutter 与原生之间的方法调用,实现双向通信,适合一次性的方法调用并获取返回值,如 Flut…

前端面试-Vue篇

核心概念 Vue 3的响应式原理与Vue 2有何本质区别?Vue中虚拟DOM的diff算法优化策略有哪些?Vue组件间通信方式有哪些?适用场景分别是什么?Vue的生命周期钩子在Composition API中如何替代?Vue的模板编译过程是怎样的&…

光刻机研发与市场现状分析报告

1. 引言 光刻机(Lithography Machine)是半导体制造的核心设备,其技术水平和市场供应能力直接影响全球芯片产业的发展。随着人工智能(AI)、5G、高性能计算(HPC)和自动驾驶等技术的兴起&#xff0…

Missashe考研日记-day21

Missashe考研日记-day21 1 专业课408 学习时间:4h学习内容: 今天先把昨天学的内容的课后习题做了,整整75道啊,然后学了OS第二章关于CPU调度部分的内容,这第二章太重要了,以至于每一小节的内容都比较多&am…

【玩转全栈】—— Django+vue3+讯飞星火API 实现前端页面实时AI答复

技术栈:vue3 element-plus axios pinia router Django5 websocket 讯飞星火API 本文将实现一个 AI 聊天对话功能,将前端用户输入问题以及之前对话发送给后端,通过 api 访问大模型,返回前端实时对话数据。 调用 讯飞星火API…

广东广州一家IPO资产重组疑点重重,信息披露真实性存疑

作者:Eric 来源:IPO魔女 4月18日,广州瑞立科密汽车电子股份有限公司(简称“瑞立科密”)将接受深交所主板IPO上会审核。公司保荐机构为中信证券,拟募集资金为15.2162亿元。 瑞立科密过往资产重组疑点重重&a…

银河麒麟(Kylin) - V10 SP1桌面操作系统ARM64编译QT-5.15.12版本

银河麒麟(Kylin) - V10 SP1桌面操作系统ARM64编译QT-5.15.12版本 原因 测试Kylin-Desktop-V10-SP1-General-Release-2303-arm64系统下,编译QT-5.15.12版本已做测试。 测试环境 测试板配置 型号:LM-D2000-NONE-1w-V01-pc_A2150 CPU:飞腾D20…

查看前端项目依赖树型结构关系图的详细方法,涵盖 命令行工具 和 可视化工

以下是查看前端项目依赖树型结构关系图的详细方法&#xff0c;涵盖 命令行工具 和 可视化工具&#xff1a; 一、命令行工具生成依赖树 1. npm # 查看项目依赖树&#xff08;文本形式&#xff09; npm ls# 查看指定包的依赖树 npm ls <package-name># 生成JSON格式的依…

Ollama高并发测试

本文主要来测试一下ollama的高并发能力。 具体配置如下&#xff1a; 一、Ollama默认参数执行 我们打开4个窗口&#xff0c;然后分别让DeepSeek “给我讲一个笑话” &#xff0c;看下不同窗口的答题顺序。 通过答题顺序可以看到&#xff0c;在不进行参数设置时&#xff0c;模…