AdaBoost 详解

AdaBoost

Boosting

Boosting 是指,仅通过训练精度比随机猜想(50%)稍高的学习器,通过集成的方式过建出强学习器。

其中boosting中最有名的是AdaBoost算法。AdaBoost是英文"Adaptive Boosting"(自适应增强)的缩写,它的自适应在于:前一个基本分类器被错误分类的样本的权值会增大,而正确分类的样本的权值会减小,并再次用来训练下一个基本分类器。同时,在每一轮迭代中,加入一个新的弱分类器,直到达到某个预定的足够小的错误率或达到预先指定的最大迭代次数才确定最终的强分类器。

AdaBoost 推导

设存在数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x N , y N ) } T=\left\{\left(x_1,y_1\right),\left(x_2,y_2\right),\cdots,\left(x_N,y_N\right)\right\} T={(x1,y1),(x2,y2),,(xN,yN)} ,其中 x i ∈ X ⊆ R n , y i ∈ Y = { + 1 , − 1 } , i = 1 , 2 , ⋯   , N ; x_i\in\mathcal{X}\subseteq R^n,y_i\in\mathcal{Y}=\left\{+1,-1\right\},i=1,2,\cdots,N\text{;} xiXRn,yiY={+1,1},i=1,2,,N;

考虑二分类问题

因为AdaBoost算法最终得到的学习器是由多个弱学习器集成而来的,由此设
F ( x ) = ∑ k = 1 K α k ϕ ( x ; θ k ) ϕ ( x ; θ k ) ∈ { − 1 , 1 } F(\boldsymbol{x})=\sum_{k=1}^{K}\alpha_{k}\phi(\boldsymbol{x};\boldsymbol{\theta}_{k})\\ \phi(\boldsymbol{x};\boldsymbol{\theta}_{k})\in\{-1,1\} F(x)=k=1Kαkϕ(x;θk)ϕ(x;θk){1,1}
其中 θ k \theta_k θk为参数向量,代表第k个学习器的参数, α k \alpha_k αk为第k个学习器的权重,表示在最终学习器中第k个学习器在其中的权重。

其中最终决策为
f ( x ) = s i g n { F ( x ) } f(\boldsymbol{x})=sign\{F(x)\} f(x)=sign{F(x)}
当正确分类时,存在 y i F ( x i ) > 0 , − y i F ( x i ) < 0 y_iF(x_i)>0,-y_iF(x_i)<0 yiF(xi)>0,yiF(xi)<0

当错误分类时,存在 y i F ( x i ) < 0 , − y i F ( x i ) > 0 y_iF(x_i)<0,-y_iF(x_i)>0 yiF(xi)<0,yiF(xi)>0

其中AdaBoost分类的目标就是尽可能的正确分类,即最大限度时,错分的样本数目最少,由此构建目标函数
arg ⁡ min ⁡ α k , θ k , k : 1... , K ∑ i = 1 N exp ⁡ ( − y i F ( x i ) ) \arg\min_{\alpha_k,\theta_k,k:1...,K}\sum_{i=1}^N\exp(-y_iF(x_i)) argαk,θk,k:1...,Kmini=1Nexp(yiF(xi))
其中在AdaBoost推导过程中,设 F m ( x ) F_m(x) Fm(x)为前m个分类器的集成结果,即
F m ( x ) = ∑ k = 1 m α k ϕ ( x ; θ k ) , m = 1 , 2 , . . . , K F_{m}(x)=\sum_{k=1}^{m}\alpha_{k}\phi(x;\theta_{k}),m=1,2,...,K Fm(x)=k=1mαkϕ(x;θk),m=1,2,...,K
若写为增量表示,则为
F m ( x ) = F m − 1 ( x ) + α m ϕ ( x ; θ m ) F_{m}(x)=F_{m-1}(x)+\alpha_{m}\phi(x;\theta_{m}) Fm(x)=Fm1(x)+αmϕ(x;θm)
即前m个分类器集成的结果为前m-1个分类器集成的结果加上第m个分类器的结果 × \times × 权重

