One Class SVM, SVDD(Support Vector Domain Description)(转)

今天给大家介绍一下one class classification以及用SVDD(support vector domain description)做one class classification。最近接触了一下one class classification,挺有意思的,和多类classification的思路还是有很大差别,比较长姿势~

我们知道,classification问题一般都是2类及2类以上的,典型的2类问题比如识别一封邮件是不是垃圾邮件,这里就只有2类,“是”或者“不是”,典型的多类classification问题比如说人脸识别,每个人对应的脸就是一个类,然后把待识别的脸分到对应的类去。

那么one class classification是什么呢?它只有一个类,然后识别的结果就是:“是”或者“不是”这个类。咦?听起来和2类classification问题貌似几乎一样,它们有什么区别呢?区别在于,在2类classification问题中,training set中有2个类,通常称为正例和负例,例如对于垃圾邮件识别问题,正例就是垃圾邮件,负例就是正常邮件,而在one class classification中,就只有一个类。听着好像有点神奇,什么情况下会出现training set中只有一个类的情况?一般是在的确手头上只有一类样本数据的情况下,或者是别的类数据不好确定的情况下,什么叫不好确定呢?举个例子,比如现在有一堆某产品的历史销售数据,记录着买该产品的用户的各种信息(这些信息在特征提取时会用到),然后还有些没买过该产品的用户的数据,想通过2类classification预测他们是否会买该产品,也就是弄2个类,一类是“买”,另一类是“不买”。这时候问题就来了,如果把买了该产品的用户看成正例,没买该产品的用户看成负例,就会出现(1)已经买了的用户,可以明确知道他已经买了,而没买的用户,却不知道他是的确对该产品不感兴趣,还是说想买但由于种种原因暂时没买成。(2)一般来说,没买的用户数会远远大于已经买了的用户数,这会造成training set中正负样本不均衡,使train出来的model有bias。这个时候,就可以使用one class classification的方法来解决,即training set中只有已经买过该产品的用户数据,在识别一个新用户是否会买该产品时,识别结果就是“会”或者“不会”。

one class classification这如何实现呢?多类classification我们都很熟悉了,方法也很多,比如像SVM去寻找一个最优超平面把正负样本分开,总之都涉及到不止一个类的样本,相当于告诉算法这种东西长什么样(这里的长什么样指的是特征提取方法所提取到的提取),那种东西长什么样,于是训练出一个模型能够区分这些东西。

问题是在one class classification只有一个类,这该怎么办呢?给大家介绍一个方法:SVDD(support vector domain description),它的基本思想是,既然只有一个class,那么我就训练出一个最小的超球面(超球面是指3维以上的空间中的球面,对应的2维空间中就是曲线,3维空间中就是球面,3维以上的称为超球面),把这堆数据全都包起来,识别一个新的数据点时,如果这个数据点落在超球面内,就是这个类,否则不是。例如对于2维(维数依据特征提取而定,提取的特征多,维数就高,为方便展示,举2维的例子,实际用时不可能维数这么低)数据,大概像下面这个样子:

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

有人可能会说:图上的曲线并没有把点全都包住嘛~为什么会这样呢?看原理就懂了,下面给大家讲SVDD的原理,SVDD是叫support vector domain description,想必你第一反应就是想到support vector machine(SVM),的确,它的原理和SVM很像,可以用来做one class svm,如果之前你看过SVM原理,那么下面的讲解你将会感到很熟悉。凡是讲模型,都会有一个优化目标,SVDD的优化目标就是,求一个中心为a,半径为R的最小球面

使得这个球面满足:

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

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

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

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

注意,对参数求导并令导数等于0得到:

把上面这堆玩意带回Lagrangian函数,得到:

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

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

 

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

如果使用核函数那就是:

参考: David M.J. Tax, Robert P.W. Duin. Support vector domain description[J]. Pattern Recognition Letters,1999,20:1191-1199.

转自:http://blog.sina.com.cn/s/blog_4ff49c7e0102vlbv.html

时间: 2024-11-05 16:09:59

One Class SVM, SVDD(Support Vector Domain Description)(转)的相关文章

支持向量机(SVM:support vector machine)

