统计学习方法 支持向量机(下)

文章目录

  • 统计学习方法 支持向量机(下)
    • 非线性支持向量机与和核函数
      • 核技巧
      • 正定核
      • 常用核函数
      • 非线性 SVM
    • 序列最小最优化算法
      • 两个变量二次规划的求解方法
      • 变量的选择方法
      • SMO 算法

统计学习方法 支持向量机(下)

学习李航的《统计学习方法》时,关于支持向量机的相关笔记。

非线性支持向量机与和核函数

核技巧

非线性分类问题:前面提到的两种 SVM 都是线性的。但有时分类问题是非线性的,需要 R n \R^n Rn 中的一个超曲面将正负类分开。此时我们可以使用核技巧,对训练实例进行非线性变换,映射过后变成了线性问题,就可以使用原来的方法求解:

请添加图片描述

希尔伯特空间:希尔伯特空间是一个向量空间,它具有内积结构、完备性,通常是无限维度的,用于处理向量、函数或序列的数学空间。

  • 内积结构允许定义向量之间的夹角和长度;
  • 完备性表示空间中的柯西序列都有极限;

核函数:设 X \mathcal{X} X 是输入空间(欧氏空间 R n \R^n Rn 的子集或离散集合),又设 H \mathcal{H} H 为特征空间(希尔伯特空间),如果存在一个从 X \mathcal{X} X H \mathcal{H} H 的映射:
ϕ ( x ) : X → H \phi(x): \, \mathcal{X}\to\mathcal{H} ϕ(x):XH
函数 K ( x , z ) K(x,z) K(x,z) 代表映射后的内积函数,即对所有的 x x x z ∈ X z\in\mathcal{X} zX ,满足条件:
K ( x , z ) = ϕ ( x ) ⋅ ϕ ( z ) K(x,z)=\phi(x)\cdot \phi(z) K(x,z)=ϕ(x)ϕ(z)
则称 K ( x , z ) K(x,z) K(x,z) 为核函数, ϕ ( x ) \phi(x) ϕ(x) 为映射函数。我们往往不需要直接定义 ϕ ( x ) \phi(x) ϕ(x) 核特征空间,只需要定义满足条件的 K ( x , z ) K(x,z) K(x,z) (满足线性性、对称性和正定性),就可以把训练实例映射到某一个高维空间,就有可能使得数据集变为线性的。

核函数在支持向量机中的应用:我们所要求解的对偶问题为:
W ( α ) = 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( x i ⋅ x j ) − ∑ i = 1 N α i W(\alpha)=\frac{1}{2}\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{N}\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)-\sum\limits_{i=1}^{N}\alpha_i W(α)=21i=1Nj=1Nαiαjyiyj(xixj)i=1Nαi
并且最终得到的分离超平面为:
f ( x ) = sign ( ∑ i = 1 N α i ∗ y i ( x i ⋅ x ) + b ∗ ) f(x)=\text{sign}\left(\sum\limits_{i=1}^{N}\alpha_i^{\ast}y_i(x_i\cdot x)+b^\ast\right) f(x)=sign(i=1Nαiyi(xix)+b)
也就是说,所有训练实例 x i x_i xi 在算法中都以内积的形式出现,因此我们可以直接定义核函数 K ( x , z ) K(x,z) K(x,z) ,将问题转化为:
W ( α ) = 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j K ( x i , x j ) − ∑ i = 1 N α i W(\alpha)=\frac{1}{2}\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{N}\alpha_i\alpha_jy_iy_jK(x_i, x_j)-\sum\limits_{i=1}^{N}\alpha_i W(α)=21i=1Nj=1NαiαjyiyjK(xi,xj)i=1Nαi
超平面的方程可以变为:
f ( x ) = sign ( ∑ i = 1 N α i ∗ y i K ( x i , x ) + b ∗ ) f(x)=\text{sign}\left(\sum\limits_{i=1}^{N}\alpha_i^{\ast}y_iK(x_i, x)+b^\ast\right) f(x)=sign(i=1NαiyiK(xi,x)+b)
核函数的选择往往是基于领域知识、经验和实验验证的。

正定核

核函数代表内积运算,需要满足线性性、对称性和正定性。通常所说的核函数就是正定核函数。因此,对于一个函数 K ( x , z ) K(x,z) K(x,z) 是否能被用作核函数,需要满足以下条件:

Th 7.5(正定核函数的充要条件):设 K : X × X → R K:\,\mathcal{X}\times\mathcal{X}\to\R K:X×XR 是对称函数,则 K ( x , z ) K(x,z) K(x,z) 为正定核函数的充分必要条件是:对任意 x i ∈ X x_i\in \mathcal{X} xiX i = 1 , 2 , ⋯ , m i=1,2,\cdots,m i=1,2,,m) , K ( x , z ) K(x,z) K(x,z) 对应的 Gram 矩阵:
K = [ K ( x i , x j ) ] m × m K=[K(x_i,x_j)]_{m\times m} K=[K(xi,xj)]m×m
是半正定矩阵。

证明必要性:由于 K ( x , z ) K(x,z) K(x,z) X × X \mathcal{X}\times\mathcal{X} X×X 上的正定核,所以存在从 X \mathcal{X} X 到希尔伯特空间 H \mathcal{H} H 的映射 ϕ ( x ) \phi(x) ϕ(x) ,使得:
K ( x , z ) = ϕ ( x ) ⋅ ϕ ( z ) K(x,z)=\phi(x) \cdot \phi(z) K(x,z)=ϕ(x)ϕ(z)
于是,对于任意 x i ∈ X x_i\in \mathcal{X} xiX i = 1 , 2 , ⋯ , m i=1,2,\cdots,m i=1,2,,m)的 K ( x , z ) K(x,z) K(x,z) 的 Gram 矩阵 [ K ( x i , x j ) ] m × m [K(x_i,x_j)]_{m\times m} [K(xi,xj)]m×m ,我们要证明该 Gram 矩阵是半正定的,只需要证明其二次型是大于等于 0 的(因为 Gram 矩阵已经对称了)。

对于任意 c = [ c 1 , c 2 , ⋯ , c m ] T ∈ R m c=[c_1,c_2,\cdots,c_m]^\text{T} \in \R^m c=[c1,c2,,cm]TRm ,有:
c T K c = ∑ i , j = 1 m c i c j K ( x i , x j ) = ∑ i , j = 1 m c i c j ( ϕ ( x i ) ⋅ ϕ ( x j ) ) = ( ∑ i c i ϕ ( x i ) ) ⋅ ( ∑ j c j ϕ ( x j ) ) = ∥ ∑ i c i ϕ ( x i ) ∥ 2 ≥ 0 \begin{aligned} c^TKc =&\, \sum\limits_{i,j=1}^{m}c_ic_jK(x_i,x_j) \\ =&\, \sum\limits_{i,j=1}^{m}c_ic_j(\phi(x_i)\cdot \phi(x_j)) \\ =&\, \left(\sum\limits_{i}c_i\phi(x_i)\right)\cdot\left(\sum\limits_{j}c_j\phi(x_j)\right) \\ =&\, \left\| \sum\limits_{i}c_i\phi(x_i) \right\|^2 \geq 0 \end{aligned} cTKc====i,j=1mcicjK(xi,xj)i,j=1mcicj(ϕ(xi)ϕ(xj))(iciϕ(xi))(jcjϕ(xj)) iciϕ(xi) 20
因此该 Gram 矩阵是半正定的。

