机器学习 第8章-集成学习

机器学习 第8章-集成学习

8.1 个体与集成

集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务,有时也被称为多分类器系统(multi-classifersystem)、基于委员会的学习(committee-based learning)等。

图8.1显示出集成学习的一般结构:先产生一组“个体学习器”(individual learner),再用某种策略将它们结合起来。个体学习器通常由一个现有的学习算法从训练数据产生,例如C4.5决策树算法、BP神经网络算法等,此时集成中只包含同种类型的个体学习器,例如“决策树集成中全是决策树,“神经网络集成”中全是神经网络,这样的集成是“同质的(homogeneous)。同质集成中的个体学习器亦称“基学习器”(base learner)相应的学习算法称为“基学习算法”(base learning algorithm)。集成也可包含不同类型的个体学习器,例如同时包含决策树和神经网络,这样的集成是“异质”的(heterogenous)。异质集成中的个体学习器由不同的学习算法生成,这时就不再有基学习算法;相应的,个体学习器一般不称为基学习器,常称为“组件学习器”(component learner)或直接称为个体学习器
在这里插入图片描述
集成学习通过将多个学习器进行结合,常可获得比单一学习器显著优越的泛化性能。这对“弱学习器”(weak learner)尤为明显,因此集成学习的很多理论研究都是针对弱学习器进行的,而基学习器有时也被直接称为弱学习器。但需注意的是,虽然从理论上来说使用弱学习器集成足以获得好的性能,但在实践中出于种种考虑,例如希望使用较少的个体学习器,或是重用关于常见学习器的一些经验等,人们往往会使用比较强的学习器。

8.2 Boosting

Boosting是一族可将弱学习器提升为强学习器的算法。这族算法的工作机制类似:先从初始训练集训练出一个基学习器,再根据基学习器的表现对训练样本分布进行调整,使得先前基学习器做错的训练样本在后续受到更多关注,然后基于调整后的样本分布来训练下一个基学习器;如此重复进行,直至基学习器数目达到事先指定的值T,最终将这T个基学习器进行加权结合

Boosting族算法最著名的代表是AdaBoost,其描述如图 8.3 所示,其中 y i ∈ − 1 , + 1 y_i∈{-1,+1} yi1,+1,f是真实函数。

AdaBoost算法有多种推导方式,比较容易理解的是基于“加性模型”(additive model),即基学习器的线性组合
H ( x ) = ∑ t = 1 T α t h t ( x ) H(x)=∑^T_{t=1}\alpha _t h_t (x) H(x)=t=1Tαtht(x)
来最小化指数损失函数
l e x p ( H ∣ D ) = E x ∼ D [ e − f ( x ) H ( x ) ] l_{exp}(H|D)=E_{x\sim D}[e^{-f(x)H(x)}] lexp(HD)=ExD[ef(x)H(x)]

在这里插入图片描述
H ( x ) H(x) H(x)能令指数损失函数最小化,则考虑对 H ( x ) H(x) H(x)的偏导
∂ l e x p ( H ∣ D ) ∂ H ( x ) = − e − H ( x ) P ( f ( x ) = 1 ∣ x ) + e H ( x ) P ( f ( x ) = − 1 ∣ x ) {\partial l_{exp}(H|D)\over \partial H(x)}=-e^{-H(x)}P(f(x)=1|x)+e^{H(x)}P(f(x)=-1|x) H(x)lexp(HD)=eH(x)P(f(x)=1∣x)+eH(x)P(f(x)=1∣x)
令其为0,可得
H ( x ) = 1 2 l n P ( f ( x ) = 1 ∣ x ) P ( f ( x ) = − 1 ∣ x ) H(x)={1\over 2}ln{P(f(x)=1|x)\over P(f(x)=-1|x)} H(x)=21lnP(f(x)=1∣x)P(f(x)=1∣x)
则有
s i g n ( H ( x ) ) = a r g m a x y ∈ { − 1 , 1 } P ( f ( x ) = y ∣ x ) sign(H(x))=arg max_{y∈\{-1,1\}}\quad P(f(x)=y|x) sign(H(x))=argmaxy{1,1}P(f(x)=yx)
这意味着 sign(H())达到了贝叶斯最优错误率。换言之,若指数损失函数最小化,则分类错误率也将最小化;这说明指数损失函数是分类任务原本0/1损失函数的一致的(consistent)替代损失函数。理想的基学习器为
h t ( x ) = a r g m i n h E x ∼ D t [ I ( f ( x ) ≠ h ( x ) ) ] h_t(x)=\underset{h}{arg\: min}E_{x\sim D_t}[\mathbb{I}(f(x)\neq h(x))] ht(x)=hargminExDt[I(f(x)=h(x))]
理想的基学习器将在分布 D t D_t Dt下最小化分类误差。