由此前m个分类器的目标函数为
J ( α , θ ) = ∑ i = 1 N exp ⁡ ( − y i ( F m − 1 ( x ) + α ϕ ( x ; θ ) ) ) ( α m , θ m ) = arg ⁡ min ⁡ α , θ J ( α , θ ) \begin{aligned}&J(\alpha,\theta)=\sum_{i=1}^N\exp(-y_i(F_{m-1}(x)+\alpha\phi(x;\theta)))\\\\&(\alpha_m,\theta_m)=\arg\min_{\alpha,\theta}J(\alpha,\theta)\end{aligned} J(α,θ)=i=1Nexp(yi(Fm1(x)+αϕ(x;θ)))(αm,θm)=argα,θminJ(α,θ)
w i ( m ) w_i^{(m)} wi(m)为前 m − 1 m-1 m1个分类器对 x i x_i xi对错分指数,易知这与第m个分类器的 α , θ \alpha,\theta α,θ无关。即
w i ( m ) ≡ exp ⁡ ( − y i F m − 1 ( x i ) ) w_{i}^{(m)}\equiv\exp(-y_{i}F_{m-1}(x_{i})) wi(m)exp(yiFm1(xi))
所以前m个分类器的目标函数可以写为
J ( α , θ ) = ∑ i = 1 N w i ( m ) exp ⁡ ( − y i α ϕ ( x ; θ ) ) J(\alpha,\boldsymbol{\theta})=\sum_{i=1}^Nw_i^{(m)}\exp(-y_i\alpha\phi(\boldsymbol{x};\boldsymbol{\theta})) J(α,θ)=i=1Nwi(m)exp(yiαϕ(x;θ))
由此我们选择的参数 θ m \theta_m θm 应是使得目标函数最小的,即错分的样本最少
θ m = arg ⁡ min ⁡ θ ∑ i = 1 N w i ( m ) exp ⁡ ( − y i α ϕ ( x ; θ ) ) θ m = arg ⁡ min ⁡ θ { P m = ∑ i = 1 N w i ( m ) I ( 1 − y i ϕ ( x ; θ ) ) } \begin{aligned} \boldsymbol\theta_{m}&=\arg\min_{\theta}\sum_{i=1}^{N}w_{i}^{(m)}\exp(-y_{i}\alpha\phi(x;\theta))\\ \boldsymbol{\theta}_{m}&=\arg\min_{\theta}\left\{P_{m}=\sum_{i=1}^{N}w_{i}^{(m)}{I(1-y_{i}\phi(\boldsymbol{x};\boldsymbol{\theta}))}\right\} \end{aligned} θmθm=argθmini=1Nwi(m)exp(yiαϕ(x;θ))=argθmin{Pm=i=1Nwi(m)I(1yiϕ(x;θ))}
其中:

I ( 1 − y i ϕ ( x ; θ ) ) I(1-y_{i}\phi(\boldsymbol{x};\boldsymbol{\theta})) I(1yiϕ(x;θ))是一个非0即1的函数,当 1 − y i ϕ ( x ; θ ) = 0 1-y_{i}\phi(\boldsymbol{x};\boldsymbol{\theta})=0 1yiϕ(x;θ)=0是函数 I ( 1 − y i ϕ ( x ; θ ) ) = 0 I(1-y_{i}\phi(\boldsymbol{x};\boldsymbol{\theta}))=0 I(1yiϕ(x;θ))=0,即正确分类时,函数 I ( 1 − y i ϕ ( x ; θ ) ) I(1-y_{i}\phi(\boldsymbol{x};\boldsymbol{\theta})) I(1yiϕ(x;θ))为0,当错误分类时,函数 I ( 1 − y i ϕ ( x ; θ ) = 1 I(1-y_{i}\phi(\boldsymbol{x};\boldsymbol{\theta})=1 I(1yiϕ(x;θ)=1

P m P_m Pm为第m个分类器错误识别样本的平均权重。求 θ \theta θ通常在选择第m个分类器时候,选择阈值 P m < 0.5 P_m<0.5 Pm<0.5

所以优化目标可以改为:优化第m个分类器,使得错分样本对应的平均权重最小,即在第m个分类器的正确分类样本,尽可能时前m-1个分类器中错分指数大的样本即 w i ( m ) w_i^{(m)} wi(m) 大,求 θ m \theta_m θm。即可认为在集成过程中使得对 x i x_i xi分类错误的学习器的 w i ( m ) w_i^{(m)} wi(m)小,使得最终的学习器受到错分的影响最小。
J ( α , θ ) = ∑ i = 1 N w i ( m ) exp ⁡ ( − y i α ϕ ( x ; θ ) ) J(\alpha,\theta)=\sum_{i=1}^{N}w_{i}^{(m)}\exp(-y_{i}\alpha\phi(x;\theta)) J(α,θ)=i=1Nwi(m)exp(yiαϕ(x;θ))
因为
∑ y i ϕ ( x i ; θ m ) < 0 w i ( m ) = P m , y i ϕ ( x i ; θ m ) = − 1 ∑ y i ϕ ( x i ; θ m ) > 0 w i ( m ) = 1 − P m , y i ϕ ( x i ; θ m ) = 1 \begin{aligned}\sum_{y_{i}\phi(x_{i};\theta_{m})<0}w_{i}^{(m)}=&P_{m},\quad y_{i}\phi(x_{i};\theta_{m})=-1\\\sum_{y_{i}\phi(x_{i};\theta_{m})>0}w_{i}^{(m)}=&1-P_{m},\quad y_{i}\phi(x_{i};\theta_{m})=1\end{aligned} yiϕ(xi;θm)<0wi(m)=yiϕ(xi;θm)>0wi(m)=Pm,yiϕ(xi;θm)=11Pm,yiϕ(xi;θm)=1
所以
α m = arg ⁡ min ⁡ α { exp ⁡ ( − α ) ( 1 − P m ) + exp ⁡ ( α ) P m } \alpha_{m}=\arg\min_{\alpha}\{\exp(-\alpha)(1-P_{m})+\exp(\alpha)P_{m}\} αm=argαmin{exp(α)(1Pm)+exp(α)Pm}
由此设存在函数:
f ( a ) = exp ⁡ ( − α ) ( 1 − P m ) + exp ⁡ ( α ) P m f(a)=\exp(-\alpha)(1-P_{m})+\exp(\alpha)P_{m} f(a)=exp(α)(1Pm)+exp(α)Pm
对其求导数得到
f ′ ( α ) = P m exp ⁡ ( α ) − ( 1 − P m ) exp ⁡ ( − α ) \begin{aligned}f'(\alpha)=P_m\exp(\alpha)-(1-P_m)\exp(-\alpha)\end{aligned} f(α)=Pmexp(α)(1Pm)exp(α)
f ′ ( α ) = 0 f'(\alpha)=0 f(α)=0得到 f ( α ) f(\alpha) f(α)的取最小值时的 α \alpha α α m \alpha_m αm
α m = 1 2 ln ⁡ 1 − P m P m \alpha_{m}=\frac{1}{2}\ln\frac{1-P_{m}}{P_{m}} αm=21lnPm1Pm
由此更新权重
w i ( m + 1 ) ≡ exp ⁡ ( − y i F m ( x i ) ) = w i ( m ) exp ⁡ ( − y i α m ϕ ( x i ; θ m ) ) w_i^{(m+1)}\equiv\exp(-y_iF_m(\boldsymbol{x}_i))=w_i^{(m)}\exp(-y_i\alpha_m\phi(\boldsymbol{x}_i;\boldsymbol{\theta}_m)) wi(m+1)exp(yiFm(xi))=wi(m)exp(yiαmϕ(xi;θm))
α m = 1 2 ln ⁡ 1 − P m P m \alpha_{m}=\frac{1}{2}\ln\frac{1-P_{m}}{P_{m}} αm=21lnPm1Pm代入可得:

被第m个分类器正确分类的样本权值为:
y i ϕ ( x i ; θ m ) = 1 , w i ( m + 1 ) = w i ( m ) exp ⁡ ( − α m ) = w i ( m ) P m 1 − P m y_{i}\phi(x_{i};\theta_{m})=1,\quad w_{i}^{(m+1)}=w_{i}^{(m)}\exp\left(-\alpha_{m}\right)=w_{i}^{(m)}\sqrt{\frac{P_{m}}{1-P_{m}}} yiϕ(xi;θm)=1,wi(m+1)=wi(m)exp(αm)=wi(m)1PmPm
被第m个分类器错误分类的样本权值为:
y i ϕ ( x i ; θ m ) = − 1 , u i ( m + 1 ) = w i ( m ) exp ⁡ ( α m ) = w i ( m ) 1 − P m P m \begin{aligned}y_{i}\phi(x_{i};\theta_{m})=&-1,\quad u_{i}^{(m+1)}=w_{i}^{(m)}\exp\left(\alpha_{m}\right)=w_{i}^{(m)}\sqrt{\frac{1-P_{m}}{P_{m}}}\end{aligned} yiϕ(xi;θm)=1,ui(m+1)=wi(m)exp(αm)=wi(m)Pm1Pm
归一化:
w i ( m + 1 ) = w i ( m + 1 ) / ∑ i = 1 N w i ( m + 1 ) w_{i}^{(m+1)}=\left.w_{i}^{(m+1)}\right/\sum_{i=1}^{N}w_{i}^{(m+1)} wi(m+1)=wi(m+1)/i=1Nwi(m+1)

示例

当存在10个样本如图所示

image-20231206145800336

首先初始化各分类器的权重
D 1 = ( w 11 , w 12 , ⋯   , w 1 N ) , w 1 i = 1 N , i = 1 , 2 , ⋯   , N D_1=\left(w_{11},w_{12},\cdots,w_{1N}\right),\quad w_{1i}=\frac1N,\quad i=1,2,\cdots,N D1=(w11,w12,,w1N),w1i=N1,i=1,2,,N
可得: аll   x i , w i ( 0 ) = 0.1 \textit{аll }x_i\text{,}w^{(0)}_\mathrm{i}=0.1 аll xi,wi(0)=0.1

然后对其使用 h 1 h_1 h1分类器,分类结果如图所示

image-20231206150159310

易知有三个样本被错误分类

其中正确分类的样本权值不变,错误分类的样本权值为:

w i ( m + 1 ) = w i ( m ) 1 − P m P m w_{i}^{(m+1)}=w_{i}^{(m)}\frac{1-P_{m}}{P_{m}} wi(m+1)=wi(m)Pm1Pm
其中
P m = ∑ i = 1 N w i ( m ) I ( 1 − y i ϕ ( x ; θ ) ) P_{m}=\sum_{i=1}^{N}w_{i}^{(m)}{I(1-y_{i}\phi(\boldsymbol{x};\boldsymbol{\theta}))} Pm=i=1Nwi(m)I(1yiϕ(x;θ))
即被错分的样本乘上平均错分权重
α m = 1 2 ln ⁡ 1 − P m P m \alpha_{m}=\frac{1}{2}\ln\frac{1-P_{m}}{P_{m}} αm=21lnPm1Pm
得到
P 1 = N F w ( 0 ) = 0.3 1 − P 1 = 0.7 α 1 = 1 2 ln ⁡ ( 1 − P 1 P 1 ) = 1 2 ln ⁡ ( 1 − 0.3 0.3 ) = 0.42 w i ( 1 ) = w ( 0 ) = 0.1 正确分类不变  w i ( 1 ) = w ( 0 ) 1 − P 1 P 1 = 0.233 错误分类 \begin{aligned} P_{1}&=N_Fw^{(0)}={0.3}\\ 1-P_{1}&={0.7}\\ \alpha_1&=\frac{1}{2}\ln(\frac{1-P_1}{P_1})=\frac{1}{2}\ln(\frac{1-0.3}{0.3})=0.42\\ w_{i}^{(1)}&=w^{(0)}=0.1 \quad \text{正确分类不变 }\\ w_i^{(1)}&=w^{(0)}\frac{1-P_{1}}{P_{1}}=0.233 \quad \text{错误分类} \end{aligned} P11P1α1wi(1)wi(1)=NFw(0)=0.3=0.7=21ln(P11P1)=21ln(0.310.3)=0.42=w(0)=0.1正确分类不变 =w(0)P11P1=0.233错误分类
对其 w ( 1 ) w^{(1)} w(1)进行归一化处理
w i ( 1 ) = 0.1 0.1 ∗ 7 + 0.233 ∗ 3 1被正确分类 w i ( 1 ) = 0.233 0.1 ∗ 7 + 0.233 ∗ 3 1被错误分类 \begin{aligned} w_{i}^{(1)}=\frac{0.1}{0.1*7+0.233*3}\quad\text{1被正确分类}\\ w_{i}^{(1)}=\frac{0.233}{0.1*7+0.233*3}\quad\text{1被错误分类} \end{aligned} wi(1)=0.17+0.23330.11被正确分类wi(1)=0.17+0.23330.2331被错误分类
对其使用 h 2 h_2 h2分类器,分类结果如图所示

image-20231206151501197

易知有三个样本被错误分类
P 2 = N F w i ( 1 ) = 3 ∗ 0.1 0.1 ∗ 7 + 0.233 ∗ 3 = 0.2144 α 2 = 1 2 ln ⁡ ( 1 − P 2 P 2 ) = 1 2 ln ⁡ ( 1 − 0.2144 0.2144 ) = 0.6493 w i ( 2 ) = w i ( 1 ) 正确分类不变  w i ( 2 ) = w i ( 1 ) 1 − P 2 P 2 = 0.3644 错误分类 \begin{aligned} P_2&=N_Fw^{(1)}_i=3*\frac{0.1}{0.1*7+0.233*3}=0.2144\\ \alpha_2&=\frac{1}{2}\ln(\frac{1-P_2}{P_2})=\frac12\ln\biggl(\frac{1-0.2144}{0.2144}\biggr)=0.6493\\ w_{i}^{(2)}&=w_i^{(1)}\quad \text{正确分类不变 }\\ w_i^{(2)}&=w_i^{(1)}\frac{1-P_{2}}{P_{2}}=0.3644 \quad \text{错误分类} \end{aligned} P2α2wi(2)wi(2)=NFwi(1)=30.17+0.23330.1=0.2144=21ln(P21P2)=21ln(0.214410.2144)=0.6493=wi(1)正确分类不变 =wi(1)P21P2=0.3644错误分类
w i ( 2 ) w^{(2)}_i wi(2)进行归一化
w i ( 1 ) = 0.1 0.1 ∗ 4 + 0.233 ∗ 3 + 0.3644 ∗ 3 1、2都被正确分类 w i ( 1 ) = 0.233 0.1 ∗ 4 + 0.233 ∗ 3 + 0.3644 ∗ 3 1被错误分类,2被正确分类 w i ( 1 ) = 0.3644 0.1 ∗ 4 + 0.233 ∗ 3 + 0.3644 ∗ 3 2被错误分类,1被正确分类 \begin{aligned} w_{i}^{(1)}&=\frac{0.1}{0.1*4+0.233*3+0.3644*3}\quad\text{1、2都被正确分类} \\ w_{i}^{(1)}&=\frac{0.233}{0.1*4+0.233*3+0.3644*3}\quad\text{1被错误分类,2被正确分类}\\ w_{i}^{(1)}&=\frac{0.3644}{0.1*4+0.233*3+0.3644*3}\quad\text{2被错误分类,1被正确分类}\\ \end{aligned} wi(1)wi(1)wi(1)=0.14+0.2333+0.364430.112都被正确分类=0.14+0.2333+0.364430.2331被错误分类,2被正确分类=0.14+0.2333+0.364430.36442被错误分类,1被正确分类

对其使用 h 3 h_3 h3分类器,分类结果如图所示

image-20231206155046960

易知有一个样本被错误分类
P 2 = N F w i ( 1 ) = 1 ∗ 0.1 0.1 ∗ 4 + 0.233 ∗ 3 + 0.3644 ∗ 3 = 0.1356 α 2 = 1 2 ln ⁡ ( 1 − P 3 P 3 ) = 1 2 ln ⁡ ( 1 − 0.1356 0.1356 ) = 0.9223 w i ( 2 ) = w i ( 1 ) 正确分类不变  w i ( 2 ) = w i ( 1 ) 1 − P 3 P 3 = 0.6326 错误分类 \begin{aligned} P_2&=N_Fw^{(1)}_i=1*\frac{0.1}{0.1*4+0.233*3+0.3644*3}=0.1356\\ \alpha_2&=\frac{1}{2}\ln(\frac{1-P_3}{P_3})=\frac12\ln\biggl(\frac{1-0.1356}{0.1356}\biggr)=0.9223\\ w_{i}^{(2)}&=w_i^{(1)}\quad \text{正确分类不变 }\\ w_i^{(2)}&=w_i^{(1)}\frac{1-P_{3}}{P_{3}}=0.6326 \quad \text{错误分类} \end{aligned} P2α2wi(2)wi(2)=NFwi(1)=10.14+0.2333+0.364430.1=0.1356=21ln(P31P3)=21ln(0.135610.1356)=0.9223=wi(1)正确分类不变 =wi(1)P31P3=0.6326错误分类
综上所述

image-20231206155435265

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

祸害了人民3年的新冠消失了,但有些奇怪现象,让人百思不得其解

真是没想到啊&#xff0c;祸害我们3年的新冠病毒突然就消失了&#xff0c;但是紧接着呢&#xff0c;却有一个非常奇怪的现象出现了&#xff0c;真的是令人百思不得其解&#xff01; 新冠病毒&#xff0c;于2020年的开始&#xff0c;可以说根本就没有任何缓冲期&#xff0c;一开…

微信小程序基础bug

1.苹果11手机小程序请求数据不显示 设置-》隐私-》分析与改进-》开启 ”与开发者共享“ 2.<navigator>组件回退delta不成功 tabBar 页面是不能实现后退的效果的. 因为, 当我们跳转到 tabBar 页面&#xff0c;会关闭其他所有非tabBar 页面,所以当处于 tabBar 页面时, 无…

redhat修改root密码

系统环境 redhat版本redhat7.6 1.在当前界面按e键进入进行编辑 2.在rhgb quite 后面加入 rd.break&#xff0c;按住ctrlx使用更改的参数引导系统 3. 挂载文件系统 3.1 进入此界面后挂载文件 mount -o remount,rw /sysroot4. 更改系统文件的root chroot /sysroot5. 修改密码…

IDEA Maven 配置国内源

基本步骤 分别设置下图的两个&#xff0c;一个是对当前项目的设置&#xff0c;一个是对以后创建的项目设置&#xff0c;这样以后就不用重新配置了。 将下面的两个勾选上 注意&#xff0c;两个地方&#xff0c;Settings 和 Settings for New Projects 的勾都要勾上。 前往 User…

【技术分享】ORACLE数据库相关操作

【赠送】IT技术视频教程&#xff0c;白拿不谢&#xff01;思科、华为、红帽、数据库、云计算等等https://xmws-it.blog.csdn.net/article/details/117297837?spm1001.2014.3001.5502[欢迎关注微信公众号&#xff1a;厦门微思网络] -- 截断表 TRUNCATE TABLE TABLE_NAME; -- …

排序:直接插入排序希尔排序

目录 排序&#xff1a; 概念&#xff1a; 直接插入排序&#xff1a; 代码的实现&#xff1a; 代码解析&#xff1a; 总结&#xff1a; 希尔排序&#xff1a; 代码实现&#xff1a; 预排序&#xff1a; 代码优化&#xff1a; gap 的 本质 &#xff1a; 直接…

电子版简历模板精选5篇

电子版简历模板模板下载&#xff08;可在线编辑制作&#xff09;&#xff1a;做好简历&#xff0c;来幻主简历。 电子版简历1&#xff1a; 求职意向 求职类型&#xff1a;全职 意向岗位&#xff1a;ERP咨询顾问 意向城市&#xff1a;北京市 薪资要求&#xff1a;…

【微信小程序开发】学习小程序的模块化开发(自定义组件和分包加载)

前言 模块化开发是一种将复杂的应用程序分解为一系列独立的模块&#xff0c;每个模块负责完成特定的功能的开发方式。模块化开发可以提高代码的可维护性和可复用性&#xff0c;使开发过程更加高效和灵活。 文章目录 前言模块化开发的重要性和优势自定义组件自定义组件的概念和作…

每日股票价格 - 华为机试真题题解

每日股票价格 - 华为机试真题题解 题目描述 ​ 给定某只股票连续N天的价格列表stockPrices&#xff0c;其中stockPricesi表示股票某天的价格&#xff0c;请生成一个新列表&#xff0c;对应位置输出为:要想等到股票价格上涨&#xff0c;至少需要等待的天数&#xff0c;如果股票…

Redlock算法实现Redis分布式锁

Redlock算法实现Redis分布式锁 为什么基于故障转移的实现还不够 使用 Redis 锁定资源的最简单方法是在实例中创建密钥。密钥通常是在有限的生存时间内创建的&#xff0c;使用 Redis 过期功能&#xff0c;以便最终它被释放&#xff08;我们列表中的属性 2&#xff09;。当客户…

漫步者开放式耳机怎么样?南卡、漫步者开放式耳机哪个好?

现在开放式耳机的市场越来越混杂&#xff0c;我们作为消费者在挑选的时候&#xff0c;一定要找准需求点才能把踩坑几率降到最低。实在不会挑选的也不要紧&#xff0c;我最近入了2款目前市面最畅销的百元款开放式耳机&#xff1a;南卡OE CC和漫步者comfo fit&#xff0c;亲身上耳…

深入理解MVCC与BufferPool缓存机制

http://note.youdao.com/noteshare?idb36b975188fadf7bfbfd75c0d2d6b834&sub5A7459FE4B464EC896F9DD9A4 E MySQL在读已提交和可重复度隔离级别下都实现了MVCC机制 begin/start transaction 命令并不是一个事务的起点&#xff0c;在执行到它们之后的第一个修改操作InnoDB…

ubuntu windows 文件格式^M 问题

dos2unix是将Windows格式文件转换为Unix、Linux格式的实用命令。Windows格式文件的换行符为rn ,而Unix&Linux文件的换行符为n。 dos2unix命令其实就是将文件中的rn 转换为n。 而unix2dos则是和dos2unix互为孪生的一个命令&#xff0c;它是将Linux&Unix格式文件转换为Wi…

【Linux】telnet命令使用

telnet命令 telnet命令用于使用telnet协议与另一台主机进行通信。如果在没有主机参数的情况下调用telnet&#xff0c;它将进入命令模式&#xff0c;由其提示&#xff08;telnet>&#xff09;指示。在这种模式下&#xff0c;它接受并执行下面列出的命令。如果使用参数调用它…

二叉树的链式结构

1.二叉树的构建 想要对二叉树进行操作&#xff0c;我们得先构建一个二叉树 因此&#xff0c;这里的问题就是给定数据&#xff0c;如何将数据在逻辑结构上变成二叉树&#xff1f; 结构定义&#xff1a; typedef int BTDataType;typedef struct BinaryTreeNode {BTDataType v…

【go语言开发】go项目打包成Docker镜像,包括Dockerfile命令介绍、goctl工具生成

本文主要介绍如何将go项目打包成镜像&#xff0c;首先介绍Dockerfile常用命令介绍&#xff0c;然后介绍使用工具goctl用于生成Dockerfile&#xff0c;还可以根据需求自定义指令内容&#xff0c;最后讲解如何将go-blog项目打包成镜像&#xff0c;以及如何运行等 文章目录 前言Do…

助力乡村振兴:VR全景技术能在乡村发展哪些方面提供帮助

引言&#xff1a; VR全景技术是具有巨大潜力的创新技术&#xff0c;它能够为乡村振兴带来许多机会。通过创建沉浸式的虚拟现实环境&#xff0c;VR全景技术在乡村旅游、农业、教育和文化推广等方面都能发挥重要作用。 一、乡村旅游 1.提升乡村景区宣传效果 通过使用VR全景技术…

IDEA 2023版本解决Error running Command line is too long. Shorten the command line

报错信息 Error running XXXApplication. Command line is too long. Shorten the command line via JAR manifest or via a classpath file and rerun. 解决方法 1.右键服务 选择Edit Configuration 2. 点击 Modify options 3. 勾选Shorten commnand line 4. 修改并保存

Java 实现 图片 添加 文字水印、图片水印 工具类

一、话不多说&#xff0c;直接上代码 1.1&#xff0c;水印类型枚举 import lombok.AllArgsConstructor; import lombok.Getter;/*** author: wangjing* createTime: 2023-12-05 15:01* version: 1.0.0* Description: 水印类型枚举*/ Getter AllArgsConstructor SuppressWarni…

已解决error: (-215:Assertion failed) inv_scale_x > 0 in function ‘cv::resize‘

需求背景 欲使用opencv的resize函数将图像沿着纵轴放大一倍&#xff0c;即原来的图像大小为(384, 512), 现在需要将图像放大为(768, 512)。 源码 import cv2 import numpy as np# 生成初始图像 img np.zeros((384, 512), dtypenp.uint8) img[172:212, 32:-32] 255 H, W …