证明充分性:我们需要依照这样的 K ( x , z ) K(x,z) K(x,z) ,去构造一个希尔伯特空间。分为三步:

  1. 定义映射,构成向量空间:首先定义映射:

ϕ : x → K ( ⋅ , x ) \phi: x\to K(\cdot, x) ϕ:xK(,x)

这里 ⋅ \cdot 是一个占位符,表示一个参数。就是说 ϕ \phi ϕ x x x 映射成了一个函数 K ( ⋅ , x ) K(\cdot,x) K(,x) ,函数的参数为 ⋅ \cdot ;根据这个映射,我们定义线性组合:
f ( ⋅ ) = ∑ i = 1 m α i K ( ⋅ , x i ) f(\cdot)=\sum\limits_{i=1}^m \alpha_i K(\cdot, x_i) f()=i=1mαiK(,xi)
考虑由线性组合为元素构成的集合 S S S ,它对加法和数乘运算是封闭的,所以 S S S 构成一个向量空间。( S S S 中的每个元素都是函数)

  1. S S S 上定义内积,使其成为内积空间:对于任意 f f f g ∈ S g \,\in S gS

f ( ⋅ ) = ∑ i = 1 m α i K ( ⋅ , x i ) g ( ⋅ ) = ∑ j = 1 l β j K ( ⋅ , z j ) \begin{aligned} f(\cdot)=&\, \sum\limits_{i=1}^m \alpha_i K(\cdot, x_i) \\ g(\cdot)=&\, \sum\limits_{j=1}^l \beta_j K(\cdot, z_j) \end{aligned} f()=g()=i=1mαiK(,xi)j=1lβjK(,zj)

S S S 上定义二元运算 ∗ \ast
f ∗ g = ∑ i = 1 m ∑ j = 1 l α i β j K ( x i , z j ) f\ast g=\sum\limits_{i=1}^m\sum\limits_{j=1}^l \alpha_i\beta_jK(x_i,z_j) fg=i=1mj=1lαiβjK(xi,zj)
要证明 ∗ \ast 是空间 S S S 中的内积,需要证明线性性、对称性和正定性;线性性和对称性是挺明显的,现在证明正定性,即:
f ∗ f ≥ 0 ; f ∗ f = 0 ⟺ f = 0 f\ast f \geq 0;\quad f\ast f=0 \iff f=0 ff0;ff=0f=0
有:
f ∗ f = ∑ i , j = 1 m α i α j K ( x i , x j ) f\ast f=\sum\limits_{i,j=1}^m\alpha_i\alpha_j K(x_i,x_j) ff=i,j=1mαiαjK(xi,xj)
由 Gram 矩阵的半正定性得,这玩意儿 f ∗ f ≥ 0 f\ast f \geq 0 ff0 ;对于 f ∗ f = 0 ⟺ f = 0 f\ast f=0 \iff f=0 ff=0f=0 ,充分性显然,下面证明必要性。

首先证明 Cauchy-Shwarz 不等式,设 f f f g ∈ S g \,\in S gS λ ∈ R \lambda \in \R λR ,则 f + λ g ∈ S f+\lambda g \in S f+λgS ,有:
( f + λ g ) ∗ f + λ g ≥ 0 ⇒ f ∗ f + 2 λ ( f ∗ g ) + λ 2 ( g ∗ g ) ≥ 0 \begin{aligned} (f+\lambda g)\ast f+\lambda g \geq 0 \\ \Rightarrow f\ast f+2\lambda(f\ast g)+\lambda^2(g\ast g) \geq 0 \end{aligned} (f+λg)f+λg0ff+2λ(fg)+λ2(gg)0
由于非负,因此判别式小于等于零,有:
( f ∗ g ) 2 − ( f ∗ f ) ( g ∗ g ) ≤ 0 (f\ast g)^2-(f\ast f)(g\ast g) \leq 0 (fg)2(ff)(gg)0
于是得到柯西不等式:
∣ f ∗ g ∣ 2 ≤ ( f ∗ f ) ( g ∗ g ) |f\ast g|^2 \leq (f\ast f)(g\ast g) fg2(ff)(gg)
利用柯西不等式,我们可以得到,对于任意 x ∈ X x\in\mathcal{X} xX ,有:
K ( ⋅ , x ) ∗ f = ∑ i = 1 m α i K ( x , x i ) = f ( x ) K(\cdot,x)\ast f=\sum\limits_{i=1}^m \alpha_i K(x,x_i)=f(x) K(,x)f=i=1mαiK(x,xi)=f(x)
于是:
∣ f ( x ) ∣ 2 = ∣ K ( ⋅ , x ) ∗ f ∣ 2 ≤ ( K ( ⋅ , x ) ∗ K ( ⋅ , x ) ) ( f ∗ f ) = K ( x , x ) ( f ∗ f ) |f(x)|^2=|K(\cdot,x)\ast f|^2 \leq (K(\cdot,x)\ast K(\cdot,x))(f\ast f)=K(x,x)(f\ast f) f(x)2=K(,x)f2(K(,x)K(,x))(ff)=K(x,x)(ff)
即:
∣ f ( x ) ∣ 2 ≤ K ( x , x ) ( f ∗ f ) |f(x)|^2\leq K(x,x)(f\ast f) f(x)2K(x,x)(ff)
于是,当 f ∗ f = 0 f\ast f=0 ff=0 时,对于任意 x x x 都有 f ( x ) = 0 f(x)=0 f(x)=0 ,因此 f = 0 f=0 f=0

至此,我们证明了 ∗ \ast S S S 中的内积运算, S S S 是一个内积空间,我们以仍然以 ⋅ \mathcal{\cdot} 表示 ∗ \ast ,这是比较常用的内积符号(但是和前面的占位符不一样)。

  1. 将内积空间 S S S 完备为希尔伯特空间:由前面内积的定义可以得到范数:

∥ f ∥ = f ⋅ f \|f\|=\sqrt{f\cdot f} f=ff

因此, S S S 是一个赋范向量空间。由泛函分析的某些理论可得,对于不完备的赋范向量空间 S S S ,一定可以使之完备化(虽然我也不知道为啥),由此可以得到完备的赋范向量空间 H \mathcal{H} H ,就是希尔伯特空间。

