本文最后更新于:2024年5月11日 下午

机器学习中的异常检测在很多场景有重要应用,本文记录 SVDD 算法。

简介

支持向量数据描述 SVDD(Support Vector Data Description,SVDD)是一种单值分类算法,能够实现目标样本和非目标样本的区分,通常应用于异常检测、入侵检测等领域。

单分类问题

  • 单分类问题的目的并不时将不同类别的数据区分开来,而是对某个类别的数据生成一个描述(description),可以理解为是样本空间中的一个区域,当某个样本落在这个区域外,我们就认为该样本不属于这个类别。

SVDD 思想

SVDD 的思路是寻找一个尽可能小的高维球体,将训练数据容纳进去,那么在预测数据时,认为在球体之外的数据为异常数据。

算法原理

原始问题

  • 假设我们有 m 个样本点,分别为 x(1),x(2),,x(m)
  • 我们假设这些样本点分布在一个球心为 a ,半径为 R 的球中。那么样本 x(i) 满足
(x(i)a)T(x(i)a)R2
  • 为了允许部分样本不在这个球中,我们引入松弛变量:
(x(i)a)T(x(i)a)R2+ξi,ξ0
  • 我们的目标是最小球的半径 R 和松弛变量的值,于是目标函数:
mina,ξ,RR2+Ci=1mξi s.t. (x(i)a)T(x(i)a)R2+ξi,ξi0,i=1,2,,m.

其中,C>0 是惩罚参数,由人工设置。

  • 写成拉格朗日方程:
L(R,a,α,ξ,γ)=R2+Ci=1mξii=1mαi(R2+ξi(x(i)Tx(i)2aTx(i)+a2))i=1mγiξi.
  • 其中, αi0,γi0 是拉格朗日乘子。

  • 此时事实上涉及到了需要用 α 选择支持向量了,但是此时其他参数都还没有确定,那么确定那个样本作为支持向量更是无从谈起,因此原始问题:

minR,a,ξmaxα,γ;α0L(R,a,α,ξ,γ)

​ 无法求解,幸运的是该问题总体是凸优化问题,对偶问题与原问题等价,我们尝试求解对偶问题

对偶问题

  • 对偶问题:

maxα,γ;α0minR,a,ξL(R,a,α,ξ,γ)

  • 令拉格朗日函数对 R,a,ξi 的偏导为 0,得到:
i=1mαi=1a=i=1mαix(i)Cαiγi=0
  • 我们可以将 αi 看作样本 x(i) 的权重。上式表明所有样本的权重之和为1,而球心 a 是所有样本的加权和。将上式带入到拉格朗日函数中:
maxαL(α)=i=1mαix(i)Tx(i)i=1mj=1mαiαjx(i)Tx(j)s.t.0αiCi=1mαi=1,i=1,2,,m.
  • 当通过求解对偶问题得到 αi 后,可以通过 a=i=1mαix(i) 计算球心 a
  • 半径 R,则可以通过计算球心与支持向量( αi<C )之间的距离得到。当 αi=C 时,意味着样本x(i) 位于球的外面。

判断新样本是否为异常点

  • 对于一个新的样本点 z ,如果它满足下式,那么我们认为它是一个异常点。
(za)T(za)>R2
  • 展开上式,得:
zTz2i=1mαizTx(i)+i=1mj=1mαiαjx(i)Tx(j)>R2

引入核函数

正常情况下,数据并不会呈现球状分布,因此有必要使用核函数的方法提高模型的表达能力。

  • 只需将 K(x(i),x(j)) 替换 $ x{(i){T}} x^{(j)} $ 即可。

  • 在训练前通过变换函数Φ:xF 将数据从原始空间映射到新特征空间, 然后在新特征空间中导找一个体积最小的超球体, SVDD 要解决的优化问题变为:

mina,R,ξR2+Ci=1nξis.t.Φ(xi)a2R2+ξi,ξi0,i=1,2,,n
  • 那么对偶问题会变为
minαii=1nj=1nαiαjK(xi,xj)i=1nαiK(xi,xi)s.t.0αiC,i=1nαi=1
  • 求解该对偶问题后,可以获取所有样本对应的拉格朗日系数。
  • 拉格朗日系数满足 0<αi<C 的样本称为支持向量,用 xv 表示,那么球心和半径的公式为:
a=i=1nαiΦ(xi) R=K(xv,xv)2i=1nαiK(xv,xi)+i=1nj=1nαiαjK(xi,xj)

多项式核

  • 多项式核函数的表达式如下:
K(x(i)Tx(j))=(x(i)Tx(j)+1)d
  • 如下图所示,多项式核实际上不太适合 SVDD。特别是当 d 取值非常大的时候。

高斯核

  • 高斯核函数的表达式如下
K(x(i)Tx(j))=exp((x(i)x(j))2s2)
  • 如下图,相比于多项式核函数,高斯核函数的结果就合理多了。可以看到模型的复杂程度随着 s 的增大而减小。

原始论文

参考资料



文章链接:
https://www.zywvvd.com/notes/study/machine-learning/one-class/svdd/svdd/


“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”

微信二维码

微信支付

支付宝二维码

支付宝支付

异常检测 SVDD 算法
https://www.zywvvd.com/notes/study/machine-learning/one-class/svdd/svdd/
作者
Yiwei Zhang
发布于
2022年10月20日
许可协议