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

【机器学习】机器学习的基本分类-监督学习-决策树(Decision Tree)

决策树是一种树形结构的机器学习模型,适用于分类和回归任务。它通过一系列基于特征的条件判断来将数据分割为多个子区域,从而预测目标变量的值。


1. 决策树的结构

  1. 根节点(Root Node)

    • 决策树的起点,包含所有样本。
    • 根据某个特征的分割规则分裂。
  2. 内部节点(Internal Nodes)

    • 每个节点表示一次分割(划分标准)。
    • 根据特定特征及阈值分裂为子节点。
  3. 叶子节点(Leaf Nodes)

    • 决策树的终点,包含分类结果或回归预测值。

2. 决策树的构造

划分准则(分裂规则)

构造决策树的核心是选择最优的特征和阈值进行分裂,常用的准则包括:

  1. 分类问题

    • 信息增益(Information Gain)

      IG = H(D) - \sum_{i} \frac{|D_i|}{|D|} H(D_i)
      • H(D):分裂前的熵。
      • H(D_i):分裂后每个子集的熵。
    • 基尼指数(Gini Index)

      Gini(D) = 1 - \sum_{k=1}^K p_k^2
      • p_k​:样本属于第 k 类的比例。
      • 决策树选择使基尼指数下降最多的分裂。
  2. 回归问题

    • 均方误差(Mean Squared Error, MSE)MSE = \frac{1}{N} \sum_{i=1}^N (y_i - \hat{y})^2

3. 决策树算法

  1. ID3 算法

    • 使用信息增益作为分裂准则。
    • 适用于分类问题。
  2. C4.5 算法

    • 改进 ID3,支持连续特征。
    • 使用信息增益比作为分裂准则。
  3. CART(Classification and Regression Tree)

    • 适用于分类和回归。
    • 分类使用基尼指数,回归使用均方误差。

4. 决策树的优缺点

优点
  1. 易解释:规则清晰,直观理解。
  2. 无需特征缩放:对特征的分布和尺度不敏感。
  3. 可处理非线性关系:通过分裂捕捉复杂的非线性关系。
缺点
  1. 易过拟合:树过深会导致模型对训练数据拟合过度。
  2. 对噪声敏感:数据中的异常值可能显著影响树的结构。
  3. 不稳定性:小的变化可能导致树结构发生较大改变。

5. 决策树的剪枝

为了防止过拟合,决策树通常需要剪枝

  1. 预剪枝(Pre-Pruning)

    • 在构造时提前停止分裂。
    • 条件:达到最大深度、节点样本数小于阈值、分裂带来的增益不足。
  2. 后剪枝(Post-Pruning)

    • 先构造完整树,再从底部向上剪枝。
    • 剪枝条件:剪枝后误差降低或复杂度减少。

6. 决策树在分类与回归中的应用

分类问题
  • 用于多类别或二分类任务。
  • 叶子节点存储类别标签。
回归问题
  • 用于预测连续值。
  • 叶子节点存储预测值(通常为均值)。

7. 决策树的实现

分类问题
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 加载数据
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, 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("Accuracy:", accuracy_score(y_test, y_pred))

输出结果

