支持向量数据表达/描述(SVDD;Support Vector Data Description)是一种适用于只有一类数据的分类方法。
可能你会说,开什么玩笑?一类数据分个什么类?
其实,这是一种很常见的应用场景。如机器故障诊断,很多时候,我们能够采集到正常情况下机器的运行数
据,而我们的一个想法是利用这些正常的数据判断机器是否发生故障。因此,对于这个问题,根据不同的应用
场景其实还有另外的一些称呼:如异常检测,开集识别,孤立点检测等等。详细的一些介绍可以参考文献[1]的
介绍。这里,我们聚焦于其中的一种技术,即SVDD。
SVDD的基本思想是建立一个最小的超球体,利用这个超球体去尽可能地包含所有的数据,当要测试一个新的数
据时,我们只需要判断数据是在超球体内还是超球体外就可以实现分类了,如图1所示。
图1 SVDD基本思路示意图
那么问题来了,该如何建立起这个超球体去尽可能地包含所有的数据呢?现在,我们来进行一些分析:
1)我们希望以尽可能小的一个超球体去包含尽可能多的数据,即在建立超球体的过程中需要对超球体的半径做约束;
2)我们希望建立起来的这个超球体有一定的容忍错误的能力,即允许一些异常的数据落在超球体外部,如图1所示;
基于上述考虑,可以建模如下的约束优化问题:
(1)
该约束优化中,最小化的目标包含两部分:
第一部分希望最小化超球体的半径(这一部分可以看作结构风险);
第二部分希望超球体具备一定的容错能力(这一部分可以看作经验风险),理想情况下,当所有数据都位于超球体
体内时,经验风险为0。
在该优化问题中,我们添加约束条件 ,与。其中,可看作一个映射函数,它可以将原始
数据映射至一个特征空间中,如支持向量机中的核函数或者神经网络等。是超球体中心, 为超球体半径,为松弛因子。
接下来介绍如何求解上述约束优化问题?如果熟悉支持向量机的求解过程,可以很容易想到这类带约束的优化问题可以
直接套用拉格朗日松弛法。即(为简单起见,这里直接使用,不考虑利用将其映射至某一个特征空间中):
(2)
现在,要最小化,即,利用分别对求导可得:
(3)
从该求导结果可知,超球体的中心是可以通过所有样本及其对应的系数直接表达出来的。
此外,要,可看作最小化参数:,最大化参数:的过程。即:
因此,结合(3)中的求导结果,最终的优化目标函数可以表达为:
(4)
由(4)可知,这是一个二次规划的问题,由于有很多软件都可以对其进行求解。这里就不在对(4)中的求解过程进行深究。
假设我们已经求解出了(4)中的,那么,要如何如何判断新的样本数据是否是在超球体内呢?
由(3)可知,已知,根据可以求取超球体的中心。对应超球体的半径可计算为:
式中,是支持向量,即所对应的样本,由于,求解出来的大多都为0,只有少部分大于0,这部分大于
0所对应的样本可称为支持向量。
现在,已知与,对应一个新的数据,可进行如下计算:
如果,则数据位于超球体外,可判断其为异常值;
如果,则数据位于超球体内,可判断其为正常值;
以上为SVDD的基本思想,若进一步扩展,在(4)式中可利用核函数或者神经网络进行表达:即,这里不在赘述。
参考文献:
[1] Pramuditha Perera,One-Class Classifification: A Survey,2021.
[2] Proefschrift ,One-class classifification,2001.