至此,我们证明了正定核的充分条件。正定核的定义也可以写为:

正定核的等价定义:设 X ⊂ R n \mathcal{X}\subset \R^n XRn K ( x , z ) K(x,z) K(x,z) 是定义在 X × X \mathcal{X}\times\mathcal{X} X×X 上的对称函数,如果对任意 x i ∈ X x_i\in\mathcal{X} xiX i = 1 , 2 , ⋯ , m i=1,2,\cdots,m i=1,2,,m K ( x , z ) K(x,z) K(x,z) 对应的 Gram 矩阵:
K = [ K ( x i , x j ) ] m × m K=[K(x_i,x_j)]_{m\times m} K=[K(xi,xj)]m×m
是半正定矩阵,则称 K ( x , z ) K(x,z) K(x,z) 是正定核。

常用核函数

多项式核函数:对应的支持向量机是一个 p p p 此多项式分类器:
K ( x , z ) = ( x ⋅ z + 1 ) p K(x,z)=(x\cdot z+1)^p K(x,z)=(xz+1)p
分类决策函数为:
f ( x ) = sign ( ∑ i = 1 N α i ∗ y i ( x i ⋅ x + 1 ) p + b ∗ ) f(x)=\text{sign}\left( \sum\limits_{i=1}^{N}\alpha_i^\ast y_i(x_i\cdot x+1)^p+b^\ast \right) f(x)=sign(i=1Nαiyi(xix+1)p+b)
高斯核函数:使用高斯径向函数(RBF):
K ( x , z ) = exp ( − ∥ x − z ∥ 2 2 σ 2 ) K(x,z)=\text{exp}\left(-\frac{\|x-z\|^2}{2\sigma^2} \right) K(x,z)=exp(2σ2xz2)
分类决策函数为:
f ( x ) = sign ( ∑ i = 1 N α i ∗ y i exp ( − ∥ x − x i ∥ 2 2 σ 2 ) + b ∗ ) f(x)=\text{sign}\left( \sum\limits_{i=1}^{N}\alpha_i^\ast y_i\text{exp}\left(-\frac{\|x-x_i\|^2}{2\sigma^2} \right)+b^\ast \right) f(x)=sign(i=1Nαiyiexp(2σ2xxi2)+b)

字符串核函数:定义有限字符表 Σ \Sigma Σ

  • 字符串 s s s 是从 Σ \Sigma Σ 中取出有限个字符的序列,其长度表示为 ∣ s ∣ |s| s

  • 两个字符串 s s s t t t 的连接记为 s t st st

  • 所有长度为 n n n 的字符串集合记作 Σ n \Sigma^n Σn

  • 所有字符串的集合记作 Σ ∗ = ⋃ i = 1 ∞ Σ i \Sigma^\ast =\bigcup\limits_{i=1}^\infty \Sigma^i Σ=i=1Σi

给定一个下标序列 i = ( i 1 , i 2 , ⋯ , i ∣ u ∣ ) i=(i_1,i_2,\cdots,i_{|u|}) i=(i1,i2,,iu) ,其中 1 ≤ i 1 < i 2 < ⋯ < i ∣ u ∣ ≤ ∣ s ∣ 1\leq i_1\lt i_2 \lt \cdots \lt i_{|u|} \leq |s| 1i1<i2<<ius ,考虑 s s s 字符串的子串 u = s [ i ] u=s[i] u=s[i] ,定义 l ( i ) = i ∣ u ∣ − i 1 + 1 l(i)=i_{|u|}-i_1+1 l(i)=iui1+1 ,代表下标的跨度。若 i i i 是连续的,则 l ( i ) = ∣ u ∣ l(i)=|u| l(i)=u ,否则 l ( i ) > ∣ u ∣ l(i)\gt |u| l(i)>u

S S S 是长度大于等于 n n n 的字符串的集合,设 s ∈ S s\in S sS 。先建立字符串集合 S S S 到特征空间 H n = R ∣ Σ n ∣ \mathcal{H}_{n}=\R^{|\Sigma^n|} Hn=RΣn 的映射 ϕ n ( s ) \phi_n(s) ϕn(s) 。其中 ∣ Σ n ∣ |\Sigma^n| Σn 代表集合 Σ n \Sigma^n Σn 的基数, R ∣ Σ n ∣ \R^{|\Sigma^n|} RΣn 中向量的每一维对应某个字符串 u ∈ Σ n u\in \Sigma^n uΣn

定义 R ∣ Σ n ∣ \R^{|\Sigma^n|} RΣn 中向量在 u u u 维上的取值为:
[ ϕ n ( s ) ] u = ∑ i : s ( i ) = u λ l ( i ) [\phi_n(s)]_u=\sum\limits_{i:s(i)=u}\lambda^{l(i)} [ϕn(s)]u=i:s(i)=uλl(i)
这里 0 < λ ≤ 1 0\lt \lambda \leq 1 0<λ1 是一个衰减参数,求和表示在 s s s 中所有为 u u u 的子串上进行;

:对于英文字符串, n = 3 n=3 n=3 ,现将 S S S 映射到 H 3 \mathcal{H}_3 H3 。设 H 3 \mathcal{H}_3 H3 中的向量的第一维对应于字符串 asd ,则对于两个字符串 Nasdaqlass das ,它们在第一维上的取值分别为:

  • [ ϕ 3 ( Nasdaq ) ] asd = λ 3 [\phi_3(\text{Nasdaq})]_{\text{asd}}=\lambda^3 [ϕ3(Nasdaq)]asd=λ3 :因为 Nasdaq 只有一个子串为 asd ,下标为 ( 2 , 3 , 4 ) (2,3,4) (2,3,4) ,所以 l ( ( 2 , 3 , 4 ) ) = 3 l((2,3,4))=3 l((2,3,4))=3
  • [ ϕ 3 ( lass das ) ] asd = 2 λ 5 [\phi_3(\text{lass das})]_{\text{asd}}=2\lambda^5 [ϕ3(lass das)]asd=2λ5lass das 有两个子串为 asd ,且对应的 l(i) 均为 5;

我们定义字符串 s s s t t t 的核函数为:
K n ( s , t ) = ∑ u ∈ Σ n [ ϕ n ( s ) ] u [ ϕ n ( t ) ] u = ∑ u ∈ Σ n ∑ ( i , j ) : s ( i ) = t ( j ) = u λ l ( i ) λ l ( j ) \begin{aligned} K_n(s,t)=&\,\sum\limits_{u\in\Sigma^n}[\phi_n(s)]_u[\phi_n(t)]_u \\ =&\, \sum\limits_{u\in\Sigma^n}\sum\limits_{(i,j):s(i)=t(j)=u}\lambda^{l(i)}\lambda^{l(j)} \end{aligned} Kn(s,t)==uΣn[ϕn(s)]u[ϕn(t)]uuΣn(i,j):s(i)=t(j)=uλl(i)λl(j)
可以理解为,两个字符串共同子串越多,二者就越相似。字符串核函数可以由动态规划来快速计算。

