一文彻底搞懂 SVM:支持向量机全流程解析与数学推导

支持向量机(SVM)的数学推导全解

支持向量机(SVM)是机器学习中经典的二分类模型,它通过找到一个最优的超平面,最大化正负样本的分类间隔,实现对数据的有效分类。本篇博客将从问题定义开始,逐步推导 SVM 的完整数学过程,包括优化目标、拉格朗日对偶理论、KKT 条件的应用和最终决策函数的构造。推导过程力求数学完备,同时以通俗语言讲解每一步推导背后的逻辑。


1. 问题定义

1.1 超平面与分类

假设我们有一个训练数据集 D = { ( x i , y i ) } i = 1 N D = \{(\mathbf{x}_i, y_i)\}_{i=1}^N D={(xi,yi)}i=1N,其中 x i ∈ R n \mathbf{x}_i \in \mathbb{R}^n xiRn 是特征向量, y i ∈ { − 1 , + 1 } y_i \in \{-1, +1\} yi{1,+1} 是分类标签。目标是找到一个超平面,将正类样本 y i = + 1 y_i = +1 yi=+1 和负类样本 y i = − 1 y_i = -1 yi=1 尽可能分开。

超平面

一个超平面可以写成如下数学形式:
w ⊤ x + b = 0 , \mathbf{w}^\top \mathbf{x} + b = 0, wx+b=0,
其中:

  • w ∈ R n \mathbf{w} \in \mathbb{R}^n wRn 是法向量,决定了超平面的方向;
  • b ∈ R b \in \mathbb{R} bR 是偏置,决定了超平面到原点的距离。
分类的条件

对于任意样本点 x i \mathbf{x}_i xi

  • 如果 y i = + 1 y_i = +1 yi=+1(正类),样本应该被分布在超平面的一个侧面,满足 w ⊤ x i + b > 0 \mathbf{w}^\top \mathbf{x}_i + b > 0 wxi+b>0
  • 如果 y i = − 1 y_i = -1 yi=1(负类),样本应该被分布在超平面的另一个侧面,满足 w ⊤ x i + b < 0 \mathbf{w}^\top \mathbf{x}_i + b < 0 wxi+b<0