传统机器学习分类任务中,我认为支持向量机是最难.最复杂.最有效的一种模型.可能是由于其是一种特殊的神经网络的缘故吧! 1.支持向量机简介 支持向量机(support vector machines,SVM)是一种二类分类模型.它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机:支持向量机还包括核技巧,这使它成为实质上的非线性分类器.支持向量机的学习策略就是间隔最大化,可形式化为一个求解凸二次规划(convex quadratic programming,不怕,附录有解

[机器学习] Coursera笔记 - Support Vector Machines

序言 机器学习栏目记录我在学习Machine Learning过程的一些心得笔记,包括在线课程或Tutorial的学习笔记,论文资料的阅读笔记,算法代码的调试心得,前沿理论的思考等等,针对不同的内容会开设不同的专栏系列. 机器学习是一个令人激动令人着迷的研究领域,既有美妙的理论公式,又有实用的工程技术,在不断学习和应用机器学习算法的过程中,我愈发的被这个领域所吸引,只恨自己没有早点接触到这个神奇伟大的领域!不过我也觉得自己非常幸运,生活在这个机器学习技术发展如火如荼的时代,并且做着与之相关的工作

支持向量机SVM(Support Vector Machine)

支持向量机(Support Vector Machine)是一种监督式的机器学习方法(supervised machine learning),一般用于二类问题(binary classification)的模式识别应用中. 支持向量机的最大特点是既能够最小化经验损失(也叫做经验风险.或者经验误差),同时又能够最大化几何间距(分类器的置信度),因此SVM又被称为最大边缘区(间距)的分类器. 根据具体应用场景的不同,支持向量机可以分为线性可分SVM.线性SVM和带有核函数的SVM.最终的结果都是得

Support Vector Machine(2):求解线性可分SVM的最佳边界

在上篇文章<Support Vector Machine(1):线性可分集的决策边界>中,我们最后得到,求SVM最佳Margin的问题,转化为了如下形式: 到这一步后,我个人又花了很长的时间去查阅资料,因为数学较差的原因,理解起来相当慢,不过探索的乐趣也就在于不断的打破瓶颈向前,OK继续.上述的问题等价于: 而后我们引入广义拉格朗日函数,利用拉格朗日对偶性来求解此问题.首先明确一下,我们做这些工作的目的是,消去约束条件,为了好求解问题.广义拉格朗日函数为: 上式分为两部分,拉格朗日前辈的思路是

支持向量机(Support Vector Machine / SVM)

支持向量机(Support Vector Machines, SVM):是一种机器学习算法. 支持向量(Support Vector)就是离分隔超平面最近的那些点.机(Machine)就是表示一种算法,而不是表示机器. 基于训练集样本在空间中找到一个划分超平面,将不同类别的样本分开. SVM 工作原理 在样本空间中,划分超平面可通过如下线性方程来描述: 原文地址:https://www.cnblogs.com/wanglinjie/p/11729786.html

初译 Support Vector Machines:A Simple Tutorial(一)

从本次开始我将开始尝试着逐章翻译一下 Alexey Nefedov的<Support Vector Machines:A Simple Tutorial>这本教材,这可是我们导师极力推荐的SVM教材,看了好久一直感觉一脸懵逼,索性开坑翻译一下吧,也当是加深理解,毕竟我也是一知半解,如果翻译的有不对的地方还望大佬们斧正,欢迎提意见,欢迎讨论. 嗯,就是这样. (一)Introduction 在本章节中将会介绍一些用于定义支持向量机(SVM)的基础的概念,这些概念对于理解SVM至关重要,假定读者了

[笔记]A Practical Guide to Support Vector Classi cation

<A Practical Guide to Support Vector Classication>是一篇libSVM使用入门教程以及一些实用技巧. 1. Basic Kernels: (1)linear (2)polynomial (3)radial basis function (4)sigmoid 2. Scaling: Scaling对于SVM非常重要,可以避免某个维度上的值很大,会主导那些值很小的维度.另一个好处是避免复杂的数值计算.另外需要注意的是,在对training data和

Support Vector Machines for classification

Support Vector Machines for classification To whet your appetite for support vector machines, here’s a quote from machine learning researcher Andrew Ng: “SVMs are among the best (and many believe are indeed the best) ‘off-the-shelf’ supervised learni

Machine Learning - XII. Support Vector Machines (Week 7)

http://blog.csdn.net/pipisorry/article/details/44522881 机器学习Machine Learning - Andrew NG courses学习笔记 Support Vector Machines支持向量机 {SVM sometimes gives a cleaner and more powerful way of learning complex nonlinear functions} Optimization Objective优化目标