非线性 SVM

非线性支持向量机:给定非线性分类训练集,通过核函数与软间隔最大化,或对应的对偶最优化问题,学习得到的分类决策函数:
f ( x ) = sign ( ∑ i = 1 N α i ∗ y i K ( x , x i ) + b ∗ ) f(x)=\text{sign}\left( \sum\limits_{i=1}^{N}\alpha_i^\ast y_iK(x,x_i)+b^\ast \right) f(x)=sign(i=1NαiyiK(x,xi)+b)
称为非线性支持向量机, K ( x , z ) K(x,z) K(x,z) 是正定核函数。

算法:非线性支持向量机学习算法

  • 输入:线性可分训练数据集 T = { ( x 1 , t 1 ) , ( x 2 , y 2 ) , ⋯ , ( x N , y N ) } T=\set{(x_1,t_1),(x_2,y_2),\cdots,(x_N,y_N)} T={(x1,t1),(x2,y2),,(xN,yN)} ,其中 x i ∈ X ⊆ R n x_i\in\mathcal{X}\subseteq \R^n xiXRn y i ∈ Y = { 1 , − 1 } y_i\in\mathcal{Y}=\set{1,\,-1} yiY={1,1}
  • 输出:分类决策函数
  1. 选取适当的核函数 K ( x , z ) K(x,z) K(x,z) 和超参数 C C C ,构造求解最优化问题:

min ⁡ α 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j K ( x i , x j ) − ∑ i = 1 N α i s.t. ∑ i = 1 N α i y i = 0 α i ≥ 0 , i = 1 , 2 , ⋯ , N \begin{aligned} \min_{\alpha}&\, \frac{1}{2}\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{N}\alpha_i\alpha_jy_iy_jK(x_i, x_j)-\sum\limits_{i=1}^{N}\alpha_i \\ \text{s.t.}&\,\, \sum_{i=1}^{N}\alpha_iy_i=0 \\ &\,\, \alpha_i\geq 0,\quad i=1,2,\cdots,N \end{aligned} αmins.t.21i=1Nj=1NαiαjyiyjK(xi,xj)i=1Nαii=1Nαiyi=0αi0,i=1,2,,N

得到最优解 α ∗ \alpha^\ast α

  1. 选择 α ∗ \alpha^\ast α 的一个正分量 α j ∗ \alpha_j^\ast αj ,计算:
    b ∗ = y j − ∑ i = 1 N α i ∗ y i ( x i ⋅ x j ) b^\ast=y_j-\sum\limits_{i=1}^{N}\alpha_i^\ast y_i(x_i\cdot x_j) b=yji=1Nαiyi(xixj)

  2. 构造决策函数:

f ( x ) = sign ( ∑ i = 1 N α i ∗ y i K ( x , x i ) + b ∗ ) f(x)=\text{sign}\left( \sum\limits_{i=1}^{N}\alpha_i^\ast y_iK(x,x_i)+b^\ast \right) f(x)=sign(i=1NαiyiK(x,xi)+b)

K ( x , z ) K(x,z) K(x,z) 是正定核函数时,该问题是凸二次规划问题,解是存在的。

序列最小最优化算法

我们在求解对偶的凸二次规划问题时,当样本量很大时, 一般的最优化算法会变得很低效:
min ⁡ α 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j K ( x i , x j ) − ∑ i = 1 N α i s.t. ∑ i = 1 N α i y i = 0 0 ≤ α i ≤ C , i = 1 , 2 , ⋯ , N \begin{aligned} \min_{\alpha}&\, \frac{1}{2}\sum\limits_{i=1}^{N}\sum\limits_{j=1}^{N}\alpha_i\alpha_jy_iy_jK(x_i, x_j)-\sum\limits_{i=1}^{N}\alpha_i \\ \text{s.t.}&\,\, \sum_{i=1}^{N}\alpha_iy_i=0 \\ &\,\, 0\leq\alpha_i\leq C,\quad i=1,2,\cdots,N \end{aligned} αmins.t.21i=1Nj=1NαiαjyiyjK(xi,xj)i=1Nαii=1Nαiyi=00αiC,i=1,2,,N
SMO(序列最小最优化)算法是一种启发式算法,思路为:

  • 如果所有变量的解都满足 KKT 条件,则解就得到了;
  • 否则,选取两个变量,固定其他变量,针对这两个变量构建一个二次规划问题。两个变量的二次规划问题可以直接通过解析方法求解。这个二次规划问题关于这两个变量的解应当比原来更接近原始二次规划问题的解;
  • 子问题有两个变量:一个是违反 KKT 条件最严重的那个,另一个由约束条件自动确定;
  • 通过不断地将原问题分解为子问题,并且求解子问题,从而迭代地达到求解原问题的目的。

注意,子问题的两个变量只有一个是自由变量,例如,假设 α 1 \alpha_1 α1 α 2 \alpha_2 α2 为变量,其余 α \alpha α 固定,则可以得到:
α 1 = − y 1 ∑ i = 2 N α i y i \alpha_1=-y_1\sum\limits_{i=2}^N\alpha_iy_i α1=y1i=2Nαiyi
如果 α 2 \alpha_2 α2 确定,则 α 1 \alpha_1 α1 也随之确定。

SMO 算法包含两个部分:两个变量二次规划问题的解析解和选择变量的启发式方法。

两个变量二次规划的求解方法

两个变量二次规划问题:同样地,假设 α 1 \alpha_1 α1 α 2 \alpha_2 α2 为变量,其余 α \alpha α 固定(我们将 α 2 \alpha_2 α2 看作自由变量),则可以得到(注意 y i 2 = 1 y_i^2=1 yi2=1):
min ⁡ α 1 , α 2 W ( α 1 , α 2 ) = 1 2 K 11 α 1 2 + 1 2 K 2 α 2 2 + y 1 y 2 K 12 α 1 α 2 − ( α 1 + α 2 ) + y 1 α 1 ∑ i = 3 N y i α i K i 1 + y 2 α 2 ∑ i = 3 N y i α i K i 2 s.t. α 1 y 1 + α 2 y 2 = − ∑ i = 3 N y i α i = ζ 0 ≤ α i ≤ C , i = 1 , 2 \begin{aligned} \min_{\alpha_1,\alpha_2}&\, W(\alpha_1,\alpha_2) =\frac{1}{2}K_{11}\alpha_1^2+\frac{1}{2}K_{2}\alpha_2^2+y_1y_2K_{12}\alpha_1\alpha_2 \\ &\quad\quad\quad\quad\quad-(\alpha_1+\alpha_2) +y_1\alpha_1\sum\limits_{i=3}^Ny_i\alpha_iK_{i1} +y_2\alpha_2\sum\limits_{i=3}^Ny_i\alpha_iK_{i2} \\ \text{s.t.}&\,\, \alpha_1y_1+\alpha_2y_2=-\sum\limits_{i=3}^{N}y_i\alpha_i=\zeta \\ &\,\, 0\leq\alpha_i\leq C,\quad i=1,2 \end{aligned} α1,α2mins.t.W(α1,α2)=21K11α12+21K2α22+y1y2K12α1α2(α1+α2)+y1α1i=3NyiαiKi1+y2α2i=3NyiαiKi2α1y1+α2y2=i=3Nyiαi=ζ0αiC,i=1,2
其中 K i j = K ( x i , x j ) K_{ij}=K(x_i,x_j) Kij=K(xi,xj) ζ \zeta ζ 为常数;

