本文最后更新于:2024年5月11日 下午
机器学习中的异常检测在很多场景有重要应用,本文记录 SVDD 算法。
简介
支持向量数据描述 SVDD(Support Vector Data Description,SVDD)是一种单值分类算法,能够实现目标样本和非目标样本的区分,通常应用于异常检测、入侵检测等领域。
单分类问题
- 单分类问题的目的并不时将不同类别的数据区分开来,而是对某个类别的数据生成一个描述(description),可以理解为是样本空间中的一个区域,当某个样本落在这个区域外,我们就认为该样本不属于这个类别。
SVDD 思想
SVDD 的思路是寻找一个尽可能小的高维球体,将训练数据容纳进去,那么在预测数据时,认为在球体之外的数据为异常数据。
算法原理
原始问题
- 假设我们有
个样本点,分别为 。 - 我们假设这些样本点分布在一个球心为
,半径为 的球中。那么样本 满足
- 为了允许部分样本不在这个球中,我们引入松弛变量:
- 我们的目标是最小球的半径
和松弛变量的值,于是目标函数:
其中,
是惩罚参数,由人工设置。
- 写成拉格朗日方程:
-
其中,
是拉格朗日乘子。 -
此时事实上涉及到了需要用
选择支持向量了,但是此时其他参数都还没有确定,那么确定那个样本作为支持向量更是无从谈起,因此原始问题:
无法求解,幸运的是该问题总体是凸优化问题,对偶问题与原问题等价,我们尝试求解对偶问题
对偶问题
- 对偶问题:
- 令拉格朗日函数对
的偏导为 0,得到:
- 我们可以将
看作样本 的权重。上式表明所有样本的权重之和为1,而球心 是所有样本的加权和。将上式带入到拉格朗日函数中:
- 当通过求解对偶问题得到
后,可以通过 计算球心 。 - 半径
,则可以通过计算球心与支持向量( )之间的距离得到。当 时,意味着样本 位于球的外面。
判断新样本是否为异常点
- 对于一个新的样本点
,如果它满足下式,那么我们认为它是一个异常点。
- 展开上式,得:
引入核函数
正常情况下,数据并不会呈现球状分布,因此有必要使用核函数的方法提高模型的表达能力。
-
只需将
替换 $ x{(i){T}} x^{(j)} $ 即可。 -
在训练前通过变换函数
将数据从原始空间映射到新特征空间, 然后在新特征空间中导找一个体积最小的超球体, SVDD 要解决的优化问题变为:
- 那么对偶问题会变为
- 求解该对偶问题后,可以获取所有样本对应的拉格朗日系数。
- 拉格朗日系数满足
的样本称为支持向量,用 表示,那么球心和半径的公式为:
多项式核
- 多项式核函数的表达式如下:
- 如下图所示,多项式核实际上不太适合 SVDD。特别是当
取值非常大的时候。
高斯核
- 高斯核函数的表达式如下
- 如下图,相比于多项式核函数,高斯核函数的结果就合理多了。可以看到模型的复杂程度随着
的增大而减小。
原始论文
参考资料
- Tax D M J, Duin R P W. Support vector domain description[J]. Pattern recognition letters, 1999, 20(11-13): 1191-1199.
- https://zhuanlan.zhihu.com/p/65617987
- https://dreamhomes.top/posts/202105081146/
- https://blog.csdn.net/OrthocenterChocolate/article/details/40592403
文章链接:
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/