Boosting算法要求基学习器能对特定的数据分布进行学习,这可通过“重赋权法”(re-weighting)实施,即在训练过程的每一轮中,根据样本分布为每个训练样本重新赋予一个权重,对无法接受带权样本的基学习算法,则可通过“重采样法”(re-sampling)来处理,即在每一轮学习中,根据样本分布对训练集重新进行采样,再用重采样而得的样本集对基学习器进行训练。一般而言,这两种做法没有显著的优劣差别。

8.3 Bagging与随机森林

8.3.1 Bagging

Bagging[Breiman,1996a]是并行式集成学习方法最著名的代表。从名字即可看出,它直接基于自助采样法(bootstrap sampling)给定包含m个样本的数据集,我们先随机取出一个样本放入采样集中,再把该样本放回初始数据集,使得下次采样时该样本仍有可能被选中,这样,经过m次随机采样操作,我们得到含m个样本的采样集,初始训练集中有的样本在采样集里多次出现,有的则从未出现。

照这样,我们可采样出T个含m个训练样本的采样集,然后基于每个采样集训练出一个基学习器,再将这些基学习器进行结合。这就是Bagging的基本流程。在对预测输出进行结合时,Bagging 通常对分类任务使用简单投票法,对回归任务使用简单平均法。若分类预测时出现两个类收到同样票数的情形,则最简单的做法是随机选择一个,也可进一步考察学习器投票的置信度来确定最终胜者。Bagging 的算法描述如图8.5所示

在这里插入图片描述
从偏差-方差分解的角度看,Bagging 主要关注降低方差,因此它在不剪枝决策树、神经网络等易受样本扰动的学习器上效用更为明显。

8.3.2 随机森林

随机森林(Random Forest,简称RF)是Bagging 的一个扩展变体。RF在以决策树为基学习器构建Bagging集成的基础上,进一步在决策树的训练过程中引入了随机属性选择。具体来说,传统决策树在选择划分属性时是在当前结点的属性集合(假定有d个属性)中选择一个最优属性;而在RF中,对基决策树的每个结点,先从该结点的属性集合中随机选择一个包含k个属性的子集,然后再从这个子集中选择一个最优属性用于划分。这里的参数k控制了随机性的引入程度:若令 k = d k=d k=d,则基决策树的构建与传统决策树相同若令 k = 1 k=1 k=1,则是随机选择一个属性用于划分;一般情况下,推荐值 k = l o g 2 d k=log_2d k=log2d

随机森林简单、容易实现、计算开销小,令人惊奇的是,它在很多现实任务中展现出强大的性能,被誉为“代表集成学习技术水平的方法”。可以看出随机森林对 Bagging 只做了小改动,但是与 Bagging 中基学习器的“多样性”仅通过样本扰动(通过对初始训练集采样)而来不同,随机森林中基学习器的多样性不仅来自样本扰动,还来自属性扰动,这就使得最终集成的泛化性能可通过个体学习器之间差异度的增加而进一步提升。

随机森林的收敛性与 Bagging相似。但随机森林的训练效率常优于Bagging,因为在个体决策树的构建过程中,Bagging使用的是“确定型”决策树,在选择划分属性时要对结点的所有属性进行考察而随机森林使用的“随机型”决策树则只需考察一个属性子集

8.4 组合策略

学习器结合可能会从三个方面带来好处:

首先,从统计的方面来看,由于学习任务的假设空间往往很大,可能有多个假设在训练集上达到同等性能,此时若使用单学习器可能因误选而导致泛化性能不佳,结合多个学习器则会减小这一风险;

第二,从计算的方面来看,学习算法往往会陷入局部极小,有的局部极小点所对应的泛化性能可能很糟糕,而通过多次运行之后进行结合,可降低陷入糟糕局部极小点的风险;

第三,从表示的方面来看,某些学习任务的真实假设可能不在当前学习算法所考虑的假设空间中,此时若使用单学习器则肯定无效,而通过结合多个学习器,由于相应的假设空间有所扩大,有可能学得更好的近似。图8.8给出了一个直观示意图,

