OneClassSVM与SVDD异常检测的学习初步记录(1)

时间:2024-04-11 08:28:09

1. 异常值检测和新颖点检测

 

异常值检测和新颖值检测的最大差异在于,异常值检测训练集主要为正常类型样本,但包含异常值数据(不均衡),但是新颖值检测中,训练集仅为正常样本。outlier detection和novelty detection这两个概念。对于前者即异常检测,训练样本中含有异常样本,根据需要通过阈值nu来设定异常比例;而对于后者,训练样本中一般不含有异常样本,即通过训练正常样本后,模型用来发现测试集中的新颖点(也可以认为是异常点)。我这里讲的主要是后者novelty detection,所以nu也设定的比较小

异常值检测,outlier detection:

训练数据包含异常值,这些异常值被定义为远离其他异常值的观察值。 因此,异常检测估计器试图适应训练数据最集中的区域,忽略不正常的观察。

新颖点检测,novelty detection:

训练数据不受异常值的污染,我们有兴趣检测新观察是否是异常值。 在这种情况下,异常值也被称为新颖点(a novelty)。

异常值检测和新颖性检测都属于异常检测,都是用来检测异常的、不常见的一些观察值。

异常值检测是一种无监督的方法,新颖点检测是一种半监督的异常检测方法。 在异常值检测的情况下,异常值不能形成密集的簇,因为异常检测的估计器假设异常值总是位于低密度区域。 相反,在新颖性检测的背景下,新颖点可以形成密集的簇,只要它们处于训练数据的低密度区域中。
参考[1]:离群点新颖点检测与OneClassSVM(python)

参考[2]: 异常检测(一)——OneClassSVM oneclasssvm函数的参数函数介绍参考[3]: 

参考[3]:   非均衡数据处理方式与评估

 

2.OneClassSVM

 

1、严格地讲,OneClassSVM不是一种outlier detection方法,而是一种novelty detection方法:它的训练集不应该掺杂异常点,因为模型可能会去匹配这些异常点。 但在数据维度很高,或者对相关数据分布没有任何假设的情况下,OneClassSVM也可以作为一种很好的outlier detection方法。

 2、其实在分类问题中,当两类样本极其不平衡时,也可以将个数比例极小的那部分当做异常点来处理,从另外一种角度来完成分类任务!
参考[1]: 知乎:什么是OCSVM? OneClassSVM和SVDD与算法简介。

 

3. SVDD

 

SVDD是叫support vector domain description,想必你第一反应就是想到support vector machine(SVM),的确,它的原理和SVM很像,可以用来做one class svm,如果之前你看过SVM原理,那么下面的讲解你将会感到很熟悉。凡是讲模型,都会有一个优化目标,SVDD的优化目标就是,求一个中心为a,半径为R的最小球面:

OneClassSVM与SVDD异常检测的学习初步记录(1)  

        使得这个球面满足:

OneClassSVM与SVDD异常检测的学习初步记录(1)

        满足这个条件就是说要把training set中的数据点都包在球面里。

        这里的OneClassSVM与SVDD异常检测的学习初步记录(1)是什么东西?如果你看过SVM的话,想必你已经能猜出来它的含义了,它是松弛变量,和经典SVM中的松弛变量的作用相同 ,它的作用就是,使得模型不会被个别极端的数据点给“破坏”了,想象一下,如果大多数的数据都在一个小区域内,只有少数几个异常数据在离它们很远的地方,如果要找一个超球面把它们包住,这个超球面会很大,因为要包住那几个很远的点,这样就使模型对离群点很敏感,说得通俗一点就是,那几个异常的点,虽然没法判定它是否真的是噪声数据,它是因为大数点都在一起,就少数几个不在这里,宁愿把那几个少数的数据点看成是异常的,以免模型为了迎合那几个少数的数据点会做出过大的牺牲,这就是所谓的过拟合(overfitting)。所以容忍一些不满足硬性约束的数据点,给它们一些弹性,同时又要保证training set中的每个数据点都要满足约束,这样在后面才能用Lagrange乘子法来求解,因为Lagrange乘子法中是要包含约束条件的,如果你的数据都不满足约束条件,那就没法用了。注意松弛变量是带有下标i的,也就是说它是和每个数据点有关的,每个数据点都有对应的松弛变量,可以理解为:对于每个数据点来说,那个超球面可以是不一样的,根据松弛变量来控制,如果松弛变量的值一样,那超球面就一样。那个C嘛,就是调节松弛变量的影响大小,说得通俗一点就是,给那些需要松弛的数据点多少松弛的空间,如果C很大的话,那么在cost function中,由松弛变量带来的cost就大,那么training的时候会把松弛变量调小,这样的结果就是不怎么容忍那些离群点,硬是要把它们包起来,反之如果C比较小,那会给离群点较大的弹性,使得它们可以不被包含进来。现在你明白上面那个图为什么并没有把点全都包住了么?下图展示两张图,第一样图是C较小时的情形,第二张图是C较大时的情形:

OneClassSVM与SVDD异常检测的学习初步记录(1)

(图引自https://kiwi.ecn.purdue.edu/rhea/index.php/One_class_svm)

         现在有了要求解的目标,又有了约束,接下来的求解方法和SVM几乎一样,用的是Lagrangian乘子法:

         OneClassSVM与SVDD异常检测的学习初步记录(1)

              注意此时,其中是由,和共同推出来的。上面的向量内积也可以像SVM那样用核函数解决:

之后的求解步骤就和SVM中的一样了,挺复杂的,具体请参考SVM原理。

        训练结束后,判断一个新的数据点z是否是这个类,那么就看这个数据点是否在训练出来的超球面里面,如果在里面 ,即,则判定为属于这个类。将超球面的中心用支持向量来表示,那么判定新数据是否属于这个类的判定条件就是:

OneClassSVM与SVDD异常检测的学习初步记录(1)
参考文献[1]:OneClassSVM,SVDD  但是没有相关SVM的推导。

参考文献[2]:SVDD描述:非核函数映射与核映射结果的可视化展示

参考文献[3]:   SVDD推导与matlab代码实现

 

4. OneClassSVM与SVDD的关联

 

当采用高斯核函数的时候,两个模型对于数据的描述效果相当。

OCSVM(one class support vector machine)即单类支持向量机,最先提出的文献为:Estimating the support of a high-dimensional distribution.  该模型 将数据样本通过核函数映射到高维特征空间,使其具有更良好的聚集性,在特征空间中求解一个最优超平面实现目标数据与坐标原点的最大分离,如图1:

OneClassSVM与SVDD异常检测的学习初步记录(1)

坐标原点被假设为唯一的一个异常样本,最优超平面与坐标原点最大距离为, 并允许少部分样本在坐标原点与分界面之间,与分类超平面的距离为。

    SVDD((Support Vector Data Description)即支持向量数据描述,最先提出的文献为:Support Vector Data Description,,其基本思想是通过在映射到高维的特征空间中找出一个包围目标样本点的超球体,并通过最小化该超球体所包围的体积让目标样本点尽 能地被包围在超球体中,而非目标样本点尽可能地排除在超球体中,从而达到两类之间划分的目的。该方法目标是求出能够包含正常数据样本的最小超球体的中心a和半径R。

    两种单分类方法的区别与联系:

OneClassSVM与SVDD异常检测的学习初步记录(1)

通过以上的分析 ,建立了 2种模型之间存在的联系 ,可见不同之处在于对 的标准化约束和误差函数,当对数据进行标准化处理后 ,2种模型能够取得一样的效果 。同时SVDD的论文指出当采用高斯核函数时,2种模型对数据的描述效果相当。

参考文献[1]:基于支持向量的单类分类方法综述  吴定海,张培林,任国全,陈非
参考文献[2]:   SVDD与OCSVM的比较