约束条件:注意到 y i y_i yi 只有 ± 1 \pm 1 ±1 的取值,因此约束有两种情况( α 2 \alpha_2 α2 是纵坐标, α 1 \alpha_1 α1 是横坐标):

请添加图片描述

约束是 [ 0 , C ] [0,\,C] [0,C] 的正方形内的一条对角线,方程为 α 2 − α 2 old + y 1 y 2 ( α 1 − α 1 old ) = 0 \alpha_2-\alpha_2^{\text{old}}+y_1y_2(\alpha_1-\alpha_1^{\text{old}})=0 α2α2old+y1y2(α1α1old)=0

假设初始可行解为 α 1 old \alpha_1^{\text{old}} α1old α 2 old \alpha_2^{\text{old}} α2old ,最优解为 α 1 new \alpha_1^{\text{new}} α1new α 2 new \alpha_2^{\text{new}} α2new ;并且假设在沿着约束方向未经 0 ≤ α i ≤ C 0\leq\alpha_i\leq C 0αiC 剪辑时 α 2 \alpha_2 α2 的最优解为 α 2 new unc \alpha_2^{\text{new unc}} α2new unc

最优解 α 2 new \alpha_2^{\text{new}} α2new 的取值范围需满足条件:
L ≤ α 2 new ≤ H L\leq\alpha_2^{\text{new}}\leq H Lα2newH
L L L H H H 就是对角线段的端点,如果 y 1 ≠ y 2 y_1\not=y_2 y1=y2 ,则直线的表达式为 α 2 = α 1 + α 2 old − α 1 old \alpha_2=\alpha_1+\alpha_2^{\text{old}}-\alpha_1^{\text{old}} α2=α1+α2oldα1old
L = max ⁡ ( 0 , α 2 old − α 1 old ) , H = min ⁡ ( C , C + α 2 old − α 1 old ) L=\max(0,\,\alpha_2^{\text{old}}-\alpha_1^{\text{old}}),\quad H=\min(C,\,C+\alpha_2^{\text{old}}-\alpha_1^{\text{old}}) L=max(0,α2oldα1old),H=min(C,C+α2oldα1old)
如果 y 1 = y 2 y_1=y_2 y1=y2 ,则直线的表达式为 α 2 = − α 1 + α 2 old + α 1 old \alpha_2=-\alpha_1+\alpha_2^{\text{old}}+\alpha_1^{\text{old}} α2=α1+α2old+α1old
L = max ⁡ ( 0 , α 2 old + α 1 old − C ) , H = min ⁡ ( C , α 2 old + α 1 old ) L=\max(0,\,\alpha_2^{\text{old}}+\alpha_1^{\text{old}}-C),\quad H=\min(C,\,\alpha_2^{\text{old}}+\alpha_1^{\text{old}}) L=max(0,α2old+α1oldC),H=min(C,α2old+α1old)
求解 α 2 new \alpha_2^{\text{new}} α2new:我们的思想是,先求得 α 2 new unc \alpha_2^{\text{new unc}} α2new unc ,再使用 [ L , H ] [L,\,H] [L,H] 剪辑得到 α 2 new \alpha_2^{\text{new}} α2new
α 2 new = { H , α 2 new unc > H α 2 new unc , L ≤ α 2 new unc ≤ H L , α 2 new unc < L \alpha_2^{\text{new}}=\left\{ \begin{array}{ll} H, & \alpha_2^{\text{new unc}} \gt H \\ \alpha_2^{\text{new unc}}, & L \leq \alpha_2^{\text{new unc}} \leq H \\ L, & \alpha_2^{\text{new unc}} \lt L \end{array} \right. α2new= H,α2new unc,L,α2new unc>HLα2new uncHα2new unc<L
α 1 new \alpha_1^{\text{new}} α1new 为:
α 1 new = α 1 old − y 1 y 2 ( α 2 new − α 2 old ) \alpha_1^{\text{new}}=\alpha_1^{\text{old}}-y_1y_2(\alpha_2^{\text{new}}-\alpha_2^{\text{old}}) α1new=α1oldy1y2(α2newα2old)
求解 α 2 new unc \alpha_2^{\text{new unc}} α2new unc:记:
g ( x ) = ∑ i = 1 N α i old y i K ( x i , x ) + b old g(x)=\sum\limits_{i=1}^N \alpha_i^{\text{old}}y_iK(x_i,x)+b^{\text{old}} g(x)=i=1NαioldyiK(xi,x)+bold
其中 b old b^{\text{old}} bold 是以当前迭代到的可行解 α old \alpha^{\text{old}} αold 计算得到的 b b b g ( x ) g(x) g(x) 其实就是以当前迭代到的可行解 α old \alpha^{\text{old}} αold 计算得到的去掉符号函数的决策函数;令:
E i = g ( x i ) − y i = ( ∑ j = 1 N α j old y j K ( x j , x i ) + b old ) − y i , i = 1 , 2 E_i=g(x_i)-y_i=\left( \sum\limits_{j=1}^N \alpha_j^{\text{old}}y_jK(x_j,x_i)+b^{\text{old}} \right)-y_i,\quad i=1,2 Ei=g(xi)yi=(j=1NαjoldyjK(xj,xi)+bold)yi,i=1,2
再引入记号( Φ \Phi Φ 为核函数 K ( x , z ) K(x,z) K(x,z) 所对应的输入空间到特征空间的映射):
η = K 11 + K 22 − 2 K 12 = ∥ Φ ( x 1 ) − Φ ( x 2 ) ∥ 2 \eta=K_{11}+K_{22}-2K_{12}=\|\Phi(x_1)-\Phi(x_2)\|^2 η=K11+K222K12=∥Φ(x1)Φ(x2)2
则可以得到两个变量二次规划问题在沿着约束方向未经剪辑时 α 2 \alpha_2 α2 的最优解为:
α 2 new unc = α 2 old + y 2 ( E 1 − E 2 ) η \alpha_2^{\text{new unc}}=\alpha_2^{\text{old}}+\frac{y_2(E_1-E_2)}{\eta} α2new unc=α2old+ηy2(E1E2)
证明:引进记号(为了方便书写,去掉了 old \text{old} old 上标。没有特殊说明都是 old \text{old} old):
v i = ∑ j = 3 N α j y j K ( x i , x j ) = g ( x i ) − ∑ j = 1 2 α j y j K ( x i , x j ) − b , i = 1 , 2 v_i=\sum\limits_{j=3}^N \alpha_jy_j K(x_i,x_j)=g(x_i)-\sum\limits_{j=1}^2 \alpha_jy_jK(x_i,x_j)-b,\quad i=1,2 vi=j=3NαjyjK(xi,xj)=g(xi)j=12αjyjK(xi,xj)b,i=1,2
则目标函数写成:
W ( α 1 , α 2 ) = 1 2 K 11 α 1 2 + 1 2 K 2 α 2 2 + y 1 y 2 K 12 α 1 α 2 − ( α 1 + α 2 ) + y 1 α 1 ∑ i = 3 N y i α i K i 1 + y 2 α 2 ∑ i = 3 N y i α i K i 2 = 1 2 K 11 α 1 2 + 1 2 K 2 α 2 2 + y 1 y 2 K 12 α 1 α 2 − ( α 1 + α 2 ) + y 1 v 1 α 1 + y 2 v 2 α 2 \begin{aligned} W(\alpha_1,\alpha_2) =&\,\frac{1}{2}K_{11}\alpha_1^2+\frac{1}{2}K_{2}\alpha_2^2+y_1y_2K_{12}\alpha_1\alpha_2 \\ -&\,(\alpha_1+\alpha_2) +y_1\alpha_1\sum\limits_{i=3}^Ny_i\alpha_iK_{i1} +y_2\alpha_2\sum\limits_{i=3}^Ny_i\alpha_iK_{i2} \\ =&\,\frac{1}{2}K_{11}\alpha_1^2+\frac{1}{2}K_{2}\alpha_2^2+y_1y_2K_{12}\alpha_1\alpha_2 \\ -&\,(\alpha_1+\alpha_2)+y_1v_1\alpha_1+y_2v_2\alpha_2 \end{aligned} W(α1,α2)==21K11α12+21K2α22+y1y2K12α1α2(α1+α2)+y1α1i=3NyiαiKi1+y2α2i=3NyiαiKi221K11α12+21K2α22+y1y2K12α1α2(α1+α2)+y1v1α1+y2v2α2
现在这个目标函数同时含有 α 1 \alpha_1 α1 α 2 \alpha_2 α2 ,我们要计算 α 2 new unc \alpha_2^{\text{new unc}} α2new unc ,因此只保留约束条件 α 1 y 1 + α 2 y 2 = ζ \alpha_1y_1+\alpha_2y_2=\zeta α1y1+α2y2=ζ ,消去 α 1 \alpha_1 α1 ,仅保留 α 2 \alpha_2 α2
α 1 = y 1 ( ζ − α 2 y 2 ) \alpha_1=y_1(\zeta-\alpha_2y_2) α1=y1(ζα2y2)
将其带入目标函数,得到:
W ( α 2 ) = 1 2 K 11 ( ζ − α 2 y 2 ) 2 + 1 2 K 2 α 2 2 + y 2 K 12 ( ζ − α 2 y 2 ) α 2 − y 1 ( ζ − α 2 y 2 ) − α 2 + v 1 ( ζ − α 2 y 2 ) + y 2 v 2 α 2 \begin{aligned} W(\alpha_2)=&\,\frac{1}{2}K_{11}(\zeta-\alpha_2y_2)^2+\frac{1}{2}K_{2}\alpha_2^2+y_2K_{12}(\zeta-\alpha_2y_2)\alpha_2 \\ -&\,y_1(\zeta-\alpha_2y_2)-\alpha_2+v_1(\zeta-\alpha_2y_2)+y_2v_2\alpha_2 \end{aligned} W(α2)=21K11(ζα2y2)2+21K2α22+y2K12(ζα2y2)α2y1(ζα2y2)α2+v1(ζα2y2)+y2v2α2
现在只有一个变量了,FOC 为:
∂ W ∂ α 2 = K 11 α 2 − K 11 ζ y 2 + K 22 α 2 + K 12 ζ y 2 − 2 K 12 α 2 + y 1 y 2 − 1 − v 1 y 2 + v 2 y 2 = 0 \begin{aligned} \frac{\partial W}{\partial \alpha_2}=&\, K_{11}\alpha_2-K_{11}\zeta y_2+K_{22}\alpha_2+K_{12}\zeta y_2-2K_{12}\alpha_2+y_1y_2-1-v_1y_2+v_2y_2 \\ =&\, 0 \\ \end{aligned} α2W==K11α2K11ζy2+K22α2+K12ζy22K12α2+y1y21v1y2+v2y20
得到:
( K 11 + K 22 − 2 K 12 ) α 2 = y 2 ( K 11 ζ − K 12 ζ − y 1 + y 2 + v 1 − v 2 ) = y 2 [ K 11 ζ − K 12 ζ − y 1 + y 2 + ( g ( x 1 ) − ∑ j = 1 2 α j y j K 1 j − b ) − ( g ( x 2 ) − ∑ j = 1 2 α j y j K 2 j − b ) ] = y 2 ( K 11 ζ − K 12 ζ + E 1 − E 2 − ∑ j = 1 2 α j y j K 1 j + ∑ j = 1 2 α j y j K 2 j ) = y 2 ( E 1 − E 2 + α 2 y 2 ( K 11 + K 22 − 2 K 12 ) ) \begin{aligned} (K_{11}+K_{22}-2K_{12})\alpha_2=&\, y_2(K_{11}\zeta-K_{12}\zeta-y_1+y_2+v_1-v_2) \\ =&\, y_2[K_{11}\zeta-K_{12}\zeta-y_1+y_2 \\ +&\,\left( g(x_1)-\sum\limits_{j=1}^2\alpha_jy_jK_{1j}-b \right) \\ -&\,\left( g(x_2)-\sum\limits_{j=1}^2\alpha_jy_jK_{2j}-b \right) ] \\ =&\, y_2\left( K_{11}\zeta-K_{12}\zeta+E_1-E_2-\sum\limits_{j=1}^2\alpha_jy_jK_{1j}+\sum\limits_{j=1}^2\alpha_jy_jK_{2j} \right) \\ =&\, y_2(E_1-E_2+\alpha_2y_2(K_{11}+K_{22}-2K_{12})) \end{aligned} (K11+K222K12)α2==+==y2(K11ζK12ζy1+y2+v1v2)y2[K11ζK12ζy1+y2(g(x1)j=12αjyjK1jb)(g(x2)j=12αjyjK2jb)]y2(K11ζK12ζ+E1E2j=12αjyjK1j+j=12αjyjK2j)y2(E1E2+α2y2(K11+K222K12))

  • 中间带入了 E i = g ( x i ) − y i E_i=g(x_i)-y_i Ei=g(xi)yi ζ = α 1 old y 1 + α 2 old y 2 \zeta=\alpha_1^{\text{old}}y_1+\alpha_2^{\text{old}}y_2 ζ=α1oldy1+α2oldy2

  • 注意 K 12 = K 21 K_{12}=K_{21} K12=K21

再带入 η = K 11 + K 22 − 2 K 12 \eta=K_{11}+K_{22}-2K_{12} η=K11+K222K12 ,就能得到:
α 2 new unc = α 2 old + y 2 ( E 1 − E 2 ) η \alpha_2^{\text{new unc}}=\alpha_2^{\text{old}}+\frac{y_2(E_1-E_2)}{\eta} α2new unc=α2old+ηy2(E1E2)

变量的选择方法

SMO 算法在每个子问题中选择两个变量优化,其中至少一个变量时违反 KKT 条件的。

第一个变量的选择:该过程称为外层循环,选取所有训练样本中违反 KKT 条件最严重的样本点作为第一个变量 α 1 \alpha_1 α1 。KKT 条件为:
α i = 0 ⟺ y i g ( x 1 ) ≥ 1 0 < α i < C ⟺ y i g ( x 1 ) = 1 α i = C ⟺ y i g ( x 1 ) ≤ 1 \begin{aligned} \alpha_i=0 \iff y_ig(x_1) \geq 1 \\ 0\lt \alpha_i \lt C \iff y_ig(x_1) = 1 \\ \alpha_i=C \iff y_ig(x_1) \leq 1 \\ \end{aligned} αi=0yig(x1)10<αi<Cyig(x1)=1αi=Cyig(x1)1
SMO 算法往往有一个超参数为精度 ε \varepsilon ε ,该检查是在 ε \varepsilon ε 的误差范围内进行的。 外层循环先检查 0 < α i < C 0\lt \alpha_i \lt C 0<αi<C (间隔边界上)的样本点,再检验其他样本点;

第二个变量的选择:该过程称为内层循环,选择标准为能使得 α 2 \alpha_2 α2 有足够大的变化。

  • α 2 new \alpha_2^{\text{new}} α2new 是依赖于 ∣ E 1 − E 2 ∣ |E_1-E_2| E1E2 的,在 α 1 \alpha_1 α1 确定的情况下, E 1 E_1 E1 也随之确定了。所以选择一个使得 ∣ E 1 − E 2 ∣ |E_1-E_2| E1E2 最大的 α 2 \alpha_2 α2 即可;为了加速计算,可以在变量选择时提前算好所有的 E i E_i Ei
  • 有时上述方法得到的 α 2 \alpha_2 α2 不能使得目标函数有足够的下降,可以采用启发式规则继续选择 α 2 \alpha_2 α2 :首先检查间隔边界上( 0 < α i < C 0\lt \alpha_i \lt C 0<αi<C )的样本点作为 α 2 \alpha_2 α2 试用,使得目标函数有足够的下降;再试用其他样本点;最后都不行的话,放弃 α 1 \alpha_1 α1 并重新选择;

计算偏移量 b b b 和差值 E i E_i Ei :每次完成两个变量的优化后,就要用新的 α \alpha α 计算 b b b

0 < α 1 new < C 0\lt \alpha_1^{\text{new}}\lt C 0<α1new<C 时,由 KKT 条件可知:
b = y 1 − ∑ i = 1 N α i y i K 1 i = y 1 − ∑ i = 3 N α i y i K 1 i − α 1 new y 1 K 11 − α 2 new y 2 K 12 \begin{aligned} b=&\, y_1-\sum\limits_{i=1}^{N}\alpha_iy_iK_{1i} \\ =&\, y_1-\sum\limits_{i=3}^{N}\alpha_iy_iK_{1i}-\alpha_1^{\text{new}}y_1K_{11}-\alpha_2^{\text{new}}y_2K_{12} \end{aligned} b==y1i=1NαiyiK1iy1i=3NαiyiK1iα1newy1K11α2newy2K12
带入 E 1 E_1 E1 得到:
b 1 new = − E 1 − y 1 K 11 ( α 1 new − α 1 old ) − y 2 K 12 ( α 2 new − α 2 old ) + b old b_{1}^{\text{new}}=-E_1-y_1K_{11}(\alpha_{1}^{\text{new}}-\alpha_{1}^{\text{old}})-y_2K_{12}(\alpha_{2}^{\text{new}}-\alpha_{2}^{\text{old}})+b^{\text{old}} b1new=E1y1K11(α1newα1old)y2K12(α2newα2old)+bold
0 < α 2 new < C 0\lt\alpha_2^{\text{new}}\lt C 0<α2new<C ,则:
b 2 new = − E 2 − y 1 K 12 ( α 1 new − α 1 old ) − y 2 K 22 ( α 2 new − α 2 old ) + b old b_{2}^{\text{new}}=-E_2-y_1K_{12}(\alpha_{1}^{\text{new}}-\alpha_{1}^{\text{old}})-y_2K_{22}(\alpha_{2}^{\text{new}}-\alpha_{2}^{\text{old}})+b^{\text{old}} b2new=E2y1K12(α1newα1old)y2K22(α2newα2old)+bold
对于 E i E_i Ei 值的更新,直接按照定义式算就可以了,但是需要用到 b new b^{\text{new}} bnew
E i new = ∑ j = 1 N y j α i K ( x i , x j ) + b new − y i E_{i}^{\text{new}}=\sum\limits_{j=1}^{N}y_j\alpha_i K(x_i,x_j)+b^{\text{new}}-y_i Einew=j=1NyjαiK(xi,xj)+bnewyi
这里不一定需要从 j = 1 j=1 j=1 遍历到 N N N ,因为只有支持向量的 α j ≠ 0 \alpha_j\not=0 αj=0 ,所以可以维护一个支持向量的集合 S S S

SMO 算法

输入:线训练数据集 T = { ( x 1 , t 1 ) , ( x 2 , y 2 ) , ⋯ , ( x N , y N ) } T=\set{(x_1,t_1),(x_2,y_2),\cdots,(x_N,y_N)} T={(x1,t1),(x2,y2),,(xN,yN)} ,其中 x i ∈ X ⊆ R n x_i\in\mathcal{X}\subseteq \R^n xiXRn y i ∈ Y = { 1 , − 1 } y_i\in\mathcal{Y}=\set{1,\,-1} yiY={1,1} ;精度 ε \varepsilon ε

输出:近似解 α ^ \hat{\alpha} α^

  1. 选取初值 α ( 0 ) = 0 \alpha^{(0)}=0 α(0)=0 ,令计步数 k = 0 k=0 k=0
  2. 以上述选取变量方法选取优化变量 α 1 ( k ) \alpha_1^{(k)} α1(k) α 2 ( k ) \alpha_2^{(k)} α2(k) ,直接用解析方程得到二者最优解 α 1 ( k + 1 ) \alpha_1^{(k+1)} α1(k+1) α 2 ( k + 1 ) \alpha_2^{(k+1)} α2(k+1) ,此时 α \alpha α 更新为 α ( k + 1 ) \alpha^{(k+1)} α(k+1)
  3. 若在精度 ε \varepsilon ε 范围内满足停机条件(约束条件):

∑ i = 1 N α i y i = 0 , 0 ≤ α i ≤ C , i = 1 , 2 , ⋯ , N \sum\limits_{i=1}^{N}\alpha_iy_i=0,\quad 0\leq \alpha_i\leq C,\quad i=1,2,\cdots,N i=1Nαiyi=0,0αiC,i=1,2,,N

和:
y i g ( x i ) { ≥ 1 , { x i ∣ α i = 0 } = 1 , { x i ∣ 0 < α i < C } ≤ 1 , { x i ∣ α i = C } y_ig(x_i)\left\{ \begin{array}{ll} \geq 1, & \set{x_i|\alpha_i=0} \\ = 1, & \set{x_i|0\lt\alpha_i\lt C} \\ \leq 1, & \set{x_i|\alpha_i=C} \\ \end{array} \right. yig(xi) 1,=1,1,{xiαi=0}{xi0<αi<C}{xiαi=C}
其中:
g ( x i ) = ∑ j = 1 N α j y j K ( x i , x j ) + b g(x_i)=\sum\limits_{j=1}^{N}\alpha_jy_jK(x_i,x_j)+b g(xi)=j=1NαjyjK(xi,xj)+b

  1. 返回 α ^ = α ( k + 1 ) \hat\alpha=\alpha^{(k+1)} α^=α(k+1)

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

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

相关文章

【STM32】STM32中断体系

一、STM32的NVIC和起始代码中的ISP 1.NVIC(嵌套向量中断控制器) (1)数据手册中相关部分浏览 (2)地址映射时0地址映射到Flash或SRAM (3)中断向量表可以被人为重新映射&#xff0c;一般用来IAP中 (4)STM32采用一维的中断向量表 (5)中断优先级设置有点复杂&#xff0c;后面细说 1…

Java练习题2020-2

"统计1到N的整数中,除了1和自身之外&#xff0c;至少还能被两个数整除的数的个数 输入说明&#xff1a;整数 N(N<10000)&#xff1b; 输出说明&#xff1a;符合条件的数的个数 输入样例&#xff1a;10 输出样例&#xff1a;3 (说明&#xff1a;样例中符合条件的3个数是…

【2024秋招】2023-9-16 贝壳后端开发二面

1 自我介绍 2 秒杀系统 2.1 超卖怎么解决 3 redis 3.1 过期策略 3.2 过期算法 4 kafka 4.1 说一说你对kafka的了解 4.2 如何保证事务性消息 4.3 如何保证消息不丢失 4.4 消息队列的两种通信方式 点对点模式 如上图所示&#xff0c;点对点模式通常是基于拉取或者轮询…

【算法练习Day30】无重叠区间 划分字母区间合并区间

​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;练题 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 文章目录 无重叠区间划分字母区间合并…

docker应用部署---nginx部署的配置

1. 搜索nginx镜像 docker search nginx2. 拉取nginx镜像 docker pull nginx3. 创建容器&#xff0c;设置端口映射、目录映射 # 在/root目录下创建nginx目录用于存储nginx数据信息 mkdir ~/nginx cd ~/nginx mkdir conf cd conf# 在~/nginx/conf/下创建nginx.conf文件,粘贴下…

yum--centos 和apt --ubuntu

centos安装软件 搜索语法&#xff1a;yum -y search 软件名称 安装软件前可以先去搜一下看看能用yum中有这个软件吗 安装语法&#xff1a;yum -y install 软件名称 写上 -y 意思是不用手动确认&#xff0c;直接安装 卸载语法&#xff1a;yum -y remove 软件名称 注…

推荐一个高效测试用例工具:XMind2TestCase..

一、背景 软件测试的核心是什么&#xff1f;毫无疑问是测试分析和测试用例设计&#xff0c;也是日常测试投入最多时间的工作内容之一。 然而&#xff0c;传统的测试用例设计过程有很多痛点&#xff1a; 1、使用Excel表格进行测试用例设计&#xff0c;虽然成本低&#xff0c;但…

3.加载天地图

愿你出走半生,归来仍是少年&#xff01; 上一篇文章构建出来基础的白球&#xff0c;现在需要给它添加底图啦。先上最常用的天地图。 1.天地图 天地图做过Gis开发的应该都知道&#xff0c;需要先申请key然后才能使用。然后天地图是基于XYZ的标准进行切片的&#xff0c;所以直接…

浏览器事件循环 (event loop)

进程与线程 进程 进程的概念 进程是操作系统中的一个程序或者一个程序的一次执行过程&#xff0c;是一个动态的概念&#xff0c;是程序在执行过程中分配和管理资源的基本单位&#xff0c;是操作系统结构的基础。 简单的来说&#xff0c;就是一个程序运行开辟的一块内存空间&a…

win10 + VS2017 编译libjpeg(jpeg-9b)--更新

刚刚写了一篇“win10 VS2017 编译libjpeg&#xff08;jpeg-9b&#xff09;”&#xff0c; 然后就发现&#xff0c;还有一个更好的方法。因此&#xff0c;重新更新了一篇&#xff0c;作为对比与参考。 需要用到的文件&#xff1a; jpeg-9b.zip win32.mak 下载链接链接…

数据挖掘神器Orange初步使用

文章目录 安装示例项目展示鸢尾花数据 安装 可以在官网下载&#xff0c;地址为Orange&#xff0c;如果已经装了Anaconda&#xff0c;则可在Anaconda Navigator中找到一个非常猥琐的图标&#xff0c;下面写着Orange3&#xff0c;可以点击Install&#xff0c;装完之后点Launch就…

【鸿蒙软件开发】ArkTS基础组件之Gauge(环形图表)、LoadingProgress(动态加载)

文章目录 前言一、Gauge环形图表1.1 子组件1.2 接口参数介绍 1.2 属性1.3 示例代码二、LoadingProgress2.1 子组件2.2 接口2.3 属性2.4 示例代码 总结 前言 Gauge&#xff1a;数据量规图表组件&#xff0c;用于将数据展示为环形图表。 LoadingProgress&#xff1a;用于显示加载…