在这里插入图片描述
假定集成包含 T T T个基学习器 h 1 , h 2 , . . . , h T {h_1,h_2,...,h_T} h1,h2,...,hT,其中 h i h_i hi在示例 x x x上的输出为 h i ( x ) h_i(x) hi(x)。本节介绍几种对 h i h_i hi进行结合的常见策略

8.4.1 平均法

对数值型输出 h;(æ)€R,最常见的结合策略是使用平均法(averaging)

其中
简单平均法
H ( x ) = 1 T ∑ i = 1 T h i ( x ) H(x)={1\over T}∑^T_{i=1}h_i(x) H(x)=T1i=1Thi(x)
加权平均法
H ( x ) = ∑ i = 1 T w i h i ( x ) H(x)=∑^T_{i=1}w_ih_i(x) H(x)=i=1Twihi(x)
其中 w i w_i wi是个体学习器 h i h_i hi的权重,通常要求 w i ≥ 0 , ∑ i = 1 T w i = 1 w_i≥0,∑^T_{i=1}wi=1 wi0i=1Twi=1

8.4.2 投票法

对分类任务来说,学习器 h i h_i hi将从类别标记集合 { c 1 , c 2 , . . . , c N } \{c_1,c_2,...,c_N\} {c1,c2,...,cN}中预测出1个标记,最常见的结合策略是使用投票法(voting)

为便于讨论,我们将 h i h_i hi;在样本 x x x上的预测输出表示为一个 N N N维向量 ( h i 1 ( x ) ; h i 2 ( x ) ;。。。; h i N ( x ) ) (h^1_i(x);h^2_i(x);。。。;h^N_i(x)) (hi1(x)hi2(x);。。。;hiN(x)),其中 h i j ( x ) h^j_i(x) hij(x) h i h_i hi在类别标记 c j c_j cj上的输出。

绝对多数投票法
H ( x ) = { c j i f ∑ i = 1 T h i j ( x ) > 0.5 ∑ k = 1 N ∑ i = 1 T h i k ( x ) r e j e c t o t h e r w i s e H(x)=\begin{cases} c_j& if \quad ∑^T_{i=1}h^j_i(x)>0.5∑^N_{k=1}∑^T_{i=1}h^k_i(x)\\ reject& otherwise \end{cases} H(x)={cjrejectifi=1Thij(x)>0.5k=1Ni=1Thik(x)otherwise
即若某标记得票过半数,则预测为该标记:否则拒绝预测

相对多数投票法
H ( x ) = c a r g m a x j ∑ i = 1 T h i j ( x ) H(x)=c_{argmax_j∑^T_{i=1}h^j_i(x)} H(x)=cargmaxji=1Thij(x)
即预测为得票最多的标记,若同时有多个标记获最高票,则从中随机选取一个

加权投票法
H ( x ) = c a r g m a x j ∑ i = 1 T w i h i j ( x ) H(x)=c_{argmax_j∑^T_{i=1}w_ih^j_i(x)} H(x)=cargmaxji=1Twihij(x)

与加权平均法类似, w i w_i wi h i h_i hi的权重,通常 w i ≥ 0 w_i≥0 wi0 ∑ i = 1 T w i = 1 ∑^T_{i=1}w_i=1 i=1Twi=1

8.4.3 学习法

当训练数据很多时,一种更为强大的结合策略是使用“学习法”,即通过另一个学习器来进行结合。Stacking是学习法的典型代表。这里我们把个体学习器称为初级学习器,用于结合的学习器称为次级学习器或元学习器(meta-learner)

Stacking 先从初始数据集训练出初级学习器,然后“生成”一个新数据集用于训练次级学习器。在这个新数据集中,初级学习器的输出被当作样例输入特征,而初始样本的标记仍被当作样例标记。Stacking的算法描述如图8.9所示,这里我们假定初级学习器使用不同学习算法产生,即初级集成是异质的。
在这里插入图片描述
次级学习器的输入属性表示和次级学习算法对Stacking集成的泛化性能有很大影响。

贝叶斯模型平均(Bayes Model Averaging,简称 BMA)基于后验概率来为不同模型赋予权重,可视为加权平均法的一种特殊实现。对Stacking和BMA 进行了比较,理论上来说,若数据生成模型恰在当前考虑的模型中,且数据噪声很少,则 BMA 不差于 Stacking;然而,在现实应用中无法确保数据生成模型一定在当前考虑的模型中,甚至可能难以用当前考虑的模型来进行近似,因此,Stacking通常优于 BMA,因为其鲁棒性比 BMA 更好,而且BMA 对模型近似误差非常敏感。

8.5 多样性

8.5.1 误差-分歧分解

对示例 x x x,定义学习器 h i h_i hi 的"分歧" (arnbiguity)为
A ( h i ∣ x ) = ( h i ( x ) − H ( x ) ) 2 A(h_i|x)=(h_i(x)-H(x))^2 A(hix)=(hi(x)H(x))2
则集成的"分歧"是
A ˉ ( h ∣ x ) = ∑ i = 1 T w i A ( h i ∣ x ) = ∑ i = 1 T w i ( h i ( x ) − H ( x ) ) 2 \bar{A}(h|x)=\sum _{i=1}^{T}w_iA(h_i|x)=\sum_{i=1}^{T}w_i(h_i(x)-H(x))^2 Aˉ(hx)=i=1TwiA(hix)=i=1Twi(hi(x)H(x))2
这里的“分歧”项表征了个体学习器在样本。上的不一致性,即在定程度上反映了个体学习器的多样性。

8.5.2 多样性度量

多样性度量(diversity measure)是用于度量集成中个体分类器的多样性,即估算个体学习器的多样化程度,典型做法是考虑个体分类器的两两相似/不相似性。

给定数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) ,。。。, ( x m , y m ) } D =\{(x_1,y_1),(x_2,y_2),。。。,(x_m,y_m)\} D={(x1,y1)(x2,y2),。。。,(xm,ym)},对二分类任务, y i ∈ − 1 , + 1 y_i ∈{-1,+1} yi1,+1,分类器 hi与h,的预测结果列联表(contingency table)为
在这里插入图片描述
其中,a表示 h i h_i hi h j h_j hj均预测为正类的样本数目;b、c、d含义由此类推: a + b + c + d = m a+b+c+d=m a+b+c+d=m。基于这个列联表,下面给出一些常见的多样性度量

