今天给大家介绍一下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

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

  1. 关于SVM(support vector machine)----支持向量机的一个故事

    一.预告篇: 很久很久以前,有个SVM, 然后,……………………被deep learning 杀死了…………………………………… . 完结……撒花 二.正式篇 好吧,关于支持向量机有一个故事 ,故事是 ...

  2. Support Vector Machine (1) : 简单SVM原理

    目录 Support Vector Machine (1) : 简单SVM原理 Support Vector Machine (2) : Sequential Minimal Optimization ...

  3. Introduction to One-class Support Vector Machines

    Traditionally, many classification problems try to solve the two or multi-class situation. The goal ...

  4. Support Vector Machine (3) : 再谈泛化误差(Generalization Error)

    目录 Support Vector Machine (1) : 简单SVM原理 Support Vector Machine (2) : Sequential Minimal Optimization ...

  5. Support Vector Machine (2) : Sequential Minimal Optimization

    目录 Support Vector Machine (1) : 简单SVM原理 Support Vector Machine (2) : Sequential Minimal Optimization ...

  6. 支持向量机 support vector machine

    SVM(support Vector machine) (1) SVM(Support Vector Machine)是从瓦普尼克(Vapnik)的统计学习理论发展而来的,主要针对小样本数据进行学习. ...

  7. 【Supervised Learning】支持向量机SVM (to explain Support Vector Machines (SVM) like I am a 5 year old )

    Support Vector Machines 引言 内核方法是模式分析中非常有用的算法,其中最著名的一个是支持向量机SVM 工程师在于合理使用你所拥有的toolkit 相关代码 sklearn-SV ...

  8. 支持向量机SVM(Support Vector Machine)

    支持向量机(Support Vector Machine)是一种监督式的机器学习方法(supervised machine learning),一般用于二类问题(binary classificati ...

  9. 【机器学习实战】第6章 支持向量机(Support Vector Machine / SVM)

    第6章 支持向量机 <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/lates ...

随机推荐

  1. HTML DOM简介

    HTML DOM简介 1.当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model),HTML DOM模型被创建为对象的树.如下所示: 2.通过可编程的对象模型,Ja ...

  2. reason: -[UIKBBlurredKeyView candidateList]: unrecognized selector sent to instance

    reason: -[UIKBBlurredKeyView candidateList]: unrecognized selector sent to instance 发现上线的app一直会有这个cr ...

  3. SELECT INTO FROM mysql Undeclared variable

    使用SELECT INTO FROM进行数据表和数据的复制时,会提示Error Code: 1327. Undeclared variable: 这是因为mysql 数据库不支持 SELECT INT ...

  4. 初试 uTenux

    申请的的开发套件到目前还没到手,看到网友们都开始动手干了,我也是按捺不住了,所以就先在悠龙公司的主页下载了uTenux_V1.5.00r160.zip,打算看看,先了解一下. 下面是文件目录表: └─ ...

  5. javascript/jquery判断是否为undefined或是null!

    var exp = undefined; if (typeof(exp) == "undefined"){    alert("undefined");} 注意 ...

  6. CodeForces 490C Hacking Cypher

    Hacking Cypher Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Sub ...

  7. CPU的一些参数和排名

    排名的信息来源: http://itianti.sinaapp.com/index.php/cpu 一些参数的信息来源: http://ark.intel.com/ 个人关注一些的一些CPU排名: I ...

  8. asynchronous vs non-blocking

    http://stackoverflow.com/questions/2625493/asynchronous-vs-non-blocking In many circumstances they a ...

  9. git bash下的选择、复制、粘贴

      1. 打开git bash     2.点击左上角,选择属性,打钩     3.回到界面,选择一行文字,然后点击 “右键”,这样就复制到剪切板了.再点 “右键”,可以粘贴到命令窗口中了.    

  10. Installing Python 3.5.2 from source

    Here are the procedures we are to follow, Download the source code of an official Python release. Co ...