假如现在有 ℓ \ell ℓ 个同一分布的观察数据,每条数据都有 p p p 个特征。如果现在加入一个或多个观察数据,那么是否这些数据与原有的数据十分不同,甚至我们可以怀疑其是否属于同一分布呢?反过来讲,是否这些数据与原有的数据十分相似,我们无法将其区分呢?这便是异常检测工具和方法需要解决的问题。即现在只有正常的数据,那么当异常数据加入时,我们是否可以将其分辨出来呢?
通常情况下,要学习训练出一个在 p p p 维空间上的粗糙封闭的边界线,来分割出初始观测分布的轮廓线。然后,如果观测数据位于边界限定的子空间内,则认为它们来自与初始观测相同的总体。否则,如果他们在边界之外,我们可以在一定程度上说他们是异常的。
OCSVM
一种实现方法是 One-Class SVM (OCSVM),首次是在论文《Support Vector Method for Novelty Detection》中由 Bernhard Schölkopf 等人在 2000 年提出, 其与 SVM 的原理类似,更像是将零点作为负样本点,其他数据作为正样本点,来训练支持向量机。策略是将数据映射到与内核相对应的特征空间,在数据与原点间构建超平面,该超平面与原点呈最大距离。
现在假设该超平面为:
w ⋅ Φ ( x ) − ρ = 0 w \cdot \Phi ( \mathbf { x } ) - \rho = 0 w⋅Φ(x)−ρ=0
目标就是在分类正确的基础上最大化超平面与原点的距离:
max w ∈ F , ρ ∈ R ∣ ρ ∣ / ∥ w ∥ 2 subject to ( w ⋅ Φ ( x i ) ) ≥ ρ \begin{array} { c c } \mathop{ \max} \limits_ { w \in F , \rho \in \mathbb { R } } & { |\rho| } / { \| w \| ^ { 2 }} \\ \text { subject to } & \left( w \cdot \Phi \left( \mathbf { x } _ { i } \right) \right) \geq \rho \end{array} w∈F,ρ∈Rmax subject to ∣ρ∣/∥w∥2(w⋅Φ(xi))≥ρ
同时根据超平面的定义,实际上 ρ \rho ρ 的正负和 w w w 向量中的元素正负同时调整就不会影响超平面,那么假如 ρ > 0 \rho > 0 ρ>0 ,那么优化问题可以重写为:
max w ∈ F , ρ ∈ R ρ / ∥ w ∥ 2 \mathop{ \max} \limits_ { w \in F , \rho \in \mathbb { R } } { \rho} / { \| w \| ^ { 2 }} w∈F,ρ∈Rmaxρ/∥w∥2
为了防止参数求解的耦合问题,可以将其拆解为
max w ∈ F , ρ ∈ R ρ + 1 / ∥ w ∥ 2 min w ∈ F , ρ ∈ R − ρ + ∥ w ∥ 2 \begin{aligned} \mathop{ \max} \limits_ { w \in F , \rho \in \mathbb { R } } { \rho} + 1/{ \| w \| ^ { 2 }} \\ \mathop{ \min} \limits_ { w \in F , \rho \in \mathbb { R } } - { \rho} + { \| w \| ^ { 2 }} \end{aligned} w∈F,ρ∈Rmaxρ+1/∥w∥2w∈F,ρ∈Rmin−ρ+∥w∥2
这样的话在求解问题时,由于 w w w 向量中元素的整体正负不会影响 ∥ w ∥ 2 { \| w \| ^ { 2 }} ∥w∥2 的取值,那么其会保证 ρ \rho ρ 的最终取值为正值,也就是满足假设。同时为了方便梯度求解,将 ∥ w ∥ 2 { \| w \| ^ { 2 }} ∥w∥2 添加一个 1 2 \frac{1}{2} 21 那么最终的优化目标可以写为:
min w ∈ F , ρ ∈ R − ρ + 1 2 ∥ w ∥ 2 subject to ( w ⋅ Φ ( x i ) ) ≥ ρ \begin{array} { c c } \mathop{ \min} \limits_ { w \in F , \rho \in \mathbb { R } } & - { \rho} + \frac{1}{2}{ \| w \| ^ { 2 }} \\ \text { subject to } & \left( w \cdot \Phi \left( \mathbf { x } _ { i } \right) \right) \geq \rho \end{array} w∈F,ρ∈Rmin subject to −ρ+21∥w∥2(w⋅Φ(xi))≥ρ
从另一方面想,实际上对于一个斜率一定的直线,当其偏移量的绝对值越大时,其离零点越来越近,下面以 w ∗ x − b = 0 w * x - b = 0 w∗x−b=0 为例,当 w 确定时, ∣ b ∣ |b| ∣b∣ 越大,直线离原点越远:
加入松弛变量 ξ \xi ξ 后,其优化的目标函数可以写为:
min w ∈ F , ξ ∈ R ℓ , ρ ∈ R 1 2 ∥ w ∥ 2 + 1 ν ℓ ∑ i ξ i − ρ subject to ( w ⋅ Φ ( x i ) ) ≥ ρ − ξ i , ξ i ≥ 0 \begin{array} { c c } \mathop{ \min} \limits_ { w \in F , \boldsymbol { \xi } \in \mathbb { R } ^ { \ell } , \rho \in \mathbb { R } } & \frac { 1 } { 2 } \| w \| ^ { 2 } + \frac { 1 } { \nu \ell } \sum _ { i } \xi _ { i } - \rho \\ \text { subject to } & \left( w \cdot \Phi \left( \mathbf { x } _ { i } \right) \right) \geq \rho - \xi _ { i } , \quad \xi _ { i } \geq 0 \end{array} w∈F,ξ∈Rℓ,ρ∈Rmin subject to 21∥w∥2+νℓ1∑iξi−ρ(w⋅Φ(xi))≥ρ−ξi,ξi≥0
其中 v ∈ ( 0 , 1 ) v \in (0,1) v∈(0,1) 用于调节松弛程度,根据该目标函数进行优化求解得到 w w w 和 ρ \rho ρ 后,对多部分样本来说,其决策函数 f ( x ) = sgn ( ( w ⋅ Φ ( x ) ) − ρ ) f ( \mathbf { x } ) = \operatorname { sgn } ( ( w \cdot \Phi ( \mathbf { x } ) ) - \rho ) f(x)=sgn((w⋅Φ(x))−ρ) 输出为正。
为了求解对偶问题使用核技巧,这里使用 Lagrange 乘数 α i , β i \alpha_i,\beta_i αi,βi,可以写出拉格朗日方程:
L ( w , ξ , ρ , α , β ) = 1 2 ∥ w ∥ 2 + 1 v ℓ ∑ i ξ i − ρ − ∑ i α i ( ( w ⋅ Φ ( x i ) ) − ρ + ξ i ) − ∑ i β i ξ i \begin{aligned} L ( w , \boldsymbol { \xi } , \rho , \boldsymbol { \alpha } , \boldsymbol { \beta } ) = & \frac { 1 } { 2 } \| w \| ^ { 2 } + \frac { 1 } { v \ell } \sum _ { i } \xi _ { i } - \rho \\ & - \sum _ { i } \alpha _ { i } \left( \left( w \cdot \Phi \left( \mathbf { x } _ { i } \right) \right) - \rho + \xi _ { i } \right) - \sum _ { i } \boldsymbol { \beta } _ { i } \xi _ { i } \end{aligned} L(w,ξ,ρ,α,β)=21∥w∥2+vℓ1i∑ξi−ρ−i∑αi((w⋅Φ(xi))−ρ+ξi)−i∑βiξi
那么根据对参数 w , ξ , ρ w , { \xi } , \rho w,ξ,ρ 求偏导,可以写出部分 KKT条件:
w = ∑ i α i Φ ( x i ) α i = 1 v ℓ − β i ≤ 1 v ℓ , ∑ i α i = 1 \begin{aligned} w & = \sum _ { i } \alpha _ { i } \Phi \left( \mathbf { x } _ { i } \right) \\ \alpha _ { i } & = \frac { 1 } { v \ell } - \boldsymbol { \beta } _ { i } \leq \frac { 1 } { v \ell } , \quad \sum _ { i } \alpha _ { i } = 1 \end{aligned} wαi=i∑αiΦ(xi)=vℓ1−βi≤vℓ1,i∑αi=1
那么通过导出对偶问题和使用核技巧,便可以实现通过支持向量 { x i : i ∈ [ ℓ ] , α i > 0 } \left\{ \mathbf { x } _ { i } : i \in [ \ell ] , \alpha _ { i } > 0 \right\} {xi:i∈[ℓ],αi>0} 求得决策函数:
f ( x ) = sgn ( ∑ i α i k ( x i , x ) − ρ ) f ( \mathbf { x } ) = \operatorname { sgn } \left( \sum _ { i } \alpha _ { i } k \left( \mathbf { x } _ { i } , \mathbf { x } \right) - \rho \right) f(x)=sgn(i∑αik(xi,x)−ρ)
现在也可以写出对偶问题了:
min α 1 2 ∑ i j α i α j k ( x i , x j ) subject to 0 ≤ α i ≤ 1 ν ℓ , ∑ i α i = 1 \min _ { \boldsymbol { \alpha } } \frac { 1 } { 2 } \sum _ { i j } \alpha _ { i } \alpha _ { j } k \left( \mathbf { x } _ { i } , \mathbf { x } _ { j } \right) \text { subject to } 0 \leq \alpha _ { i } \leq \frac { 1 } { \nu \ell } , \sum _ { i } \alpha _ { i } = 1 αmin21ij∑αiαjk(xi,xj) subject to 0≤αi≤νℓ1,i∑αi=1
之后使用二次规划求解器求解 α \alpha α 即可,然后再根据 KKT 条件求出 w , ρ w,\rho w,ρ,那么问题来了,数据跨越了零点怎么办? 做法很简单,使用映射函数将数据映射到一个空间,在该空间上数据不横跨原点,比如使用高斯核( Φ ( x ) = exp ( − x 2 ) ⋅ ( 1 , 2 1 ! x , 2 2 2 ! x 2 , … ) \Phi(x)=\exp \left(-x^{2}\right) \cdot\left(1, \sqrt{\frac{2}{1 !}} x, \sqrt{\frac{2^{2}}{2 !}} x^{2}, \ldots\right) Φ(x)=exp(−x2)⋅(1,1!2x,2!22x2,…))或二阶多项式核( Φ 2 ( x ) = ( 1 , x 1 , x 2 , … , x d , x 1 2 , x 1 x 2 , … , x 1 x d , x 2 x 1 , x 2 2 , … , x 2 x d , … , x d 2 ) \Phi_{2}(\mathbf{x})=\left(1, x_{1}, x_{2}, \ldots, x_{d}, x_{1}^{2}, x_{1} x_{2}, \ldots, x_{1} x_{d}, x_{2} x_{1}, x_{2}^{2}, \ldots, x_{2} x_{d}, \ldots, x_{d}^{2}\right) Φ2(x)=(1,x1,x2,…,xd,x12,x1x2,…,x1xd,x2x1,x22,…,x2xd,…,xd2)),可以看出其中有很多的恒非负数项,也就是在一个轴的一边,不会横跨原点。但是这都是博主的猜测,如果有读者看到论文的讲解部分可以留言纠正(英语水平有限🤷♂️)。
SVDD
另一种方法则是 SVDD,是在其同名论文《Support Vector Data Description》中由 DAVID M.J. TAX 等人提出。相比于 OCSVM,SVDD 定义了一个模型,该模型给出了一个包围全部数据的封闭边界:超球体。球体的特征是中心 a a a 和半径 R > 0 R>0 R>0。我们通过最小化 R 2 R^2 R2 来最小化球体的体积,并要求球体包含所有训练样本 x i x_i xi。这与Schólkopf、Burges和Vapnik(1995)中用于估计分类器的VC维数的方法(由包围数据的最小球体的直径限定)相同。并且文章中证明了该方法与 OCSVM 求解的超平面相似。其最优化目标如下:
min R , a R 2 + C ∑ i ξ i s . t . ∥ x i − a ∥ 2 ≤ R 2 + ξ i , ξ i ≥ 0 ∀ i \begin{aligned} \mathop{\min} \limits_ { R , a } & R ^ { 2 } + C \sum _ { i } \xi _ { i } \\ s . t . & \left\| \mathbf { x } _ { i } - \mathbf { a } \right\| ^ { 2 } \leq R ^ { 2 } + \xi _ { i } , \quad \xi _ { i } \geq 0 \quad \forall i \end{aligned} R,amins.t.R2+Ci∑ξi∥xi−a∥2≤R2+ξi,ξi≥0∀i
其中 C C C 用于控制误差的容忍度。同时为了求解对偶问题使用核技巧,这里使用 Lagrange 乘数 α i > 0 , γ i > 0 \alpha_i > 0,\gamma_i > 0 αi>0,γi>0,可以写出拉格朗日方程:
L ( R , a , α i , γ i , ξ i ) = R 2 + C ∑ i ξ i − ∑ i α i { R 2 + ξ i − ( ∥ x i ∥ 2 − 2 a ⋅ x i + ∥ a ∥ 2 ) } − ∑ γ i ξ i \begin{aligned} L \left( R , \mathbf { a } , \alpha _ { i } , \gamma _ { i } , \xi _ { i } \right) = & R ^ { 2 } + C \sum _ { i } \xi _ { i } \\ & - \sum_i \alpha _ { i } \left\{ R ^ { 2 } + \xi _ { i } - \left( \left\| \mathbf { x } _ { i } \right\| ^ { 2 } - 2 \mathbf { a } \cdot \mathbf { x } _ { i } + \| \mathbf { a } \| ^ { 2 } \right) \right\} - \sum \gamma _ { i } \xi _ { i } \end{aligned} L(R,a,αi,γi,ξi)=R2+Ci∑ξi−i∑αi{R2+ξi−(∥xi∥2−2a⋅xi+∥a∥2)}−∑γiξi
求偏导为零,可以得出:
∂ L ∂ R = 0 : ∑ i α i = 1 ∂ L ∂ a = 0 : a = ∑ i α i x i ∑ i α i = ∑ i α i x i ∂ L ∂ ξ i = 0 : C − α i − γ i = 0 \begin{aligned} \frac { \partial L } { \partial R } = 0 : & \qquad \sum _ { i } \alpha _ { i } = 1 \\ \frac { \partial L } { \partial \mathbf { a } } = 0 : & \qquad \mathbf { a } = \frac { \sum _ { i } \alpha _ { i } \mathbf { x } _ { i } } { \sum _ { i } \alpha _ { i } } = \sum _ { i } \alpha _ { i } \mathbf { x } _ { i } \\ \frac { \partial L } { \partial \xi _ { i } } = 0 : & \qquad C - \alpha _ { i } - \gamma _ { i } = 0 \end{aligned} ∂R∂L=0:∂a∂L=0:∂ξi∂L=0:i∑αi=1a=∑iαi∑iαixi=i∑αixiC−αi−γi=0
通过上述第三个式子可以得出:
0 ≤ α i ≤ C 0 \leq \alpha _ { i } \leq C 0≤αi≤C
拉格朗日方程可以重写为:
L = ∑ i α i ( x i ⋅ x i ) − ∑ i , j α i α j ( x i ⋅ x j ) L = \sum _ { i } \alpha _ { i } \left( \mathbf { x } _ { i } \cdot \mathbf { x } _ { i } \right) - \sum _ { i , j } \alpha _ { i } \alpha _ { j } \left( \mathbf { x } _ { i } \cdot \mathbf { x } _ { j } \right) L=i∑αi(xi⋅xi)−i,j∑αiαj(xi⋅xj)
那么该优化目标可以重写为:
max α ∑ i α i ( x i ⋅ x i ) − ∑ i , j α i α j ( x i ⋅ x j ) subject to 0 ≤ α i ≤ C \max _ { \boldsymbol { \alpha } } \sum _ { i } \alpha _ { i } \left( \mathbf { x } _ { i } \cdot \mathbf { x } _ { i } \right) - \sum _ { i , j } \alpha _ { i } \alpha _ { j } \left( \mathbf { x } _ { i } \cdot \mathbf { x } _ { j } \right) \text { subject to } 0 \leq \alpha _ { i } \leq C αmaxi∑αi(xi⋅xi)−i,j∑αiαj(xi⋅xj) subject to 0≤αi≤C
之后使用二次规划求解器求解 α \alpha α 即可,然后再根据 KKT 条件求出 R , a , ξ R,a,\xi R,a,ξ 即可。
参考论文有:《Support Vector Data Description》,《Support Vector Method for Novelty Detection》,《Estimating the Support of a High-Dimensional Distribution》