机器学习中的方差与偏差
文章目录
- 方差与偏差
- 1.1 数据
- 1.1.1 数据的分布
- 1.1.2 拟合
- 1.2 方差与偏差
- 1.2.1 泛化误差的拆分
- 1.2.2 理解方差偏差
- 1.3 方差-偏差trade-off
- 1.3.1 方差-偏差trade-off
- 1.3.2 方差与偏差诊断
- 1.4 降低策略
- 1.4.1 噪声
- 1.4.2 高偏差
- 1.4.3 高方差
方差与偏差
1.1 数据
1.1.1 数据的分布
-
我们考虑一个简单的多项式回归问题,假设存在一个二次分布函数 f ( x ) f(x) f(x) 如下图所示
我们需要从中抽取一些(图中只画了5个,假设足够多)数据来进行我们的回归任务
而现实中的数据往往都包含一定的噪声 ,所以我们抽样过程,也需要模拟这一步,我们用 y y y 表示我们抽样出的数据点的真实值 y t r u e y_{true} ytrue , 另 $y = f(x) + \epsilon $ ,其中 ϵ \epsilon ϵ 为我们自己加上的噪声,抽样完成的点可以如下图所示:
好了,现在我们可以抛弃 f ( x ) f(x) f(x) (实际中我们也只知道 y 而不知道y的分布,或者说我们通常所说的模型$$
-
总结下即:从分布函数 f ( x ) f(x) f(x) 中,以 y = f ( x ) + ϵ y=f(x) + \epsilon y=f(x)+ϵ 采样 N N N个样本数据 ,用D表示数据,则
D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) } = { ( x i , y i ) } i = 1 N \begin{aligned} \mathop{D} &= \{ (x_1,y_1),(x_2,y_2),...,(x_n,y_n) \} \\ &=\{(x_i,y_i)\}_{i=1}^{N} \end{aligned} D={(x1,y1),(x2,y2),...,(xn,yn)}={(xi,yi)}i=1N
其中 ϵ \epsilon ϵ 服从与均值为 0,方差为 σ 2 \sigma^2 σ2 的正态分布
ϵ ∼ N ( 0 , σ 2 ) \epsilon \sim \mathop{N}(0,\sigma^2) ϵ∼N(0,σ2)
1.1.2 拟合
-
如下图,我们分别使用不同的多项式来拟合,怎样判断哪个模型的好坏呢?
备注:给定 n + 1 n+1 n+1 个数据点,存在唯一一个最高阶为 n n n 的多项式通过全部数据点。
1.2 方差与偏差
1.2.1 泛化误差的拆分
-
从分布函数 f ( x ) f(x) f(x) 中,我们以 y = f ( x ) + ϵ y=f(x) + \epsilon y=f(x)+ϵ 采样 N N N个样本数据 D = { ( x i , y i ) } i = 1 N D=\{(x_i,y_i)\}_{i=1}^{N} D={(xi,yi)}i=1N ,设我们学习到的多项式模型用 f ^ ( x ) \hat f (x) f^(x) 表示,损失函数使用Loss 使用MSE
M S E = ( y − f ^ ( x ) ) 2 \mathop{MSE} = \left(y-\hat f(x)\right)^2 MSE=(y−f^(x))2
为了方便公式推导,使用 f f f 代替 f ( x ) f(x) f(x),使用 f ^ \hat f f^ 代替 f ^ ( x ) \hat f(x) f^(x) ,则我们的泛化误差(期望风险 E D E_D ED)表示为
E D = E D [ L o s s ] = E [ ( y − f ^ ) 2 ] = E [ ( f + ϵ − f ^ ) 2 ] = E [ ( f + ϵ − f ^ + E [ f ^ ] − E [ f ^ ] ) 2 ] = E [ ( ( f − E [ f ^ ] ) + ϵ − ( f ^ − E [ f ^ ] ) ) 2 ] = E [ ( f − E [ f ^ ] ) 2 + ϵ 2 + ( f ^ − E [ f ^ ] ) 2 ] + E [ 2 ⋅ ( f − E [ f ^ ] ) ⋅ ϵ − 2 ⋅ ( f − E [ f ^ ] ) ⋅ ( f ^ − E [ f ^ ] ) − 2 ⋅ ( f ^ − E [ f ^ ] ) ⋅ ϵ ] = E [ ( f − E [ f ^ ] ) 2 + ϵ 2 + ( f ^ − E [ f ^ ] ) 2 ] = B i a s [ f ^ ] 2 + V a r [ f ^ ] + σ 2 \begin{aligned} E_D & = E_D[Loss] \\ &=E[(y-\hat f)^2] \\ &=E[(f+\epsilon-\hat f)^2] \\ &=E[\left(f+\epsilon-\hat f + E[\hat f] - E[\hat f] \right)^2]\\ &=E[\left((f- E[\hat f])+\epsilon-(\hat f - E[\hat f]) \right)^2]\\ &=E\left[(f-E[\hat f])^2 + \epsilon^2 + (\hat f - E[\hat f])^2 \right]\\ &+E\left[ 2\cdot(f- E[\hat f])\cdot\epsilon-2\cdot(f- E[\hat f])\cdot(\hat f - E[\hat f])-2\cdot(\hat f - E[\hat f])\cdot\epsilon \right] \\ &=E\left[(f-E[\hat f])^2 + \epsilon^2 + (\hat f - E[\hat f])^2\right]\\ &=Bias[\hat f]^2 +Var[\hat f] + \sigma^2 \end{aligned} ED=ED[Loss]=E[(y−f^)2]=E[(f+ϵ−f^)2]=E[(f+ϵ−f^+E[f^]−E[f^])2]=E[((f−E[f^])+ϵ−(f^−E[f^]))2]=E[(f−E[f^])2+ϵ2+(f^−E[f^])2]+E[2⋅(f−E[f^])⋅ϵ−2⋅(f−E[f^])⋅(f^−E[f^])−2⋅(f^−E[f^])⋅ϵ]=E[(f−E[f^])2+ϵ2+(f^−E[f^])2]=Bias[f^]2+Var[f^]+σ2
其中:- 第四步中是同时加上和减去一个 E [ f ^ ] E[\hat f] E[f^]
- ϵ ∼ N ( 0 , σ 2 ) → E [ ϵ ] = 0 , V a r [ ϵ ] = σ 2 \epsilon \sim N(0,\sigma^2)\to E[\epsilon] = 0,Var[\epsilon] = \sigma^2 ϵ∼N(0,σ2)→E[ϵ]=0,Var[ϵ]=σ2
-
总结就是:使用以MSE为损失函数,其泛化误差可以分解为由偏差、方差和数据本身噪音的组合
E D = B i a s [ f ^ ] 2 + V a r [ f ^ ] + σ 2 E_D=Bias[\hat f]^2 +Var[\hat f] + \sigma^2 ED=Bias[f^]2+Var[f^]+σ2
其中,噪声在统计上市无法被模型减少的,所以主要关注组成泛化误差的两个主要部分- 由偏差bias导致的误差
- 由方差vars导致的误差
1.2.2 理解方差偏差
-
上面从数学公式的角度推导出以MSE为损失函数,其泛化误差可以分解为由偏差、方差和数据本身噪音的组合,现在以图形的方式更为一般的描绘方差、偏差、泛化误差之间的关系(图中没法打出 f ^ \hat f f^ ,用 f ∗ f* f∗表示 )
偏差(Bias)
: 偏差衡量了模型 f ^ \hat f f^ 的 预测值与 实际值 f ( x ) f(x) f(x) 之间的偏离关系(图中 y = f ( x ) y=f(x) y=f(x) 未考虑噪声),偏差越大,越偏离真实数据。方差(vars)
:模型 f ^ \hat f f^ 的 预测值的方差,描述预测值的变化范围,离散程度,方差越大,预测值的分布越散。
-
下面是4种方差和偏差的组合
- 低方差vs低偏差 : 这是最好的情况
- 低方差vs高偏差:通常出现在刚开始训练时
3. 高方差vs低偏差:一般最常见的过拟合情况,模型较为贴合训练集,导致其泛化能力差
4. 高方差vs高偏差:这是最坏的情况,意味着不仅准确度低,而且数据差异还大
-
理想情况下,我们希望得到一个不论在训练集还是未知测试集上都表现非常好的模型,不幸的是我们通常不可能完全做到这两件事。以上面回归的例子来说,我们分别使用不同的多项式来拟合,每个不同的多项式即是一个模型,不同模型的选择其实也是在方差和偏差之间做权衡
通过方差和偏差的诊断可以帮助弄清如何提升模型的表现,多项式次数越高,代表模型越复杂,可以学到的东西就越多,如最后一个4阶多项式
以图中的5个数据点举例,有且只有唯一个四阶多项式能经过这5个点,这样就意味着该模型将整体数据已经全部记住,那么如果我们来了一个新的数据就会导致模型完全无法识别出。
-
事实上,通常情况下模型的训练误差和泛化误差之间的关系,以及泛化误差与方差偏差之间的关系可以由以下两张图表示
将这两张图对应到多项式回归的例子中则是,我们给定了数据 D ,期望利用多项式回归去学习出一个曲线 f ^ \hat f f^,那么此时我们可以通过拟合多项式的次数来控制学习曲线的复杂度了(理想状态下):
- 刚开始可以尝试一阶线性方程,此时学习器的拟合能力弱,学习曲线预测值和我们真实值之间的差距较大,此时偏差主导了泛化误差,而此时训练数据的扰动不足以使学习器产生显示变化;
- 随着我们将多项式次数增加到二阶,学习器的拟合能力增强了,意味着学习曲线预测值和我们真实值之间的差距在逐渐拉小,即偏差在下降,此时的方差会逐渐上升并开始影响泛化误差;
- 最后我们将多项式的次数增加到四阶,则我们学到了唯一一条穿过每个点的4阶多项式曲线(假设之后5个数据点),此时学习器相当于记住了整个数据集,学习曲线的预测值和真实值完美重叠,偏差为0,但是这时候若有个新的数据进来,我们的学习曲线预测值会发生显著的变化。
可以总结为:
- 多项式次数越高,模型越复杂,模型越复杂,在训练集上的训练误差越低(甚至可以记住整个数据集,即训练误差降到0);
- 随着训练误差降低(模型变复杂),泛化误差先上升后降低;
- 偏差会随着模型复杂度增高而降低,方差会随着模型复杂度增高而上升
1.3 方差-偏差trade-off
1.3.1 方差-偏差trade-off
-
在泛化误差的拆分公式部分,得出要关注组成泛化误差的两个主要部分
- 由偏差bias导致的误差
- 由方差vars导致的误差
而通过方差、偏差与泛化误差变化图可以看出,偏差与方差并非同增同涨的关系,通常情况下我们都需要进行方差和偏差的权衡,意味着我们
必须减少其中一项而增加另一项
,对应于我们的多项式回归问题来说,训练误差、泛化误差之间的关系图如下同时我们可以确定(权衡)相对较好的模型
1.3.2 方差与偏差诊断
-
从上述图我们还可以得出一些比较有用的经验法则,最简单的判断模型是受方差还是受偏差影响较多的办法是:
- 如果你的模型在训练集上表现非常好,但是在测试集上却非常糟糕,这是典型的过拟合问题,是方差过大问题
- 若你的模型在训练集、测试集上都表现不好,这是典型的欠拟合问题,是偏差过大问题
欠拟合 = 偏差问题 过拟合 = 方差问题 欠拟合=偏差问题 \\ 过拟合=方差问题 欠拟合=偏差问题过拟合=方差问题
-
再次总结下方差问题与偏差问题的特征
-
高偏差问题
- 高训练误差
- 高测试误差
-
高方差问题
- 低训练误差
- 特别高测试误差
-
-
诊断之后,我们需要做什么呢?当然是想办法
解决,当然解决是不可能解决的,真如之前说过的,偏差和方差是有冲突的,只能尽量降低影响,降低的方法汇总参考下图
1.4 降低策略
1.4.1 噪声
-
如上述采样 y = f ( x ) + ϵ y=f(x) + \epsilon y=f(x)+ϵ 中,噪声 ϵ \epsilon ϵ 在统计意义上是无法被消除的,但是可以从数据的采集,清洗,数据预处理等方面提升数据的质量来达到降低数据噪声的目的
1.4.2 高偏差
-
这里将重点放在
增加模型复杂度
上- 让相同的算法变得更加复杂,通常从模型结构入手。 例如,
- 回归模型可以用更高阶多项式
- 决策树可以有更多的深度
- 更改为更复杂的算法/模型。 例如,
- 将回归算法更改为神经网络
- 将决策树更改为随机森林
- 让相同的算法变得更加复杂,通常从模型结构入手。 例如,
-
然而,增加模型复杂度并不一定是好事,我们可能会经历下面的困境
- 模型越复杂也意味着越多计算开销(例如单个决策树与 100 棵树的随机森林)
- 更多的模型复杂性依赖于更复杂的模型特征工程
- 更复杂通常意味着相反解释能力。 当我们选择更复杂的模型,我们的模型因为更难解释,因为大多数复杂的模型都很难被解释
- 更加复杂可能会增加以下风险:过拟合
1.4.3 高方差
-
获取更多的数据
如果有足够的计算能力来训练更多的数据,获取更多的数据总是最好的选择,但是获取更多的数据通常是既昂贵又耗时
-
使用正则化
防止过拟合在分类或者回归问题中,正则化项通常是指在损失函数中添加额外项的过程,通常是为了引入对更简单模型的偏好(防止模型过度复杂)。
-
减少特征数量
过拟合的主要解决方案之一是减少特征数量
- 手动选择需要保留的特征(前向选择,后向选择,方差过滤、互信息、F检验、相关性等过滤法)
- 自动选择要 保留或扔掉的特征(embedding,warapper等)
缺点:在丢弃特征的过程中,可能会有有用的信息遗失
-
超参数调优
一个简单的算法与良好的调整参数往往会比一个不充分调参的复杂算法产生的模型效果更好,超参数可以控制模型的复杂性(正则化),可以控制训练算法的行为,而超参数调整是为算法寻找最优超参数的过程,常用的超参数调优算法有
- 网格搜索
- 对半搜索
- 随机搜索
- 贝叶斯优化
那么什么是参数和超参数的区别呢?
超参数
:超参数是在训练算法开始之前指定的,无法优化 在训练算法本身中。它们是模型的外部参数。有一下的特点:- 通常用于帮助估计模型参数
- 无法从数据中估计
- 它们通常由从业者指定
- 通常不会在训练过程中改变。
模型参数
:模型参数取决于你用什么算法,用于拟合数据,它们是模型的外部参数。有以下的特点:- 模型在进行预测时需要它们
- 它们是从数据中估计或学习的
- 它们通常不由从业者手动设置
- 值通常由学习算法选择,如线性回归或神经网络的权重
- 会在训练过程中改变。
相关文章:
机器学习中的方差与偏差
文章目录 方差与偏差1.1 数据1.1.1 数据的分布1.1.2 拟合 1.2 方差与偏差1.2.1 泛化误差的拆分1.2.2 理解方差偏差 1.3 方差-偏差trade-off1.3.1 方差-偏差trade-off1.3.2 方差与偏差诊断 1.4 降低策略1.4.1 噪声1.4.2 高偏差1.4.3 高方差 方差与偏差 1.1 数据 1.1.1 数据的分…...
Ubuntu 22.04虚拟机安装配置调整(语言输入法字体共享剪切板等等
2025.01.07安装配置Ubuntu 22.04 记一下 快捷键 截屏 在设置-键盘-快捷键查看 跟搜到的不一样…不过shiftprint感觉也够用 安装 用的是VMware 参考:VMware中安装配置Ubuntu(2024最新版 超详细) 调教(? 语言 改了…...
[创业之路-255]:《华为数字化转型之道》-1-主要章节、核心内容、核心思想
目录 前言:数字化转型对于企业而言,是一种全方位的变革 一、主要章节 1、认知篇(第1~2章)- Why 2、方法篇(第3~5章)- How 3、实践篇(第6~10章)- 实践 4、平台篇(第…...
Java 接口安全指南
Java 接口安全指南 概述 在现代 Web 应用中,接口(API)是前后端交互的核心。然而,接口的安全性常常被忽视,导致数据泄露、未授权访问等安全问题。本文将详细介绍 Java 中如何保障接口安全,涵盖以下内容&am…...
Redis学习笔记1【数据类型和常用命令】
Redis学习笔记 基础语法 1.数据类型 String: 最基本的类型,可以存储任何数据,例如文本或数字。示例值为 hello world。Hash: 用于存储键值对,适合存储对象或结构体。示例值为 {"name": "Jack", "age": 21}。…...
Oracle graph 图数据库体验-安装篇
服务端安装 环境准备 安装数据库 DOCKER 安装23AI FREE ,参考: https://container-registry.oracle.com/ords/f?p113:4:111381387896144:::4:P4_REPOSITORY,AI_REPOSITORY,AI_REPOSITORY_NAME,P4_REPOSITORY_NAME,P4_EULA_ID,P4_BUSINESS_AREA_ID:1…...
Android 13 动态显示隐藏 HomeButton,RecentsButton
com.android.launcher3.taskbar.NavbarButtonsViewController.initButtons mEnabledValue状态<T> StatePropertyHolder(T target, IntPredicate enabledCondition,Property<T, Float> property, float enabledValue, float disabledValue) {mEnableCondition = ena…...
前端开发中的状态管理与网络请求封装
本文将对比 Vuex 和 Pinia 在状态管理中的使用,并介绍如何封装 Axios 进行网络请求。此外,我们还将讨论动态路由、404 页面跳转以及面包屑导航的实现。 话不多说,正文开始~~~ 一、状态管理:Vuex 与 Pinia 对比 1. Vuex Vuex 是…...
AI 大爆发时代,音视频未来路在何方?
AI 大模型突然大火了 回顾2024年,计算机领域最大的变革应该就是大模型进一步火爆了。回顾下大模型的发展历程: 萌芽期:(1950-2005) 1956年:计算机专家约翰麦卡锡首次提出“人工智能”概念,标志…...
30分钟内搭建一个全能轻量级springboot 3.4 + 脚手架 <5> 5分钟集成好caffeine并使用注解操作缓存
快速导航 <1> 5分钟快速创建一个springboot web项目 <2> 5分钟集成好最新版本的开源swagger ui,并使用ui操作调用接口 <3> 5分钟集成好druid并使用druid自带监控工具监控sql请求 <4> 5分钟集成好mybatisplus并使用mybatisplus generator自…...
STM32 FreeRTOS中断管理
目录 FreeRTOS的中断管理 1、STM32中断优先级管理 2、FreeRTOS任务优先级管理 3、寄存器和内存映射寄存器 4、BASEPRI寄存器 5、FreeRTOS与STM32中断管理结合使用 vPortRaiseBASEPRI vPortSetBASEPRI 6、FromISR后缀 7、在中断服务函数中调用FreeRTOS的API函数需注意 F…...
第10章:Python TDD优化货币类方法与引入工厂方法
写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…...
嵌入式硬件篇---基本组合逻辑电路
文章目录 前言基本逻辑门电路1.与门(AND Gate)2.或门(OR Gate)3.非门(NOT Gate)4.与非门(NAND Gate)5.或非门(NOR Gate)6.异或门(XOR Gate&#x…...
回归人文主义,探寻情感本质:从文艺复兴到AI时代,我的情感探索之旅
回归人文主义,探寻情感本质:从文艺复兴到AI时代,我们的情感探索之旅 多年来,我们的团队一直关注人工智能,尤其是AI在音乐领域的应用研究。随着技术的不断演进,我们也不断反思:在“算法、代码、…...
接上回--综合AIDemo测试
一,前言 上回外挂了知识库之后,我们需要使用知识库中的信息,让AI为我们实际处理业务上的需求。 这里我们让AI扮演公司的人事助手,帮我们处理员工请假的业务。 具体流程如下 感知用户需要请假提取用户请假信息获取用户数据库中…...
几何数据结构之四叉树与八叉树
几何数据结构之四叉树与八叉树 四叉树的定义四叉树深度的计算公式推导假设:计算过程:1. 划分空间:2. 节点容纳的最小距离:3. 解出深度:4. 考虑常数项: 总结: 八叉树 四叉树的定义 四叉树&#…...
postman请求参数化
postman界面介绍 一、使用环境变量(Environment Variables)进行参数化 1、在请求中使用环境变量 在请求的url、请求头(Headers)、请求体(Body)等部分都可以使用环境变量。 URL 部分示例 点击 Postman 界面右上角的 “眼睛” 图标(Environment Quick Look)打开环境管理…...
java实现word转html(支持docx及doc文件)
private final static String tempPath "C:\\Users\\xxx\\Desktop\\Word2Html\\src\\test\\";//图片及相关文件保存的路径public static void main(String argv[]) {try {JFileChooser fileChooser new JFileChooser();fileChooser.setDialogTitle("Select a …...
<电子幽灵>开发笔记:BAT基础笔记(一)
BAT脚本基础笔记(一) 介绍 费曼学习法最重要的部分,即把知识教给一个完全不懂的孩子——或者小白。 为了更好的自我学习,也为了让第一次接触某个知识范畴的同学快速入门,我会把我的学习笔记整理成电子幽灵系列。 提示:作为低代码…...
Leetcode::3427.变长子数组求和
给你一个长度为 n 的整数数组 nums 。对于 每个 下标 i(0 < i < n),定义对应的子数组 nums[start ... i](start max(0, i - nums[i]))。 返回为数组中每个下标定义的子数组中所有元素的总和。 子数组 是数组中…...
通过以太网加载linux内核、设备树、根文件系统方法(以stm32MP135为例)
0 硬件平台 正点原子stm32MP135开发板 1 通过以太网加载linux内核、设备树、根文件系统方法(以stm32MP135为例) 在产品正式发布前,为了调试方便,我们可以使用以太网加载linux内核、设备树、根文件系统以加快调试速度。本文以stm3…...
mac配置stable diffusion以及模型出图优化
1. 基础stable diffusion webui安装 使用的工程是stable-diffusion-webui,直接clone下来即可。 然后创建一个conda环境,python为3.9 激活conda环境后,执行./webui.sh即可。脚本会自动安装必要的包,然后启动网页。 默认有一个sd…...
LeetCode热题100(子串篇)
LeetCode热题100 说是子串,其实是子区间~ 560. 和为 K 的子数组 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 思路 思路: 和为k的子数组,看到…...
从密码学原理与应用新方向到移动身份认证与实践
相关学习资料放下面啦! 记得关注❤️~后续分享更多资料 通过百度网盘分享的文件:从密码学原理与应... 链接https://pan.baidu.com/s/1mHpHkvPuf8DUwReQkoYQlw?pwdGza7 提取码:Gza7 复制这段内容打开「百度网盘APP 即可获取」 记…...
【Flink系列】9. Flink容错机制
9. 容错机制 在Flink中,有一套完整的容错机制来保证故障后的恢复,其中最重要的就是检查点。 9.1 检查点(Checkpoint) 9.1.1 检查点的保存 1)周期性的触发保存 “随时存档”确实恢复起来方便,可是需要我…...
【物联网】ARM核介绍
文章目录 一、芯片产业链1. CPU核(1)ARM(2)MIPS(3)PowerPc(4)Intel(5)RISC-V 2. SOC芯片(1)主流厂家(2)产品解决方案 3. 产品 二、ARM核发展1. 不同架构的特点分析(1)VFP(2)Jazelle(3)Thumb(4)TrustZone(5)SIMD(6)NEON 三、ARM核(ARMv7)工作模式1. 权限级别(privilege level)2.…...
spring的事物管理的认知
事物 它是一个原子操作要么全部不执行,要么全部执行成功,如果有一个失败也会撤销,它保证用户每一次的操作都是可靠的,即使时出现了错误也不至于破坏数据的完整性 它包含了四种特性: 原子性:保证事物要么…...
QT跨平台应用程序开发框架(3)—— 信号和槽
目录 一,基本概念 二,connect函数使用 2.1 connect 2.2 Qt内置信号和槽 2.3 一些细节 三,自定义信号和槽 3.1 自定义槽函数 3.2 自定义信号 3.3 带参数的信号槽 四,信号和槽的意义 五,信号和槽断开连接 六&…...
技术面试中的软素质技巧性答复集锦
1、请你自我介绍一下你自己? 回答提示:一般人回答这个问题过于平常,只说姓名、年龄、爱好、工作经验,这些在简历上都有。其实,企业最希望知道的是求职者能否胜任工作,包括:最强的技能、最深入研…...
JavaWeb项目——如何处理管理员登录和退出——笔记
一、知识点 1、WebServlet注解的使用 WebServlet注解是Servlet 3.0引入的一个特性,它允许开发者在Servlet类上使用注解来声明Servlet的一些属性,从而避免在web.xml文件中进行配置。这种方式简化了Servlet的配置过程,使得代码更加简洁&#…...
函数递归的介绍
1.递归的定义 在C语言中,递归就是函数自己调用自己 上面的代码就是 main 函数在函数主体内 自己调用自己 但是,上面的代码存在问题:main 函数反复地 自己调用自己 ,不受限制,停不下来。 最终形成死递归,…...
昇腾环境ppstreuct部署问题记录
测试代码 我是在华为昇腾910B3上测试的PPStructure。 import os import cv2 from PIL import Image #from paddleocr import PPStructure,draw_structure_result,save_structure_res from paddleocr_asyncio import PPStructuretable_engine PPStructure(show_logTrue, imag…...
《知识图谱:鸿蒙NEXT中人工智能的智慧基石》
在鸿蒙NEXT系统的人工智能应用中,知识图谱技术犹如一座智慧基石,为系统的智能化提供了强大的知识支撑,开启了更智能、更高效、更个性化的交互新时代。 提升语义理解能力 知识图谱以其结构化的知识表示方式,将各种实体和它们之间…...
Springboot项目Jackson支持多种接收多种时间格式
前言 在springboot项目中经常会使用Jackson框架,当前端给后端传输时间类型时,我们一般需要先配置好时间格式,否则后端无法接收。以下是一些配置方法 统一配置 spring:jackson:time-zone: GMT+8date-format: yyyy-MM-dd HH:mm:ss这种配置就是要求前端统一传输的格式是yyyy-…...
go语言zero框架通过chromedp实现网页在线截图的设计与功能实现
在 GoZero 框架中实现网页在线截图的功能,可以通过集成 chromedp 库来控制 Chrome 浏览器进行截图。chromedp 是一个基于 Chrome DevTools 协议的 Go 包,可以用来在 Go 程序中模拟浏览器操作,如页面截图、DOM 操作、表单提交等。 下面是一个…...
基于深度学习的视觉检测小项目(十四) 用SQLite数据库进行用户管理
在开始做用户管理之前,先要了解一下SQLite数据库的基础知识:https://blog.csdn.net/xulibo5828/category_12785993.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12785993&sharereferPC&sharesourcexulibo5828&sharefrom…...
【2024年华为OD机试】 (B卷,100分)- 敏感字段加密(Java JS PythonC/C++)
一、问题描述 题目描述 给定一个由多个命令字组成的命令字符串: 字符串长度小于等于 127 字节,只包含大小写字母、数字、下划线和偶数个双引号;命令字之间以一个或多个下划线 _ 进行分割;可以通过两个双引号 "" 来标识包含下划线 _ 的命令字或空命令字(仅包含…...
图像去雾数据集的下载和预处理操作
前言 目前,因为要做对比实验,收集了一下去雾数据集,并且建立了一个数据集的预处理工程。 这是以前我写的一个小仓库,我决定还是把它用起来,下面将展示下载的路径和数据处理的方法。 下面的代码均可以在此找到。Auo…...
Vue3数据响应式原理
什么是数据响应式 当数据变化时,引用数据的函数(副作用函数)自动重新执行。 即数据触发了函数的响应,如:视图渲染中使用了某数据,数据改变后,视图跟着自动更新。 触发者:数据 响应者…...
5.最长回文子串--力扣
给你一个字符串 s,找到 s 中最长的 回文子串。 示例 1: 输入:s “babad” 输出:“bab” 解释:“aba” 同样是符合题意的答案。 示例 2: 输入:s “cbbd” 输出:“bb” 原题如上&…...
ChatGPT大模型极简应用开发-CH1-初识 GPT-4 和 ChatGPT
文章目录 1.1 LLM 概述1.1.1 语言模型和NLP基础1.1.2 Transformer及在LLM中的作用1.1.3 解密 GPT 模型的标记化和预测步骤 1.2 GPT 模型简史:从 GPT-1 到 GPT-41.2.1 GPT11.2.2 GPT21.2.3 GPT-31.2.4 从 GPT-3 到 InstructGPT1.2.5 GPT-3.5、Codex 和 ChatGPT1.2.6 …...
python学opencv|读取图像(三十九 )阈值处理Otsu方法
【1】引言 前序学习了5种阈值处理方法,包括(反)阈值处理、(反)零值处理和截断处理,还学习了一种自适应处理方法,相关文章链接为: python学opencv|读取图像(三十三)阈值处理-灰度图像-CSDN博客 python学o…...
统信V20 1070e X86系统编译安装mysql-5.7.44版本以及主从构建
设备信息 操作系统版本架构CPU内存备注统信UOS V20 1070eX864C8G此配置仅做编译安装验证,持续运行或数据量增长大请自行评估资源配置。统信UOS V20 1070eX864C8G 资源包 该包包含mysql-5.7.44源码包、boost资源包、统信编译mysql-5.7.44安装包 通过网盘分享的文件…...
麒麟LINUX V10SP3 2401安装ORACLE 12.2.1 runInstaller直接报UNZIP格式不对
好久没有安装ORACLE了,一般都是RHEL上安装得比较多,这不,现在大家都是选择国产操作系统来安装数据库了,以前在龙蜥,欧拉,麒麟上也安装过,都没有问题,想来在麒麟LINUX v10sp3 2401上面…...
10 为什么系统需要引入分布式、微服务架构
java技术的发展 在java开始流行起来之后,主要服务于企业家应用,例如ERP,CRM等等,这些项目是为企业内部员工使用,我们的思维是怎么用设计模式,如何封装代码。让开发人员关注到业务上去,系统也就那么几十几百…...
【Web】2025西湖论剑·中国杭州网络安全安全技能大赛题解(全)
目录 Rank-l Rank-U sqli or not Rank-l username存在报错回显,发现可以打SSTI 本地起一个服务,折半查找fuzz黑名单,不断扔给fenjing去迭代改payload from flask import Flask, request, render_template_stringapp Flask(__name__)app…...
openharmony应用开发快速入门
开发准备 本文档适用于OpenHarmony应用开发的初学者。通过构建一个简单的具有页面跳转/返回功能的应用(如下图所示),快速了解工程目录的主要文件,熟悉OpenHarmony应用开发流程。 在开始之前,您需要了解有关OpenHarmon…...
解决npm install安装出现packages are looking for funding run `npm fund` for details问题
当我们运行npm install时,可能会收到类似以下的提示信息:“x packages are looking for funding.” 这并不是错误提示,也不会影响项目的正常运行。其实实在提醒有一些软件包正在寻求资金支持。 根据提示输入npm fund可以查看详细的信息&#…...
python助力WRF自动化运行
对大部分人而言,特别是新用户,WRF模式的安装繁琐且不必要,可以作为后续进阶掌握的技能,本学习跳过繁琐的安装步骤,直接聚焦模式的运行部分,通过短平快的教学,快速掌握模式运行。进一步将python语…...
Go-知识 版本演进
Go-知识 版本演进 Go release notesr56(2011/03/16)r57(2011/05/03)Gofix 工具语言包工具小修订 r58(2011/06/29)语言包工具小修订 r59(2011/08/01)语言包工具 r60(2011/09/07)语言包工具 [go1 2012-03-28](https://golang.google.cn/doc/devel/release#go1)[go1.1 2013-05-13]…...