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

机器学习系列-决策树

文章目录

  • 1. 决策树原理
    • 决策树的构建流程
  • 2. 案例
    • 步骤 1:计算当前节点的熵
    • 步骤 2:对每个特征计算分裂后的熵
      • (1) 按“天气”分裂数据集
      • (2) 计算分裂后的加权熵
    • 步骤 3:计算分裂依据
      • 信息增益
      • 信息增益率
      • GINI系数(二叉树)
    • 步骤 4:选择分裂节点
      • 停止条件
      • 继续分裂
      • 示例
    • 步骤 5:剪枝
      • 示例数据集
      • 生成的决策树
      • 1. 预剪枝
      • 2. 后剪枝
      • 剪枝的效果
      • 对比

1. 决策树原理

决策树是一种以树状结构进行决策和分类的监督学习算法,适用于分类回归问题。它通过递归地将数据集分割成更小的子集,最终生成一个类似于树状的模型。

决策树的构建流程

  1. 特征选择:

    • 决策树选择某个特征对数据集进行分割,找到能够最优划分数据的特征。常用的分裂标准包括:
      • 信息增益(ID3算法)
      • 信息增益比(C4.5算法)
      • 基尼指数(CART算法)
  2. 数据分裂:

    • 按照选择的特征,将数据集分割成若干子集。
  3. 递归构建:

    • 对每个子集重复上述步骤,直到满足停止条件(如节点纯度达到某个阈值或节点样本数不足)。
  4. 终止条件:

    • 达到树的最大深度。
    • 节点中的样本数低于最小分割数。
    • 分裂后的增益低于某个阈值。

2. 案例

一个小型分类数据集,目标是预测是否买票:

其它特征天气是否买票
晴天
阴天
雨天
晴天
阴天
雨天

步骤 1:计算当前节点的熵

熵公式:

H ( D ) = − ∑ k = 1 K p k log ⁡ 2 p k H(D)=-\sum_{k=1}^K p_k \log_2 p_k H(D)=k=1Kpklog2pk

  • D 为当前数据集;
  • K为类别数量;
  • pk为类别 k 的概率。

当前数据集中:

  • P(买票)=3 / 6​=0.5;
  • P(不买票)=3 / 6​=0.5。

熵为:

H ( D ) = − ( 0.5 log ⁡ 2 0.5 + 0.5 log ⁡ 2 0.5 ) = − ( 0.5 × − 1 + 0.5 × − 1 ) = 1 H(D) = - (0.5 \log_2 0.5 + 0.5 \log_2 0.5) = - (0.5 \times -1 + 0.5 \times -1) = 1 H(D)=(0.5log20.5+0.5log20.5)=(0.5×1+0.5×1)=1

步骤 2:对每个特征计算分裂后的熵

以特征“天气”为例,取值为“晴天”“阴天”“雨天”。根据此特征分裂数据集:

(1) 按“天气”分裂数据集

分裂结果为:

  • “晴天”:{否, 是}
  • “阴天”:{是, 是}
  • “雨天”:{否, 否}

分别计算每个子集的条件熵:

  • 晴天:
    H ( 晴天 ) = − ( 0.5 log ⁡ 2 0.5 + 0.5 log ⁡ 2 0.5 ) = 1 H(\text{晴天}) = - (0.5 \log_2 0.5 + 0.5 \log_2 0.5) = 1 H(晴天)=(0.5log20.5+0.5log20.5)=1
  • 阴天:
    H ( 阴天 ) = − ( 1 log ⁡ 2 1 + 0 log ⁡ 2 0 ) = 0 H(\text{阴天}) = - (1 \log_2 1 + 0 \log_2 0) = 0 H(阴天)=(1log21+0log20)=0
  • 雨天:
    H ( 雨天 ) = − ( 0 log ⁡ 2 0 + 1 log ⁡ 2 1 ) = 0 H(\text{雨天}) = - (0 \log_2 0 + 1 \log_2 1) = 0 H(雨天)=(0log20+1log21)=0