不合度量
d i s i j = b + c m , dis_{ij}=\frac{b+c}{m}, disij=mb+c
d i s i j dis_{ij} disij的值域为[0,1]。值越大则多样性越大

相关系数
ρ i j = a d − b c ( a + b ) ( a + c ) ( c + d ) ( b + d ) \rho _{ij}=\frac{ad-bc}{\sqrt{(a+b)(a+c)(c+d)(b+d)}} ρij=(a+b)(a+c)(c+d)(b+d) adbc
pij的值域为[-1,1]。若h与h;无关,则值为0;若h与h正相关则值为正,否则为负

Q-统计量 Q i j = a d − b c a d + b c Q_{ij}=\frac{ad-bc}{ad+bc} Qij=ad+bcadbc

k-统计量 κ = p 1 − p 2 1 − p 2 \kappa =\frac{p_1-p_2}{1-p_2} κ=1p2p1p2

8.5.3 多样性增强

在集成学习中需有效地生成多样性大的个体学习器。与简单地直接用初始数据训练出个体学习器相比,如何增强多样性呢?一般思路是在学习过程中弓入随机性,常见做法主要是对数据样本、输入属性、输出表示、算法参数进行扰动。

数据样本扰动

给定初始数据集,可从中产生出不同的数据子集,再利用不同的数据子集训练出不同的个体学习器。数据样本扰动通常是基于采样法,例如在Bagging中使用自助采样,在AdaBoost中使用序列采样。此类做法简单高效,使用最广。对很多常见的基学习器,例如决策树、神经网络等,训练样本稍加变化就会导致学习器有显著变动,数据样本扰动法对这样的“不稳定基学习器”很有效;然而,有一些基学习器对数据样本的扰动不敏感,例如线性学习器、支持向量机、朴素贝叶斯、k近邻学习器等,这样的基学习器称为稳定基学习器(stablebase learner),对此类基学习器进行集成往往需使用输入属性扰动等其他机制