Accuracy: 1.0
回归问题
from sklearn.tree import DecisionTreeRegressor
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error# 生成数据
X, y = make_regression(n_samples=100, n_features=1, noise=0.1, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 创建决策树回归器
reg = DecisionTreeRegressor(criterion="squared_error", max_depth=3, random_state=42)
reg.fit(X_train, y_train)# 预测
y_pred = reg.predict(X_test)
print("MSE:", mean_squared_error(y_test, y_pred))

输出结果

MSE: 36.28620386292295

8. 决策树的可视化

代码示例
import numpy as np
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier, plot_tree
import matplotlib.pyplot as pltiris = load_iris()
clf = DecisionTreeClassifier(random_state=1234)
model = clf.fit(iris.data, iris.target)# 将 iris.target_names 转换为列表
class_names_list = list(iris.target_names)plot_tree(clf, feature_names=iris.feature_names, class_names=class_names_list, filled=True)
plt.show()

可视化结果
  • 决策树图中显示特征的分裂规则、样本数量、类别比例等信息。
  • 有助于理解模型决策逻辑。

9. 决策树的扩展

  1. 随机森林(Random Forest)

    • 使用多棵决策树,结合集成学习(Bagging)。
    • 提升泛化性能,减少过拟合。
  2. 梯度提升树(Gradient Boosted Trees)

    • 以决策树为弱学习器,通过梯度提升优化。
  3. XGBoost / LightGBM / CatBoost

    • 各种基于决策树的高效梯度提升框架。

决策树作为经典的机器学习模型,易于理解且功能强大,适合小规模数据集或需解释性强的任务。在实际应用中,可以结合剪枝和集成学习来提升模型性能。

相关文章:

【机器学习】机器学习的基本分类-监督学习-决策树(Decision Tree)

决策树是一种树形结构的机器学习模型,适用于分类和回归任务。它通过一系列基于特征的条件判断来将数据分割为多个子区域,从而预测目标变量的值。 1. 决策树的结构 根节点(Root Node) 决策树的起点,包含所有样本。根据某…...

【第 1 章 初识 C 语言】1.8 使用 C 语言的 7 个步骤

目录 1.8 使用 C 语言的 7 个步骤 1.8.1 第 1 步:定义程序的目标 1.8.2 第 2 步:设计程序 1.8.3 第 3 步:编写代码 1.8.4 第 4 步:编译 1.8.5 第 5 步:运行程序 1.8.6 第 6 步:测试和调试程序 1.8.…...

Docker 使用 Dockerfile 文件打包部署前端项目

编写 Dockerfile 文件: FROM nginx:latest ADD dist /etc/nginx/html/dist COPY nginx.conf /etc/nginx/nginx.conf ENV PATH /usr/sbin:$PATH EXPOSE 80 ENTRYPOINT ["nginx"] CMD ["-g","daemon off;"]编写 nginx.conf 文件&#…...

HTML-全

. CSS css后缀名的文件被html引用 在HTML中,CSS(层叠样式表,Cascading Style Sheets)是一种用于设置网页上的文本内容、图片布局和版面设计等外观样式的样式表语言。简单来说,CSS定义了HTML元素如何显示在浏览器中。…...

高效流程图绘制:开发设计流程图利器

在选择画流程图的工具时,不同的项目和使用场景会决定最佳的工具。以下是几款常见的流程图工具,并结合具体项目使用场景提供建议: 1. Lucidchart 特点: 在线协作:支持多人实时协作,适合团队合作。模板丰富&…...

数据仓库的概念

先用大白话讲一下,数据仓库的主要目的就是存储和分析大量结构化数据的。 > 那么它的核心目的是:支持商业智能(BI)和决策支持系统,也就是说,它不仅仅是为了存储,更重要的是为了分析提供便利。…...

AI - 谈谈RAG中的查询分析(2)

AI - 谈谈RAG中的查询分析(2) 大家好,RAG中的查询分析是比较有趣的一个点,内容丰富,并不是一句话能聊的清楚的。今天接着上一篇,继续探讨RAG中的查询分析,并在功能层面和代码层面持续改进。 功…...

Java基础面试题,46道Java基础八股文(4.8万字,30+手绘图)

Java是一种广泛使用的编程语言,由Sun Microsystems(现为Oracle Corporation的一部分)在1995年首次发布。它是一种面向对象的语言,这意味着它支持通过类和对象的概念来构造程序。 Java设计有一个核心理念:“编写一次&am…...

taro小程序马甲包插件

插件名 maloulab/taro-plugins-socksuppet-ci maloulab/taro-plugins-socksuppet-ci安装 yarn add maloulab/taro-plugins-socksuppet-ci or npm i maloulab/taro-plugins-socksuppet-ci插件描述 taro官方是提供了小程序集成插件的tarojs/plugin-mini-ci ,且支持…...

【分组去重】.NET开源 ORM 框架 SqlSugar 系列

💥 .NET开源 ORM 框架 SqlSugar 系列 🎉🎉🎉 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列…...

2020年

C D A C B B A B C B A 42...

基于Matlab卡尔曼滤波的GPS/INS集成导航系统研究与实现

随着智能交通和无人驾驶技术的迅猛发展,精确可靠的导航系统已成为提升车辆定位精度与安全性的重要技术。全球定位系统(GPS)和惯性导航系统(INS)在导航应用中各具优势:GPS提供全球定位信息,而INS…...

《只狼》运行时提示“mfc140u.dll文件缺失”是什么原因?“找不到mfc140u.dll文件”要怎么解决?教你几招轻松搞定

《只狼》运行时提示“mfc140u.dll文件缺失”的科普与解决方案 作为一名软件开发从业者,在游戏开发和维护过程中,我们经常会遇到各种运行时错误和系统报错。今天,我们就来探讨一下《只狼》这款游戏在运行时提示“mfc140u.dll文件缺失”的原因…...

C语言:指针与数组

一、. 数组名的理解 int arr[5] { 0,1,2,3,4 }; int* p &arr[0]; 在之前我们知道要取一个数组的首元素地址就可以使用&arr[0],但其实数组名本身就是地址,而且是数组首元素的地址。在下图中我们就通过测试看出,结果确实如此。 可是…...

win11无法检测到其他显示器-NVIDIA

https://www.nvidia.cn/software/nvidia-app/ https://cn.download.nvidia.cn/nvapp/client/11.0.1.163/NVIDIA_app_v11.0.1.163.exe 下载安装后,检测驱动、更新驱动。...

SQLite:DDL(数据定义语言)的基本用法

SQLite:DDL(数据定义语言)的基本用法 1 主要内容说明2 相关内容说明2.1 创建表格(create table)2.1.1 SQLite常见的数据类型2.1.1.1 integer(整型)2.1.1.2 text(文本型)2…...

AI工具集:一站式1000+人工智能工具导航站

在当今数字化时代,人工智能(AI)技术的飞速发展催生了众多实用的AI工具,但面对如此多的选择,想要找到适合自己的高质量AI工具却并非易事。网络搜索往往充斥着推广内容,真正有价值的信息被淹没其中。为了解决…...

视觉处理基础2

目录 1.池化层 1.1 概述 1.2 池化层计算 1.3 步长Stride 1.4 边缘填充Padding 1.5 多通道池化计算 1.6 池化层的作用 2. 卷积拓展 2.1 二维卷积 2.1.1 单通道版本 2.1.2 多通道版本 2.2 三维卷积 2.3 反卷积 2.4 空洞卷积(膨胀卷积) 2.5 …...

代码随想录第十四天|二叉树part02--226.翻转二叉树、101.对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度

资料引用: 226.翻转二叉树(226.翻转二叉树) 101.对称二叉树(101.对称二叉树) 104.二叉树的最大深度(104.二叉树的最大深度) 111.二叉树的最小深度(111.二叉树的最小深度)…...

vue基础之7:天气案例、监视属性、深度监视、监视属性(简写)

欢迎来到“雪碧聊技术”CSDN博客! 在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

ES6从入门到精通:前言

ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

dify打造数据可视化图表

一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...