(2) 计算分裂后的加权熵

加权熵公式:

H split ( D ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ H ( D v ) H_\text{split}(D) = \sum_{v=1}^V \frac{|D_v|}{|D|} H(D_v) Hsplit(D)=v=1VDDvH(Dv)

  • |D_v| 为分裂后子集的大小;
  • H(D_v) 为子集的熵。

加权熵:

H s p l i t ​ ( D ) = 2 6 H ( 晴天 ) + 2 6 H ( 阴天 ) + 2 6 H ( 雨天 ) = 2 6 × 1 + 2 6 × 0 + 2 6 × 0 = 2 6 = 0.333 Hsplit​(D)=\frac{2}{6}H(晴天)+\frac{2}{6}H(阴天)+\frac{2}{6}H(雨天) = \frac{2}{6} \times 1 + \frac{2}{6} \times 0 + \frac{2}{6} \times 0 = \frac{2}{6} = 0.333 Hsplit(D)=62H(晴天)+62H(阴天)+62H(雨天)=62×1+62×0+62×0=62=0.333

步骤 3:计算分裂依据

信息增益

计算以天气作为节点进行分裂的信息增益:

信息增益 ( 节点 = 天气 ) = H ( D ) − H split ( D ) = 1 − 0.333 = 0.667 \text{信息增益}(节点=天气) = H(D) - H_\text{split}(D) = 1 - 0.333 = 0.667 信息增益(节点=天气)=H(D)Hsplit(D)=10.333=0.667

信息增益率

计算以天气作为节点进行分裂的信息增益率:

定义固有值(Split Information)固有值是衡量分裂结果的复杂性,计算公式为:

固有值 (SplitInfo) = − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ log ⁡ 2 ∣ D v ∣ ∣ D ∣ ​ \text{固有值 (SplitInfo)} = -\sum_{v=1}^V \frac{|D_v|}{|D|} \log_2 \frac{|D_v|}{|D|}​ 固有值 (SplitInfo)=v=1VDDvlog2DDv

  • |D_v|:特征值 v 的样本数量;
  • |D|:总样本数量;
  • V:特征取值的数量。

信息增益率 ( G a i n R a t i o ) = 信息增益 ( G a i n ) 固有值 ( S p l i t I n f o ) = 0.667 − ( 2 6 × l o g 2 2 6 + 2 6 × l o g 2 2 6 + 2 6 × l o g 2 2 6 ) ≈ 1.26 信息增益率 (Gain Ratio)=\frac{信息增益 (Gain)}{固有值 (SplitInfo)}= \frac{0.667} {- (\frac{2}{6} \times log_2 \frac{2}{6} + \frac{2}{6} \times log_2 \frac{2}{6} + \frac{2}{6} \times log_2 \frac{2}{6})} ≈ 1.26 信息增益率(GainRatio)=固有值(SplitInfo)信息增益(Gain)=(62×log262+62×log262+62×log262)0.6671.26

GINI系数(二叉树)

计算以天气作为节点进行分裂的GINI系数:
节点的 Gini 系数:

G ( D ) = ∑ k = 1 K p k ( 1 − p k ) = ( 0. 5 2 + 0. 5 2 ) = 0.5 G(D) = \sum_{k=1}^K p_k(1-p_k) = (0.5^2+0.5^2)=0.5 G(D)=k=1Kpk(1pk)=(0.52+0.52)=0.5

  • K:类别数量;
  • p_k​:类别 k 的样本比例。

分裂后的加权 Gini 系数:

G ( 晴天 ) = 0. 5 2 + 0. 5 2 = 0.5 G(晴天)=0.5^2+0.5^2=0.5 G(晴天)=0.52+0.52=0.5
G ( 阴天 ) = 1 × 0 + 0 × 1 = 0 G(阴天)=1 \times 0 +0 \times 1=0 G(阴天)=1×0+0×1=0
G ( 雨天 ) = 0 × 1 + 1 × 0 = 0 G(雨天)=0 \times 1+1 \times 0=0 G(雨天)=0×1+1×0=0
G split ( D ) = ∑ v = 1 V ∣ D v ∣ ∣ D ∣ G ( D v ) = 2 6 × 0.5 + 2 6 × 0 + 2 6 × 0 ≈ 0.167 G_\text{split}(D) = \sum_{v=1}^V \frac{|D_v|}{|D|} G(D_v) = \frac{2}{6} \times 0.5 + \frac{2}{6} \times 0 + \frac{2}{6} \times 0 ≈ 0.167 Gsplit(D)=v=1VDDvG(Dv)=62×0.5+62×0+62×00.167

  • V:特征的取值数量;
  • |D_v|:分裂后每个子集的样本数量;
  • G(D_v):子集的 Gini 系数。

GINI系数 ( 节点 = 天气 ) = G ( D ) − G split ( D ) = 0.5 − 0.167 = 0.333 \text{GINI系数}(节点=天气) = G(D) - G_\text{split}(D) = 0.5 - 0.167 = 0.333 GINI系数(节点=天气)=G(D)Gsplit(D)=0.50.167=0.333

步骤 4:选择分裂节点

选择分裂评估指标中值最高的特征作为节点进行分裂

以天气特征为例,会从根节点分裂出三个子节点:A1( D 晴天 D_\text{晴天} D晴天)​、A2( D 阴天 D_\text{阴天} D阴天)​、A3( D 雨天 D_\text{雨天} D雨天)​

对子节点 A1​、A2​、A3​​ 逐一检查是否需要继续分裂:

停止条件

  1. 数据集中所有样本的类别相同

    • 如果 D 节点 D_\text{节点} D节点​ 中的样本全为“是”或“否”,则该节点不再分裂,设为叶节点,标记类别。
    • 如:节点 A2 的数据集中样本全为“是”,直接将其标记为“是”。
  2. 没有可用的分裂特征

    • 如果所有候选特征都已用完,则取数据集中的多数类作为叶节点类别。
  3. 数据集为空

    • 如果子节点对应的数据集为空(如:某特征值下没有样本),则设置该节点为叶节点,类别标记为父节点中样本的多数类。

继续分裂

  • 如果未满足上述停止条件,则递归对子节点执行相同的分裂过程。

示例

  1. 初始数据按“天气”分裂,生成子节点 A1(晴天)、A2(阴天)、A3(雨天)。
  2. 检查子节点:
    • D 晴天 D_\text{晴天} D晴天​:包含两类,继续分裂;
    • D 阴天 D_\text{阴天} D阴天​:全为“是”,设为叶节点;
    • D 雨天 ​ D_\text{雨天}​ D雨天:全为“否”,设为叶节点。
  3. D 晴天 D_\text{晴天} D晴天​​ 再选特征继续分裂。

通过递归,最终生成完整的决策树。

步骤 5:剪枝

剪枝是减少决策树复杂度、提升泛化能力的重要方法。剪枝分为 预剪枝(Pre-pruning)后剪枝(Post-pruning)。以下是剪枝的一个具体示例:

示例数据集

天气温度是否刮风湿度是否买票
晴天
晴天
阴天
阴天
雨天
雨天

生成的决策树

初始决策树为:

在这里插入图片描述

1. 预剪枝

预剪枝的思想:在分裂节点前,提前评估分裂是否有意义。如果分裂不能显著提高决策树性能,则阻止分裂。

过程

  1. 节点 1:是否刮风?

    • 在当前节点分裂前,计算 信息增益Gini 系数减少量
    • 如果分裂的增益不足(例如小于设定阈值 0.1),则阻止分裂,直接将当前节点作为叶节点。
  2. 假设分裂后的性能提升不明显:

    • 不再继续分裂。
    • 节点 1 直接成为叶节点,类别标记为“否”(因数据集中“否”的样本更多)。

结果树

节点1:叶子节点 -> 否


2. 后剪枝

后剪枝的思想:先生成完整决策树,再通过后序遍历判断是否需要剪掉子树,用叶节点代替。

过程

  1. 从叶节点往上回溯,逐个评估子树是否需要剪枝。

  2. 节点 2:天气?

    • 子树分类结果:
      • 晴天 -> 否
      • 雨天 -> 否
    • 两个叶子节点的类别相同,且整棵子树的分类错误率与将节点 2 直接作为叶节点的错误率相同。
    • 剪枝策略:将节点 2 直接替换为叶节点“否”。
  3. 节点 3:湿度?

    • 子树分类结果:
      • 高 -> 是
      • 中 -> 是
    • 两个叶子节点的类别相同,且整棵子树的分类错误率与将节点 3 直接作为叶节点的错误率相同。
    • 剪枝策略:将节点 3 直接替换为叶节点“是”。

**结果树

节点1:是否刮风? ├── 是 -> 叶子1:否 └── 否 -> 叶子2:是


剪枝的效果

  1. 模型简化:剪枝后,树结构更简单,更易于理解。
  2. 泛化能力提升:剪枝减少了对训练集的过拟合,提升了模型在测试集上的性能。

对比

  • 原始树错误率:假设在测试集上的错误率为 15%。
  • 剪枝后错误率:测试集错误率下降到 10%,显示模型的泛化性能提升。

相关文章:

机器学习系列-决策树

文章目录 1. 决策树原理决策树的构建流程 2. 案例步骤 1:计算当前节点的熵步骤 2:对每个特征计算分裂后的熵(1) 按“天气”分裂数据集(2) 计算分裂后的加权熵 步骤 3:计算分裂依据信息增益信息增益率GINI系数(二叉树) …...

H3C OSPF 多区域实验

目录 前言 实验拓扑 实验需求 实验解析 路由器配置 测试 前言 此篇文章为 OSPF多区域试验,建议先食用OSPF单区域实验,理解实验原理 学习基本配置,再来使用此篇,效果更佳!(当然如果你已经了解原理与基…...

【Python】 深入理解Python的单元测试:用unittest和pytest进行测试驱动开发

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 单元测试是现代软件开发中的重要组成部分,通过验证代码的功能性、准确性和稳定性,提升代码质量和开发效率。本文章深入介绍Python中两种主流单元测试框架:unittest和pytest,并结合测试驱动开发(TDD)…...

微信小程序中使用iconfont的详细教程

我们知道微信小程序对包体积有很严格的要求,最大不超过2M,而图片资源对包体检有至关重要的影响,所以使用自定义的图标字体来代替大量图标图片也是提高小程序性能的重要手段,总的来说在微信小程序中使用 IconFont(图标字…...

【小白学机器学习33】 大数定律python的 pandas.Dataframe 和 pandas.Series基础内容

目录 0 总结 0.1pd.Dataframe有一个比较麻烦琐碎的地方,就是引号 和括号 0.2 pd.Dataframe关于括号的原则 0.3 分清楚几个数据类型和对应的方法的范围 0.4 几个数据结构的构造关系 list → np.array(list) → pd.Series(np.array)/pd.Dataframe 1 python 里…...

hue 4.11容器化部署,已结合Hive与Hadoop

配合《Hue 部署过程中的报错处理》食用更佳 官方配置说明页面: https://docs.gethue.com/administrator/configuration/connectors/ 官方配置hue.ini页面 https://github.com/cloudera/hue/blob/master/desktop/conf.dist/hue.ini docker部署 注意: …...

“软件定义汽车”时代 | 产线海量数据刷写解决方案

一 背景 从起初汽车概念问世时期的“机械定义汽车”,到电力出现后的“电器定义汽车”,再到电子科技迅猛发展后的“电子定义汽车”,再到如今的“软件定义汽车”,可以看出,软件在车辆中扮演着越来越重要的角色。与此同时…...

DDoS对策是什么?详细解读DDoS攻击难以防御的原因与解决方案

近年来,DDoS(分布式拒绝服务)攻击的规模和频率不断增加。根据数据显示,2023年已观测到的最大攻击流量达到700Gbps,远远超出了许多企业的防御能力。DDoS攻击导致的网站性能问题如页面加载缓慢、频繁的504错误等现象&…...

【AI系统】Tensor Core 架构演进

自 Volta 架构时代起,英伟达的 GPU 架构已经明显地转向深度学习领域的优化和创新。2017 年,Volta 架构横空出世,其中引入的张量核心(Tensor Core)设计可谓划时代之作,这一设计专门针对深度学习计算进行了优…...

React前端框架基础知识详解

React 是由 Facebook 推出的一个用于构建用户界面的 JavaScript 库,现已成为前端开发中最流行的框架之一。React 的核心理念是通过组件化的方式构建用户界面,提升代码的可维护性和复用性。本文将为大家详细介绍 React 框架的基础知识,并带你快…...

Python学习——猜拳小游戏

import random player int(input(“请输入:剪刀 0,石头 1,布2”)) computer random.randint(0,2)# print(“玩家输入的是%d,电脑输入的是%d” %(player,computer)) 用于测试 if (player 0) and (computer 0) or (player 1) a…...

Spring:AOP通知类型

我们先来回顾下AOP通知: AOP通知描述了抽取的共性功能,根据共性功能抽取的位置不同,最终运行代码时要将其加入到合理的位置 通知具体要添加到切入点的哪里? 共提供了5种通知类型: 前置通知后置通知环绕通知(重点)返回后通知(了解)抛出异常后通知(了…...

【公益接口】不定时新增接口,仅供学习

文章日期:2024.11.24 使用工具:Python 文章类型:公益接口 文章全程已做去敏处理!!! 【需要做的可联系我】 AES解密处理(直接解密即可)(crypto-js.js 标准算法&#xff…...

php 导出excel 一个单元格 多张图片

public function dumpData(){error_reporting(0); // 禁止错误信息输出ini_set(display_errors, 0); // 不显示错误$limit $this->request->post(limit, 20, intval);$offset $this->request->post(offset, 0, intval);$page floor($offset / $limit) 1 ;$wh…...

Docker3:docker基础1

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

18. 【.NET 8 实战--孢子记账--从单体到微服务】--记账模块--账本

这一篇我们来一起为账本功能编写代码。账本功能的代码很简单,就是一些简单的CURD操作。 一、需求 我们先来看一下需求: 编号需求说明1新增账本1. 账本名称不能和用户已有的账本名称重复2删除账本1. 存在收支记录的账本不能删除3修改账本1. 修改的账本…...

GPT1.0 和 GPT2.0 的联系与区别

随着自然语言处理技术的飞速发展,OpenAI 提出的 GPT 系列模型成为了生成式预训练模型的代表。作为 GPT 系列的两代代表,GPT-1 和 GPT-2 虽然在架构上有着继承关系,但在设计理念和性能上有显著的改进。本文将从模型架构、参数规模、训练数据和…...

在 Taro 中实现系统主题适配:亮/暗模式

目录 背景实现方案方案一:CSS 变量 prefers-color-scheme 媒体查询什么是 prefers-color-scheme?代码示例 方案二:通过 JavaScript 监听系统主题切换 背景 用Taro开发的微信小程序,需求是页面的UI主题想要跟随手机系统的主题适配…...

uni-app 界面TabBar中间大图标设置的两种方法

一、前言 最近写基于uni-app 写app项目的时候,底部导航栏 中间有一个固定的大图标,并且没有激活状态。这里记录下实现方案。效果如下(党组织这个图标): 方法一:midButton的使用 官方文档:ta…...

leetcode 无重复字符的最长子串

3. 无重复字符的最长子串 已解答 中等 相关标签 相关企业 提示 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串的长度。 提示&#xff1a; 0 < s.length < 5 * 104s 由英文字母、数字、符号和空格组成 class Solution:def lengthOfLongest…...

【C++习题】14.滑动窗口_找到字符串中所有字母异位词

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解 题目链接&#xff1a; 438. 找到字符串中所有字母异位词 题目描述&#xff1a; 解法 暴力解法&#xff1a; 字母排序后运用滑动窗口解题。 滑动窗口哈希表&#xff1a; 我们可以优化一下&am…...

matplotlib知识

问题与解决 1.module backend_interagg has no attribute FigureCanvas问题 Matplotlib 后端不兼容: matplotlib 使用的后端&#xff08;如 backend_interagg&#xff09;可能与当前环境不匹配或未正确加载。 在代码中显式设置一个兼容的后端&#xff0c;例如 TkAgg、Qt5Ag…...

如何在ubuntu上调试core dump

启用core dump 确认ulimit 状态 ulimit -c 如果输出是0&#xff0c;表示core dump被禁用了 运行 ulimit -c unlimited 再次运行 ulimit -c 确认输出是ulimited 设置core dump路径和文件名格式 下面命令表示设置core dump文件在当前目录&#xff08;%e表示程序名&#x…...

Spring Boot教程之五:在 IntelliJ IDEA 中运行第一个 Spring Boot 应用程序

在 IntelliJ IDEA 中运行第一个 Spring Boot 应用程序 IntelliJ IDEA 是一个用 Java 编写的集成开发环境 (IDE)。它用于开发计算机软件。此 IDE 由 Jetbrains 开发&#xff0c;提供 Apache 2 许可社区版和商业版。它是一种智能的上下文感知 IDE&#xff0c;可用于在各种应用程序…...

排序算法1

排序算法是《数据结构与算法》中最基本的算法之一。 排序算法可以分为内部排序和外部排序&#xff0c;内部排序是数据记录在内存中进行排序&#xff0c;而外部排序是因排序的数据很大&#xff0c;一次不能容纳全部的排序记录&#xff0c;在排序过程中需要访问外存。 常见的内部…...

vector, list 模拟实现

vector 实现 成员属性/迭代器 template<class T> class vector { public:typedef T* iterator;typedef const T* const_iterator;iterator begin() {return _first; }iterator end() {return _end; }const_iterator begin() const {return _first; }const_iterator end…...

中国近代传奇战役

军事战略层面的传奇战役 孟良崮战役&#xff1a;1947年5月&#xff0c;陈毅、粟裕指挥华东野战军在山东孟良崮地区对国民党军进行的一次大规模山地运动歼灭战。此役&#xff0c;我军出其不意地对国民党最强大的王牌之首第七十四师开战&#xff0c;并将其全歼。战役中&#xff…...

微信小程序页面配置详解:从入门到精通

微信小程序页面配置详解:从入门到精通 引言 随着移动互联网的飞速发展,微信小程序作为一种新兴的应用形式,因其便捷性和丰富的功能而受到广泛欢迎。在小程序的开发过程中,页面配置是至关重要的一环。本文将深入探讨微信小程序的页面配置,帮助开发者从基础到高级逐步掌握…...

C#基础题

6.在屏幕上输出如下所示数列&#xff1a;1 1 2 3 5 8 13 21……an(an<10000) 7.求任意两个整数之间所有整数的平方和&#xff1f;&#xff08;要求从键盘输入任意两个整数&#xff0c;调用已定义函数求和&#xff09; 8.将一个二维数组行和列元素互换&#xff0c;存…...

前端开发中v-if 与v-show的区别

v-if v-if指令用于条件性地渲染一块内容。这个块只有当指令的表达式返回true时才会被渲染。 ‌工作原理‌&#xff1a;v-if通过动态地创建和销毁元素来控制元素的显示与隐藏。当条件为false时&#xff0c;对应的元素及其绑定的事件监听器和子组件都会被销毁&#xff1b;当条件…...

Django实现智能问答助手-基础配置

设置 Django 项目、创建应用、定义模型和视图、实现问答逻辑&#xff0c;并设计用户界面。下面是一步一步的简要说明&#xff1a; 目录&#xff1a; QnAAssistant/ # 项目目录 │ ├── QnAAssistant/ # 项目文件夹 │ ├── init.py # 空文件 │ ├── settings.py # 项目配…...

2024-11-25 二叉树的定义

一、基本概念 1.二叉树是n(n>0)个结点的有限集合: ① 或者为空二叉树&#xff0c;即n0。 ②或者由一个根结点和两个互不相交的被称为根的左子树和右子树组成。左子树和右子树又分别是一棵二叉树。 特点&#xff1a; ①每个结点至多只有两棵子树。 ②左右子树不能颠倒&am…...

构建高效 Redis 集群:从问题排查到最佳实践20241125

引言&#xff1a;Redis 集群的重要性 Redis 作为一款高性能的内存数据库&#xff0c;常用于高并发场景&#xff0c;比如缓存、消息队列和排行榜。通过构建 Redis 集群&#xff0c;可以进一步提升可用性与性能。然而&#xff0c;集群的部署并非一帆风顺&#xff0c;常会遇到各种…...

MyBatis多表映射

一、多表映射概念: 1.多表查询结果映射思路: MyBatis思想是:数据库不可能永远是你所想或所需的那个样子。 我们希望每个数据库都具备良好的第三范式或BCNF范式&#xff0c;可惜它们并不都是那样。 如果能有一种数据库映射模式&#xff0c;完美适配所有的应用程序查询需求&…...

[M最短路] lc743. 网络延迟时间(spfa最短路+单源最短路)

文章目录 1. 题目来源2. 题目解析 1. 题目来源 链接&#xff1a;743. 网络延迟时间 相关链接&#xff1a; [图最短路模板] 五大最短路常用模板) 2. 题目解析 怎么讲呢&#xff0c;挺抽象的…很久没写最短路算法了。反正也是写出来了&#xff0c;但脱离了模板&#xff0c;把…...

使用nvm下载多个版本node后提示vue不是内部或外部命令,执行vue create报.vuerc错误

一、使用nvm后执行含vue的相关命令提示vue不是内部或外部命令 前言&#xff1a;之前有项目需要切换node版本&#xff0c;我把node卸载了然后使用nvm下载多个版本的node。现在想通过vue create搭建vue2的项目时提示vue不是内部或外部命令&#xff0c;执行npm i vue/cli后仍然无…...

高端服务器可以防护哪些攻击?

高端服务器&#xff0c;尤其是那些专门设计用于防御网络攻击的高防服务器&#xff0c;能够提供多种层次的防护&#xff0c;以抵御不同类型的网络攻击。以下是高端服务器可以防御的主要攻击类型&#xff1a; 1. DDoS攻击&#xff08;分布式拒绝服务攻击&#xff09; 带宽消耗攻…...

助力花生作物智能化采摘,基于嵌入式端超轻量级模型LeYOLO全系列【n/s/m/l】参数模型开发构建花生种植采摘场景下花生果实智能检测计数系统

秋天&#xff0c;是大地回馈辛勤耕耘者的季节&#xff0c;金黄的稻田、硕果累累的果园、还有那一片片郁郁葱葱的花生地&#xff0c;共同绘制出一幅幅丰收的画卷。对于农民而言&#xff0c;秋收不仅仅是收获的季节&#xff0c;更是他们与土地情感交织、汗水与希望交织的见证。花…...

物联网无线局域网WiFi开发(二):WiFi_RTOS_SDK

一、编译工程模板 &#xff08;一&#xff09;搭建app目录 在SDK目录下新建app目录 cd 到examples目录下 拷贝smart_config下所有文件到app目录下 cd 到app目录下查看文件是否拷贝成功 (二)修改gen_misc.sh vim 打开gen_misc.sh进行编辑 修改SDK_PATH为当前SDK路径&#xf…...

GitLab|应用部署

创建docker-compose.yaml文件 输入docker-compose配置 version: 3.8 services:gitlab:image: gitlab/gitlab-ce:15.11.2-ce.0restart: alwayscontainer_name: gitlab-ceprivileged: truehostname: 192.168.44.235environment:TZ: Asia/ShanghaiGITLAB_OMNIBUS_CONFIG: |exter…...

替换Nacos的MySQL驱动

前言&#xff1a;替换Nacos的MySQL驱动能实现使Nacos支持MySQL8.0及以上版本的MySQL数据库 注&#xff1a;下述教程会使用命令先解压Nacos的jar包然后重新用命令把Nacos压缩成jar包&#xff0c;不然直接用压缩工具替换MySQL驱动后的Nacos是会启动不起来的&#xff08;因为没有替…...

链表内指定区间反转

描述 将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转&#xff0c;要求时间复杂度 O(n)O(n)&#xff0c;空间复杂度 O(1)O(1)。 例如&#xff1a; 给出的链表为 1→2→3→4→5→NULL1→2→3→4→5→NULL, m2,n4m2,n4, 返回 1→4→3→2→5→NULL1→4→3→2→5→NULL. …...

jmeter5.6.3安装教程

一、官网下载 需要提前配置好jdk的环境变量 jmeter官网&#xff1a;https://jmeter.apache.org/download_jmeter.cgi 选择点击二进制的zip文件 下载成功后&#xff0c;默认解压下一步&#xff0c;更改安装路径就行(我安装在D盘) 实用jmeter的bin目录作为系统变量 然后把这…...

JavaScript高级程序设计基础(五)

上接语言基础&#xff1a;JavaScript高级程序设计基础&#xff08;四&#xff09; 本节内容较简单&#xff0c;有一定语言基础的可以跳过 2.5 语句 2.5.1 if语句 具体作用不做过多赘述。需要注意的是&#xff0c;在判断条件里会自动调用Boolean()&#xff1b;并且在执行语句…...

Stable Diffusion 3 部署笔记

SD3下载地址&#xff1a;https://huggingface.co/stabilityai/stable-diffusion-3-medium/tree/main https://huggingface.co/spaces/stabilityai/stable-diffusion-3-medium comfyui 教程&#xff1a; 深度测评&#xff1a;SD3模型表现如何&#xff1f;实用教程助你玩转Stabl…...

深度解析:Vue 自定义指令到底是什么?快来了解

自定义指令的概述 在Vue中,自定义指令是开发者自定义的,用来在DOM元素上执行特定操作的功能。Vue本身提供了多种内建指令(如v-bind, v-model, v-for, v-if等),但有时候我们需要创建自己的指令来实现一些特殊功能。这些功能可以是对DOM的直接操作,或者是为了满足特定的业…...

CVE-2022-4230

打开什么都没有 使用dirsearch扫描到一个wp-admin 访问wp-admin是一个登陆页面 账号密码都在标题中 登陆后是这个页面 在WP Statistics < 13.2.9 – 经过身份验证的 SQLi |CVE 2022-4230 |插件漏洞 (wpscan.com)中&#xff0c;里边有一段对漏洞的描述。 https://wpscan.com…...

什么是 WPF 中的依赖属性?有什么作用?

依赖属性&#xff08;Dependency Property&#xff09;是 WPF 的一个核心概念&#xff0c;它为传统的 .NET 属性提供了增强功能&#xff0c;支持绑定、样式、动画和默认值等功能。通过依赖属性&#xff0c;WPF 提供了一种灵活的数据驱动的方式来处理 UI 属性。 1. 什么是依赖属…...

『 Linux 』网络层 - IP协议 (二)

文章目录 路由NAT技术分片与组装分片的组装IP协议分片的短板 路由 通常情况路由器具备了一个非常重要的功能,即构建子网; 同时路由器需要实现跨网络通信,说明路由器必须存在两个或以上的IP地址,通常在路由器中可以看到几个接口,分别是一个WAN口和几个LAN口; WAN口IP被称为公网I…...

Linux开发者的CI/CD(11)jenkins变量

文章目录 1. **环境变量 (Environment Variables)**常见的环境变量:示例:2. **构建参数 (Build Parameters)**常见的构建参数类型:示例:3 **在 `stages` 块内定义局部变量**示例:使用 `script` 步骤定义局部变量4 变量引用陷阱在 Jenkins 中,变量是自动化流程中非常重要的…...