为了统一地描述正负样本的分类关系,我们引入 y i y_i yi(取值为 + 1 +1 +1 − 1 -1 1),将分类条件重新表达为:
y i ( w ⊤ x i + b ) > 0 , ∀ i . y_i (\mathbf{w}^\top \mathbf{x}_i + b) > 0, \quad \forall i. yi(wxi+b)>0,i.

  1. 对于正类样本( y i = + 1 y_i = +1 yi=+1
    分类条件是 w ⊤ x i + b > 0 \mathbf{w}^\top \mathbf{x}_i + b > 0 wxi+b>0,这意味着点 x i \mathbf{x}_i xi 位于超平面的正侧面。乘以 y i = + 1 y_i = +1 yi=+1 后,条件仍然满足:
    y i ( w ⊤ x i + b ) = ( w ⊤ x i + b ) > 0. y_i (\mathbf{w}^\top \mathbf{x}_i + b) = (\mathbf{w}^\top \mathbf{x}_i + b) > 0. yi(wxi+b)=(wxi+b)>0.

  2. 对于负类样本( y i = − 1 y_i = -1 yi=1
    分类条件是 w ⊤ x i + b < 0 \mathbf{w}^\top \mathbf{x}_i + b < 0 wxi+b<0,这意味着点 x i \mathbf{x}_i xi 位于超平面的负侧面。乘以 y i = − 1 y_i = -1 yi=1 后,负号翻转,使得条件仍然满足:
    y i ( w ⊤ x i + b ) = − ( w ⊤ x i + b ) > 0. y_i (\mathbf{w}^\top \mathbf{x}_i + b) = -(\mathbf{w}^\top \mathbf{x}_i + b) > 0. yi(wxi+b)=(wxi+b)>0.

因此,不论正类还是负类, y i ( w ⊤ x i + b ) y_i (\mathbf{w}^\top \mathbf{x}_i + b) yi(wxi+b) 在分类正确时都大于 0 0 0,可以用统一的条件描述分类关系。


1.2 分类间隔

样本到超平面的几何距离

要量化样本与超平面之间的关系,我们关注样本到超平面的几何距离。对于样本点 x i \mathbf{x}_i xi,到超平面的几何距离公式为:
∣ w ⊤ x i + b ∣ ∥ w ∥ , \frac{| \mathbf{w}^\top \mathbf{x}_i + b |}{\|\mathbf{w}\|}, wwxi+b,
其中 ∥ w ∥ = w ⊤ w \|\mathbf{w}\| = \sqrt{\mathbf{w}^\top \mathbf{w}} w=ww 是法向量的欧几里得范数。


分类间隔的定义

我们希望找到一个超平面,使得正负样本之间的间隔最大化。这里需要明确两种“分类间隔”的定义和区别:

  1. 几何间隔:单个样本到超平面的几何距离;

几何间隔用于度量单个样本点到超平面的距离。对于任意样本点 x i \mathbf{x}_i xi,到超平面的几何距离定义为:
∣ w ⊤ x i + b ∣ ∥ w ∥ , \frac{| \mathbf{w}^\top \mathbf{x}_i + b |}{\|\mathbf{w}\|}, wwxi+b,
其中:

  • w \mathbf{w} w 是超平面的法向量;
  • ∥ w ∥ = w ⊤ w \|\mathbf{w}\| = \sqrt{\mathbf{w}^\top \mathbf{w}} w=ww 是法向量的欧几里得范数。

对于支持向量机的优化目标,我们关心的并不是任意样本到超平面的几何距离,而是距离最近的样本点到超平面的几何距离。这些最近的样本点被称为支持向量

为了方便后续推导,我们可以通过归一化 w \mathbf{w} w b b b,调整几何间隔的表达形式。

分类器归一化假设

我们在优化问题中引入了归一化假设,即通过调整 w \mathbf{w} w b b b,让支持向量到超平面的几何距离恰好为 1 1 1。在这种归一化条件下,支持向量满足:
y i ( w ⊤ x i + b ) = 1. y_i (\mathbf{w}^\top \mathbf{x}_i + b) = 1. yi(wxi+b)=1.

对于其他样本点,由于几何距离大于 1 1 1,满足:
y i ( w ⊤ x i + b ) ≥ 1 , ∀ i . y_i (\mathbf{w}^\top \mathbf{x}_i + b) \geq 1, \quad \forall i. yi(wxi+b)1,i.

在归一化条件下,单个样本点到超平面的几何距离为:
几何间隔 = 1 ∥ w ∥ . \text{几何间隔} = \frac{1}{\|\mathbf{w}\|}. 几何间隔=w1.


  1. 分类间隔:正类支持向量与负类支持向量之间的距离。

分类间隔描述的是正类支持向量与负类支持向量之间的距离,具体是:

  • 最近的正类支持向量到超平面的距离;
  • 最近的负类支持向量到超平面的距离。

两侧支持向量之间的总距离(即分类间隔)是:
分类间隔 = 2 ∥ w ∥ . \text{分类间隔} = \frac{2}{\|\mathbf{w}\|}. 分类间隔=w2.

关系说明

  • 分类间隔是两倍的几何间隔(因为它考虑的是正负支持向量之间的总距离)。
  • 几何间隔则仅描述单个点(支持向量)到超平面的距离。

在支持向量机中,最大化分类间隔实际上是等价于最大化几何间隔,因为两者的比例是固定的。

1.3 问题转化

最大化分类间隔

在分类问题中,我们追求样本与超平面的距离尽可能大,即最大化分类间隔。如果分类间隔更大,分类器对样本的判别能力就更强,也就是说分类器的泛化能力更好。

我们希望选择的超平面尽可能“远离”样本点。这是因为:

  1. 如果样本点离超平面更远,即分类间隔更大,那么分类器的鲁棒性更好;
  2. 这样的分类器对于未知样本的预测会更稳定,具有更好的泛化能力。
问题简化

为了最大化分类间隔 2 ∥ w ∥ \frac{2}{\|\mathbf{w}\|} w2,我们可以将问题转化为最小化 ∥ w ∥ \|\mathbf{w}\| w,即:
min ⁡ w , b ∥ w ∥ . \min_{\mathbf{w}, b} \|\mathbf{w}\|. w,bminw∥.
为了计算方便,通常我们最小化的是 1 2 ∥ w ∥ 2 \frac{1}{2} \|\mathbf{w}\|^2 21w2(平方形式的目标函数使得偏导数更简单)。因此,目标函数变为:
min ⁡ w , b 1 2 ∥ w ∥ 2 . \min_{\mathbf{w}, b} \frac{1}{2} \|\mathbf{w}\|^2. w,bmin21w2.

同时,分类间隔的归一化条件导致如下约束条件:
y i ( w ⊤ x i + b ) ≥ 1 , ∀ i . y_i (\mathbf{w}^\top \mathbf{x}_i + b) \geq 1, \quad \forall i. yi(wxi+b)1,i.


支持向量的引入

从上述归一化条件可以看出:

  • 分类结果由那些紧贴支持向量边界的点决定。这些点满足:
    y i ( w ⊤ x i + b ) = 1. y_i (\mathbf{w}^\top \mathbf{x}_i + b) = 1. yi(wxi+b)=1.
  • 对于其他离超平面更远的点, y i ( w ⊤ x i + b ) > 1 y_i (\mathbf{w}^\top \mathbf{x}_i + b) > 1 yi(wxi+b)>1,它们对分类器的位置没有直接影响。

因此,我们可以通过只关注 支持向量 来确定分类器的位置。支持向量是使 y i ( w ⊤ x i + b ) = 1 y_i (\mathbf{w}^\top \mathbf{x}_i + b) = 1 yi(wxi+b)=1 的点。这一性质使得 SVM 具有稀疏性:最终模型只依赖于支持向量,而不依赖于其他点。

转换为优化问题

最终,SVM 的目标可以总结为:找到一个超平面,最小化 1 2 ∥ w ∥ 2 \frac{1}{2} \|\mathbf{w}\|^2 21w2,同时满足约束条件:
y i ( w ⊤ x i + b ) ≥ 1 , ∀ i . y_i (\mathbf{w}^\top \mathbf{x}_i + b) \geq 1, \quad \forall i. yi(wxi+b)1,i.

这就构成了一个带约束的优化问题,其核心思想是:

  • 通过最大化分类间隔(对应最小化 ∥ w ∥ \|\mathbf{w}\| w)找到最优超平面;
  • 分类结果仅依赖于支持向量。

2. 优化问题建模

在上述归一化假设下,SVM 的目标是最大化分类间隔,等价于最小化 ∣ w ∣ |\mathbf{w}| w,即:

min ⁡ w , b 1 2 ∥ w ∥ 2 \min_{\mathbf{w}, b} \frac{1}{2} \|\mathbf{w}\|^2 w,bmin21w2
同时满足约束条件:

s.t.  y i ( w ⊤ x i + b ) ≥ 1 , ∀ i . \text{s.t. } y_i (\mathbf{w}^\top \mathbf{x}_i + b) \geq 1, \quad \forall i. s.t. yi(wxi+b)1,i.

这就构成了一个典型的 约束优化问题 。直接优化上述问题并不方便,因此我们引入拉格朗日乘子法。


3. 拉格朗日乘子法

3.1 拉格朗日函数构造

为将约束融入优化目标,引入拉格朗日乘子 α i ≥ 0 \alpha_i \geq 0 αi0 i = 1 , … , N i = 1, \dots, N i=1,,N),定义拉格朗日函数:
L ( w , b , α ) = 1 2 ∥ w ∥ 2 − ∑ i = 1 N α i [ y i ( w ⊤ x i + b ) − 1 ] L(\mathbf{w}, b, \boldsymbol{\alpha}) = \frac{1}{2} \|\mathbf{w}\|^2 - \sum_{i=1}^N \alpha_i \left[ y_i (\mathbf{w}^\top \mathbf{x}_i + b) - 1 \right] L(w,b,α)=21w2i=1Nαi[yi(wxi+b)1]
其中, α = [ α 1 , α 2 , … , α N ] ⊤ \boldsymbol{\alpha} = [\alpha_1, \alpha_2, \dots, \alpha_N]^\top α=[α1,α2,,αN] 是拉格朗日乘子向量。

拉格朗日函数将约束条件通过 α i \alpha_i αi 融入优化目标,使得我们可以处理无约束优化问题。


3.2 KKT 条件

KKT 条件是约束优化问题的必要条件。在最优解处,需满足以下条件:

  1. 原始约束条件
    y i ( w ⊤ x i + b ) − 1 ≥ 0 , ∀ i ; y_i (\mathbf{w}^\top \mathbf{x}_i + b) - 1 \geq 0, \quad \forall i; yi(wxi+b)10,i;
    这是问题本身的约束条件,确保支持向量机的分类间隔正确。

  2. 拉格朗日乘子非负性
    α i ≥ 0 , ∀ i ; \alpha_i \geq 0, \quad \forall i; αi0,i;
    拉格朗日乘子只能对违反约束的情况施加惩罚,因此必须非负。

  3. 互补松弛条件
    α i [ y i ( w ⊤ x i + b ) − 1 ] = 0 , ∀ i ; \alpha_i \left[ y_i (\mathbf{w}^\top \mathbf{x}_i + b) - 1 \right] = 0, \quad \forall i; αi[yi(wxi+b)1]=0,i;
    表示对于每个样本,只有在分类间隔恰好为 1 的情况下 α i \alpha_i αi 才可能非零(支持向量的定义),否则 α i = 0 \alpha_i = 0 αi=0

  4. 梯度为零条件
    ∂ L ∂ w = 0 , ∂ L ∂ b = 0. \frac{\partial L}{\partial \mathbf{w}} = 0, \quad \frac{\partial L}{\partial b} = 0. wL=0,bL=0.
    确保在最优解处,目标函数对优化变量的梯度为零。

总结
KKT 条件是连接原始优化问题与对偶问题的关键桥梁,只有在满足 KKT 条件的情况下,通过拉格朗日方法求解得到的解,才能与原始问题的最优解等价 。这是支持向量机优化过程严谨性和数学完备性的核心保障。


4. 求解过程

4.1 求偏导

  1. w \mathbf{w} w 求偏导
    ∂ L ∂ w = w − ∑ i = 1 N α i y i x i = 0 \frac{\partial L}{\partial \mathbf{w}} = \mathbf{w} - \sum_{i=1}^N \alpha_i y_i \mathbf{x}_i = 0 wL=wi=1Nαiyixi=0
    解得:
    w = ∑ i = 1 N α i y i x i \mathbf{w} = \sum_{i=1}^N \alpha_i y_i \mathbf{x}_i w=i=1Nαiyixi
    这表示最优的 w \mathbf{w} w 是由支持向量加权求和得到的,其中 α i \alpha_i αi 是权重, y i y_i yi 是类别, x i \mathbf{x}_i xi 是样本。

  2. b b b 求偏导
    ∂ L ∂ b = − ∑ i = 1 N α i y i = 0 \frac{\partial L}{\partial b} = -\sum_{i=1}^N \alpha_i y_i = 0 bL=i=1Nαiyi=0
    解得:
    ∑ i = 1 N α i y i = 0 \sum_{i=1}^N \alpha_i y_i = 0 i=1Nαiyi=0
    这表示支持向量的拉格朗日乘子加权和在类别上必须平衡。


4.2 对偶问题

w = ∑ i = 1 N α i y i x i \mathbf{w} = \sum_{i=1}^N \alpha_i y_i \mathbf{x}_i w=i=1Nαiyixi 代入拉格朗日函数 L L L 中,消去 w \mathbf{w} w b b b,得到仅关于 α \boldsymbol{\alpha} α 的函数:

首先,将 1 2 ∥ w ∥ 2 \frac{1}{2} \|\mathbf{w}\|^2 21w2 展开:
1 2 ∥ w ∥ 2 = 1 2 ( ∑ i = 1 N α i y i x i ) ⊤ ( ∑ j = 1 N α j y j x j ) . \frac{1}{2} \|\mathbf{w}\|^2 = \frac{1}{2} \left( \sum_{i=1}^N \alpha_i y_i \mathbf{x}_i \right)^\top \left( \sum_{j=1}^N \alpha_j y_j \mathbf{x}_j \right). 21w2=21(i=1Nαiyixi)(j=1Nαjyjxj).
利用向量的内积展开公式:
1 2 ∥ w ∥ 2 = 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( x i ⊤ x j ) . \frac{1}{2} \|\mathbf{w}\|^2 = \frac{1}{2} \sum_{i=1}^N \sum_{j=1}^N \alpha_i \alpha_j y_i y_j (\mathbf{x}_i^\top \mathbf{x}_j). 21w2=21i=1Nj=1Nαiαjyiyj(xixj).

拉格朗日函数 L L L 中的第一项为:
− 1 2 ∥ w ∥ 2 = − 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( x i ⊤ x j ) . -\frac{1}{2} \|\mathbf{w}\|^2 = -\frac{1}{2} \sum_{i=1}^N \sum_{j=1}^N \alpha_i \alpha_j y_i y_j (\mathbf{x}_i^\top \mathbf{x}_j). 21w2=21i=1Nj=1Nαiαjyiyj(xixj).

再看第二项:
∑ i = 1 N α i . \sum_{i=1}^N \alpha_i. i=1Nαi.

因此,对偶问题的目标函数为:
max ⁡ α ∑ i = 1 N α i − 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( x i ⊤ x j ) . \max_{\boldsymbol{\alpha}} \sum_{i=1}^N \alpha_i - \frac{1}{2} \sum_{i=1}^N \sum_{j=1}^N \alpha_i \alpha_j y_i y_j (\mathbf{x}_i^\top \mathbf{x}_j). αmaxi=1Nαi21i=1Nj=1Nαiαjyiyj(xixj).

4.3 求解 α \boldsymbol{\alpha} α

优化上述对偶问题后,得到最优解 α ∗ = [ α 1 ∗ , α 2 ∗ , … , α N ∗ ] ⊤ \boldsymbol{\alpha}^* = [\alpha_1^*, \alpha_2^*, \dots, \alpha_N^*]^\top α=[α1,α2,,αN],从中可得法向量:
w = ∑ i = 1 N α i ∗ y i x i . \mathbf{w} = \sum_{i=1}^N \alpha_i^* y_i \mathbf{x}_i. w=i=1Nαiyixi.

支持向量是那些对应 α i ∗ > 0 \alpha_i^* > 0 αi>0 的样本点。


5. 最终结果

在支持向量机中,我们通过优化对偶问题的拉格朗日乘子 α i ∗ \alpha_i^* αi 来求解超平面。最终的结果包括偏置项 b b b 和分类决策函数 f ( x ) f(\mathbf{x}) f(x)。这一部分不仅适用于线性可分数据,还可以通过引入核函数扩展到非线性可分问题。

5.1 偏置项 b b b

对于任意支持向量 x k \mathbf{x}_k xk(满足 α k ∗ > 0 \alpha_k^* > 0 αk>0 的样本),根据支持向量的约束条件:
y k ( w ⊤ x k + b ) = 1 , y_k (\mathbf{w}^\top \mathbf{x}_k + b) = 1, yk(wxk+b)=1,
w \mathbf{w} w 的表达式 w = ∑ i = 1 N α i ∗ y i x i \mathbf{w} = \sum_{i=1}^N \alpha_i^* y_i \mathbf{x}_i w=i=1Nαiyixi 代入得到:
b = y k − ∑ i = 1 N α i ∗ y i ( x i ⊤ x k ) . b = y_k - \sum_{i=1}^N \alpha_i^* y_i (\mathbf{x}_i^\top \mathbf{x}_k). b=yki=1Nαiyi(xixk).

注意:

  • 理论上,任意支持向量都可以用来计算 b b b
  • 在实际计算中,取所有支持向量的结果求平均以减少数值误差。

5.2 决策函数

根据支持向量机的原理,分类决策函数为:
f ( x ) = sign ( w ⊤ x + b ) . f(\mathbf{x}) = \text{sign} \left( \mathbf{w}^\top \mathbf{x} + b \right). f(x)=sign(wx+b).
w \mathbf{w} w 的表达式代入:
f ( x ) = sign ( ∑ i = 1 N α i ∗ y i ( x i ⊤ x ) + b ) . f(\mathbf{x}) = \text{sign} \left( \sum_{i=1}^N \alpha_i^* y_i (\mathbf{x}_i^\top \mathbf{x}) + b \right). f(x)=sign(i=1Nαiyi(xix)+b).

这表明:

  1. 决策函数仅依赖于支持向量,因为 α i ∗ = 0 \alpha_i^* = 0 αi=0 对应的样本不参与决策;
  2. 决策函数只需要计算支持向量与待分类样本 x \mathbf{x} x 的内积 x i ⊤ x \mathbf{x}_i^\top \mathbf{x} xix

5.3 核函数的引入:处理非线性可分问题

在许多实际问题中,数据并非线性可分。这时我们可以通过核方法(Kernel Trick),将原始特征映射到一个更高维的特征空间,使得数据在高维空间中线性可分。

核函数的作用

核函数是一种函数,用来高效地计算两个样本在映射空间中的内积,而不需要显式地进行映射。记映射函数为 ϕ ( ⋅ ) \phi(\cdot) ϕ(),核函数定义为:
K ( x i , x j ) = ϕ ( x i ) ⊤ ϕ ( x j ) . K(\mathbf{x}_i, \mathbf{x}_j) = \phi(\mathbf{x}_i)^\top \phi(\mathbf{x}_j). K(xi,xj)=ϕ(xi)ϕ(xj).

使用核函数替代内积

在对偶问题和决策函数中,所有的内积 x i ⊤ x j \mathbf{x}_i^\top \mathbf{x}_j xixj 都可以替换为核函数 K ( x i , x j ) K(\mathbf{x}_i, \mathbf{x}_j) K(xi,xj)。因此,决策函数扩展为:
f ( x ) = sign ( ∑ i = 1 N α i ∗ y i K ( x i , x ) + b ) . f(\mathbf{x}) = \text{sign} \left( \sum_{i=1}^N \alpha_i^* y_i K(\mathbf{x}_i, \mathbf{x}) + b \right). f(x)=sign(i=1NαiyiK(xi,x)+b).

通过核函数,支持向量机可以有效地处理非线性可分问题,而不需要显式地在高维空间中操作。这使得 SVM 成为一种强大的非线性分类方法。


常见核函数

以下是一些常见的核函数及其用途:

  1. 线性核
    K ( x i , x j ) = x i ⊤ x j K(\mathbf{x}_i, \mathbf{x}_j) = \mathbf{x}_i^\top \mathbf{x}_j K(xi,xj)=xixj
    等价于标准线性 SVM,不做特征映射。

  2. 多项式核
    K ( x i , x j ) = ( x i ⊤ x j + c ) d K(\mathbf{x}_i, \mathbf{x}_j) = (\mathbf{x}_i^\top \mathbf{x}_j + c)^d K(xi,xj)=(xixj+c)d
    适用于捕获多项式关系的数据, d d d 是多项式的次数。

  3. 高斯核(RBF 核)
    K ( x i , x j ) = exp ⁡ ( − ∥ x i − x j ∥ 2 2 σ 2 ) K(\mathbf{x}_i, \mathbf{x}_j) = \exp\left(-\frac{\|\mathbf{x}_i - \mathbf{x}_j\|^2}{2\sigma^2}\right) K(xi,xj)=exp(2σ2xixj2)
    非线性分类的常用选择,适合处理复杂的非线性边界。

  4. Sigmoid 核
    K ( x i , x j ) = tanh ⁡ ( a x i ⊤ x j + c ) K(\mathbf{x}_i, \mathbf{x}_j) = \tanh(a \mathbf{x}_i^\top \mathbf{x}_j + c) K(xi,xj)=tanh(axixj+c)
    与神经网络的激活函数相关。


6. 总结

通过完整推导,我们展示了如何从最大化分类间隔的思想出发,构造支持向量机的优化问题,并通过拉格朗日乘子法与 KKT 条件求解,最终得到决策函数。

SVM 的关键在于:

  1. 支持向量的稀疏性:最终模型 仅依赖于支持向量
  2. 对偶问题的计算效率:利用对偶问题可高效处理高维数据;
  3. 扩展到核函数:通过内积替换可轻松扩展至非线性问题。

支持向量机的这一套理论奠定了其在机器学习领域的经典地位。

### 关于八种异常检测算法的详细解释 #### 1. 监督异常检测 (Supervised Anomaly Detection) 监督异常检测依赖于已标注的数据集来区分正常和异常情况。通过这些标签,可以构建分类模型以预测新数据点的状态。常用的算法有逻辑回归、支持向量机支持向量机变体如C-SVM、ν-SVM等,还有决策树及其集成版本随机森林。 ```python from sklearn.svm import SVC clf = SVC() clf.fit(X_train, y_train) predictions = clf.predict(X_test) ``` 这种类型的检测适用于拥有充足标记样本的情况[^2]。 #### 2. 无监督异常检测 (Unsupervised Anomaly Detection) 当缺乏足够的带标签数据时,则可采用无监督的方法来进行异常探测。这类方法利用了数据内在结构特性而不需额外的信息指导。典型代表包括k-means聚类、DBSCAN密度基空间聚类以及孤立森林(Isolation Forests),后者特别适合处理高维稀疏数据。 ```python from sklearn.ensemble import IsolationForest iso_forest = IsolationForest(contamination=0.1) y_pred = iso_forest.fit_predict(X) ``` 此方式能够有效应对未知类别或难以获取标签的情形。 #### 3. 半监督异常检测 (Semi-Supervised Anomaly Detection) 介于两者之间的是半监督模式,在这里仅有部分实例被赋予真值指示其状态;其余大部分保持未定。此类场景下常见的策略涉及自编码器(autoencoders)生成对抗网络(GANs)相结合的形式——即所谓的“深度置信网”。 ```python import tensorflow as tf autoencoder = tf.keras.models.Sequential([ ... ]) history = autoencoder.fit(x_train_noisy, x_train, epochs=epochs, batch_size=batch_size, shuffle=True, validation_data=(x_val_noisy, x_val)) ``` 这种方法充分利用有限数量的手动标注资源提升整体效果。 #### 4. 在线异常检测 (Online Anomaly Detection) 在线环境下的挑战在于必须即时响应不断流入的新观测值,并及时调整内部参数适应变化趋势。为此设计了一系列增量更新机制,比如Hoeffding Trees(霍夫丁树)、Adaptive Resonance Theory Networks(ART神经网络),它们能够在不影响现有知识的前提下逐步纳入最新信息源。 ```python from skmultiflow.trees.hoeffding_tree import HoeffdingTreeClassifier ht = HoeffdingTreeClassifier() for i in range(n_samples): ht.partial_fit([X[i]], [y[i]]) ``` 该方案非常适合动态背景下连续监控任务的需求。 #### 5. 基于距离/相似度测量的距离型异常检测(Distance-based Anomaly Detection) 基于欧几里得或其他形式的距离测度计算个体间差异程度作为判断依据之一。LOF局部离群因子(Local Outlier Factor)便是其中一员,它衡量目标对象相对于周围邻居位置偏离平均状况的程度。 ```python from pyod.models.lof import LOF detector = LOF() detector.fit(X) scores_pred = detector.decision_function(X_test) ``` 这种方式直观易懂且易于实现,但在维度灾难面前可能遭遇瓶颈[^1]。 #### 6. 统计学基础的概率型异常检测(Statistical-based Anomaly Detection) 运用经典统计理论框架内建立假设检验流程,例如格鲁布斯准则(Grubbs' test)用于单变量集合中寻找极端偏差成员。对于多元情形则存在马氏距离(Mahalanobis Distance)这样的工具可供选用。 ```python from scipy.stats import chi2 def mahalanobis(x=None, data=None, cov=None): """Compute the Mahalanobis distance.""" x_minus_mu = x - np.mean(data) inv_covmat = sp.linalg.inv(np.cov(data.T)) left_term = np.dot(x_minus_mu, inv_covmat) mahal_dist = np.dot(left_term, x_minus_mu.T) return math.sqrt(mahal_dist) ``` 上述过程严格遵循数理推导路径确保结论可靠性。 #### 7. 时间序列特定的时间序列异常检测(Time Series-specific Anomaly Detection) 考虑到顺序排列特点而专门定制化的解决方案,像ARIMA差分整合移动平均自回归模型(Autoregressive Integrated Moving Average Model)就专攻于此领域。近年来兴起的一些研究还探索了如何借助LSTM长短记忆单元(Long Short-Term Memory Units)捕捉长期依赖关系从而改善预报精度。 ```python model = Sequential() model.add(LSTM(units=50, return_sequences=True, input_shape=(X_train.shape[1],1))) model.compile(optimizer='adam', loss='mean_squared_error') model.fit(X_train, y_train, epochs=1, batch_size=1, verbose=2) ``` 这有助于更精准地把握随时间演变规律并提前预警潜在风险事件的发生可能性[^4]。 #### 8. 对抗性训练增强的异常检测(Adversarial Training-enhanced Anomaly Detection) 引入GAN架构理念创造一对相互对立又彼此促进的学习实体:一个是负责生成看似真实的伪造品的生成器(generator),另一个则是试图分辨真假混杂输入流判别器(discriminator). USAD就是这样一种创新性的尝试,旨在克服传统单一视角局限性的同时提高泛化能力。 ```python class Generator(tf.keras.Model): def __init__(self): super().__init__() ... class Discriminator(tf.keras.Model): def __init__(self): super().__init__() ... generator_optimizer = tf.keras.optimizers.Adam(1e-4) discriminator_optimizer = tf.keras.optimizers.Adam(1e-4) checkpoint_prefix = os.path.join(checkpoint_dir, "ckpt") checkpoint = tf.train.Checkpoint(generator_optimizer=generator_optimizer, discriminator_optimizer=discriminator_optimizer, generator=generator, discriminator=discriminator) ``` 如此这般既强化了系统的稳健性和灵活性,也为后续改进留下了广阔的空间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值