输入属性扰功
训练样本通常由一组属性描述,不同的“子空间”(subspace,即属性子集)提供了观察数据的不同视角。显然,从不同子空间训练出的个体学习器必然有所不同。著名的随机子空间(random subspace)算法|Ho,1998]就依赖于输)属性扰动,该算法从初始属性集中抽取出若干个属性子集,再基于每个属性子集训练一个基学习器,算法描述如图8.11所示。对包含大量冗余属性的数据在子空间中训练个体学习器不仅能产生多样性大的个体,还会因属性数的减少而大幅节省时间开销,同时,由于冗余属性多,减少一些属性后训练出的个体学习器也不至于太差。若数据只包含少量属性,或者冗余属性很少,则不宜使用输入属性扰动法。
在这里插入图片描述
输出表示扰动
此类做法的基本思路是对输出表示进行操纵以增强多样性。可对训练样本的类标记稍作变动,如“翻转法”(Flipping Output)随机改变一些训练样本的标记;也可对输出表示进行转化,如“输出调制法”(OutputSmearing)[Breiman,2000|将分类输出转化为回归输出后构建个体学习器还可将原任务拆解为多个可同时求解的子任务,如ECOC法利用纠错输出码将多分类任务拆解为一系列二分类任务来训练基学习器

算法参数扰动
基学习算法一般都有参数需进行设置,例如神经网络的隐层神经元数、初始连接权值等,通过随机设置不同的参数,往往可产生差别较大的个体学习器

例如“负相关法”(Negative Correlation)显式地通过正则化项来强制个体神经网络使用不同的参数。对参数较少的算法,可通过将其学习过程中某些环节用其他类似方式代替,从而达到扰动的目的,例如可将决策树使用的属性选择机制替换成其他的属性选择机制。值得指出的是,使用单一学习器时通常需使用交叉验证等方法来确定参数值,这事实上已使用了不同参数训练出多个学习器,只不过最终仅选择其中一个学习器进行使用,而集成学习则相当于把这些学习器都利用起来:由此也可看出,集成学习技术的实际计算开销并不比使用单一学习器大很多。

不同的多样性增强机制可同时使用,例如8.3.2节介绍的随机森林中同时使用了数据样本扰动和输入属性扰动,有些方法甚至同时使用了更多机制。

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

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

相关文章

【附安装包】CentOS7(Linux)详细安装教程(手把手图文详解版)

目前流行的虚拟机软件有VMware、Virtual Box和Virtual PC等等,其中最常用的就是VMware。 而centos是Linux使用最广泛的版本之一。 教程开始教程有许多不完备之处,大佬请忽略。。。 1.安装VMware 首先需要准备VMware的安装包以及Ubuntu的ISO镜像&#…

鸿蒙系统开发【设备安全服务-应用设备状态检测】安全

设备安全服务-应用设备状态检测 介绍 本示例向您介绍如何在应用中获取DeviceToken用于对应用的设备状态进行检测。 需要使用设备安全服务接口 kit.DeviceSecurityKit。 效果预览 Sample工程的配置与使用 在DevEco中配置Sample工程的步骤如下 [创建项目]及[应用]。打开Sam…

数据结构与算法 - 递归

一、递归 1. 概述 定义:在计算机科学中,递归是一种解决计算问题的方法,其中解决方案取决于同一类问题的更小子集。 比如单链表递归遍历的例子: void f(Node node) {if(node null) {return;}println("before:" node…

Animate软件基础:在时间轴中添加或插入帧

FlashASer:AdobeAnimate2021软件零基础入门教程https://zhuanlan.zhihu.com/p/633230084 FlashASer:实用的各种Adobe Animate软件教程https://zhuanlan.zhihu.com/p/675680471 FlashASer:Animate教程及作品源文件https://zhuanlan.zhihu.co…

软件测试--python基础

一、python基础 (1)第一个python (2)python解释器 (3)基础语法 ①字面量 什么是字面量 常用的值类型 字符串 ②注释 ③变量 什么是变量 变量的特征 变量的目的是存储运行过程的数据 存储的目的是为了:重复使用 ④数据类型 type()语句 变量有类型吗?…

在欧拉系统中安装数据库

在欧拉系统中的安装 (禁止超级用户root登录) yum install mariadb-server -y #下载命令 systemctl enable --now mariadb #设置为开机自启,并立即启动该服务 mysql_secure_installation #安全设置,初始化 修…

C语言数据在内存中的存储超详解

文章目录 1. 整数在内存中的存储2. 大小端字节序和字节序判断2. 1 什么是大小端?2. 2 为什么会有大小端?2. 3 练习 3. 浮点数在内存中的存储3. 1 一个代码3. 2 浮点数的存储3. 2. 1 浮点数存的过程3. 2. 2 浮点数取的过程3. 3 题目解析 1. 整数在内存中的…

ctfshow-web入门-sql注入(web171-web175)

目录 1、web171 2、web172 3、web173 4、web174 5、web175 1、web171 单引号测一下,报错 -- 闭合后回显正常 也可以用 # ,不过需要 URL 编码 成功闭合之后,先判断下字段数: 1 order by 3-- 3 的时候正常 4 的时候报错&am…

C++必修:STL之vector的了解与使用

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C学习 贝蒂的主页:Betty’s blog 1. C/C中的数组 1.1. C语言中的数组 在 C 语言中,数组是一组相同类型…

泰迪智能科技AI大模型某医院合作案例介绍

泰迪智能科技AI大模型支持以ChatGLM2-6B、Baichuan-13B、Qwen14B和文心一言等多种大语言模型为底座,实现基于特定领域数据、面向智能客服、问答系统、自动摘要、智能打标、内容创作、信息抽取等应用场景的模型微调、评估和推理,为业务智能升级和价值挖掘…

【C++从小白到大牛】类和对象

目录 一、面向过程和面向对象初步认识 二、类的引入 三、类的定义 类的成员函数两种定义方式: 1. 声明和定义全部放在类体中 2. 类声明放在.h文件中,成员函数定义放在.cpp文件中 成员变量命名规则的建议: 四、类的访问限定符 【访问限…

本地部署持续集成工具Jenkins并配置公网地址实现远程自动化构建

文章目录 前言1. 安装Jenkins2. 局域网访问Jenkins3. 安装 cpolar内网穿透软件4. 配置Jenkins公网访问地址5. 公网远程访问Jenkins6. 固定公网地址 前言 本文主要介绍如何在Linux CentOS 7中安装Jenkins并结合cpolar内网穿透工具实现远程访问管理本地部署的Jenkins服务. Jenk…

大模型算法面试题(十八)

本系列收纳各种大模型面试题及答案。 1、P-tuning v2 思路、优缺点是什么 P-tuning v2是清华大学自然语言处理实验室(THUDM)等研究机构提出的一种新的预训练模型优化方法,主要关注如何通过动态构建任务相关的提示序列来引导预训练模型进行更…

【数据结构进阶】手撕红黑树

🔥个人主页: Forcible Bug Maker 🔥专栏: C || 数据结构 目录 🌈前言🔥红黑树的概念🔥手撕红黑树红黑树结点的定义红黑树主体需要实现的成员函数红黑树的插入findEmpty和Size拷贝构造析构函数和…

Redis和Mysql如何保持数据一致性

一般情况下,Redis是用来实现应用和数据库之间读操作得缓存层,主要目的是减少数据库IO,还可以提升数据的IO性能。 当应用程序需要去读取某个数据时,会首先尝试去Redis里面加载,如果命中就直接返回,如果没有…

C++ 操作Git仓库

代码 #include "common.h" #include "args.c" #include "common.c"enum index_mode {INDEX_NONE,INDEX_ADD };struct index_options {int dry_run;int verbose;git_repository* repo;enum index_mode mode;int add_update; };/* Forward declar…

vue项目Nginx部署启动

1.vue打包 (1)package.json增加打包命令 "scripts": {"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js --host 10.16.14.110","start": "npm run dev","un…

Halcon 边缘提取(亚像素)

Halcon提供多种边缘提取算法。像素提取方法有常用的边缘提取算子或深度学习分割模型等。考虑到精度问题可能需要提取亚像素边缘。当然也可以提取轮廓:线、圆、椭圆等。本文只讨论提取轮廓。 1 基本概念 正常情况下,无需特殊操作即可提取边缘轮廓。 1…

Linux-4:Shell编程——基础语法(50%-100%)

目录 前言 一、数组 1.数组定义 2.关联数组 3.数组长度 二、运算符 1.算术运算符 2.关系运算符 3.布尔运算符 4.逻辑运算符 5.字符串运算符 6.文件测试运算符 三、read命令 1.接收用户输入 2.开启转义 3. -p 输入提示 4. -s 静默模式 -t 设置超时时间 5.读取…

Fiddler学习笔记

目录 前言 简介 原理 界面 前言 测试可以使用fiddler工具,通过抓包的方式修改前端参数和模拟后端返回,快速定位缺陷。 简介 Fiddler是HTTP协议调试代理工具,可以记录并检查所有客户端和服务器之间的HTTP和HTTPS请求,允许监视…