是的,即便是出生在山上的小和尚,从来没有下过山,没有见过女人,但是一旦有女施主上山,小和尚依然可以轻松地区分出眼前的人是如此不同。

传统的SVM是寻找一个超平面,而SVDD寻找的超平面更进一步,可以认为它是闭合的超平面。优化目标是曲面面积最小(即半径最小),约束条件是要使得尽可能多的样本被包含在曲面之中,至于到底需要包含多少,那就要涉及到松弛变量。

每个样本都对应一个自己的松弛变量epslon,即对于不同样本的容忍程度可以是不同的,容忍意味着样本可以在一定程度上脱离“包围圈”。最终的优化目标就是R平方的基础上+所有松弛变量之和,同时给这个和一个权重C,C就是惩罚因子,当然C越大,epsilon就要小,那么样本脱离“包围圈”的情况就会越少。

有了目标函数和约束条件,就可以使用拉格朗日乘子法。

由(4),(5),(6)得到:

将(6),(7),(8)代入(3)

对于训练样本中的,它相对于球心的关系有三种:

,此时天然满足不等式(2),可行解落在不等式约束区域内部,所以约束不起作用,对应的拉格朗日因子取0.

,此时可行解落在约束区域边界,需要指明梯度反向,所以,此时松弛变量不起作用,所以对应的拉格朗日因子

,此时有点理解无能,只能理解成达到另外一个临界状态:.

那么意义到底是什么。我们知道SVM中大于0表示该因子对应的样本点是支持向量,这是因为它参与了决策超平面的表示,而在SVDD中,通过(8)可以看到,同样是大于0时,样本会参与球心的表示,即这些点决定了球心的位置。球面除了需要知道球心的位置,还需要知道球半径。半径就是球面上点到球心的距离,球心现在我们得到了,怎么知道一个样本点是否在球面上呢?基于刚才的分析,当距离等于半径时,。所以真正的支持向量应该是

既然C这么重要,那么C有没有取值范围呢?C的实际含义是对松弛变量的惩罚权重,C越大,意味着越不能容忍离群点的存在。事实上,当,分离面就会退化成硬间隔。这是因为,所以每个,此时最多有且只有一个点是离群点(只能有一个==C)。

SVDD可以适用于训练数据只有一个类别的情况,那么当我们有负样本的时候仍然可以使用SVDD吗?答案是是的。不同于SVM寻找于距离两个类别最远的超平面,SVDD的超平面会接近包围我们关心的那一类;当面对一个不属于任何两类的样本,SVM会强行分成其中一类,而SVDD会识别出这个是一个外点。

使用负样本的话,会多出一个约束条件,同时多出一个拉格朗日因子。求解的方法一样,可以得到:

同时使用内点和外点的SVDD

其实形式和原始的SVDD是很像的,而当我们令,y取1或者-1代表正样本(内点)与负样本(外点),就会惊奇地得到和原始SVDD完全一致的结构。但是问题是当我们添加了外点作为新约束,那么原来的描述面就要适度调整,而最小的调整将会是正好把外点放在描述球面上,而这样明显是不合适的,它没有很好地描述原来的内点。现在我们寄希望于核函数来解决这个问题:

先看多项式核。

,实际上多项式一般会有一个常数,我们先以这个形式来说明。内积的计算方式是。首先,因为有角度的计算,当两个样本点的夹角很小时,余弦值会接近1,此时如果训练样本的模也很大,那么映射之后的结果就会以模较大的样本点为主。这种情况可以通过归一化被抑制,但是会放大噪声的影响,并且无法消除不同样本模的差异性。可见多项式核是不适用于SVDD的。

再看高斯核。

因为测试样本z到球心a的距离用下式表示:

第一项是一个常数1,这同时也反映了高斯核的一个特点:不同于多项式核,测试点和球心的相对角度无关,而只与距离有关,而当距离为0时,高斯核取1,所以被高斯核映射后的样本的内积是1:

现在讨论高斯核中的标准差s。当s很小,只要,那么映射之后的内积约等于0,此时公式(10)退化为,得到,所有的样本点都变成支持向量,这样就会过拟合。当s很大时,高斯核会退化为标准球面的形式(可以通过泰勒展开,会发现优化目标函数和标准形式几乎一样)

误差估计

一个本来应该是内点的样本被支持向量的描述拒绝在范围之内,那么这就是一个error,而这个误差可以通过Leave-One-Out估计方法,由支持向量的个数反映出来。为了理解这个结论,首先要知道什么是essential support vectors。构成一个种类的描述的球心不是唯一是,因为球心由支持向量的加权表示,而支持向量可能是几个不同的处于球面的点。essential support vectors是那些在所有可能的expansions中都会出现的样本。那么什么是expansions呢,就是用Leave-One-Out的方法,每次去掉一个样本,查看用剩余样本训练得到的解是否会发生变化。

当去掉训练数据中的一个样本点,那么得到的解仍然是一样的,同时将该样本用于测试时,它仍然会被认为是内点;而当把非essential support vectors对应的样本点舍弃时,得到的解仍然是一样的;而当把essential support vectors对应的样本点舍弃时,得到的解发生变化:所描述的范围变小了,同时舍弃的那个样本被解划分为外点。当去掉的点,本来就是被误判为外点,去掉之后仍然被误判。结合这几个情况,既然有的点判断正确与否一直不变,有的点会随着是否是essential support vectors而波动,那么我们可以得到一个误判率的上限:

LOO就表示使用的是Leave-One-Out的估计方法。#errors表示的是固有的无法改变的误判,#SVs表示的是随着训练样本的调整对应的不同误判个数(当去除掉essential,误判升高)

基于误差估计,可以对超参数C和s进行设定。对于C,因为,所以

实战

在sklearn中提供了接口

decision_function = score_samples - offset_,decision_function 是函数距离,即将坐标和标签符号代入决策函数中,得到的结果的正负号表示正负样本,绝对值大小则表示距离超平面的距离。很显然,当样本正好处于超平面时距离为0。为什么使用函数距离,因为在预测时不需要求解,只关心测试样本落在超平面哪一边。score_samples是在decision_function基础上加了一个偏置,这个偏置是sklearn.svm.OneClassSVM中的一个属性,是intercept_的相反数,而intercept_是决策函数中的常数的相反数。所以score_samples是去除了偏置影响的决策函数的结果。而决策函数的结果实际上可以充当预测时的概率,因为当sklearn.svm.OneClassSVM的属性probability关闭时,无法得到预测概率值,这时就可以使用decision_function 得到ROC曲线。具体在多分类时decision_function又依据‘ovr’和‘ovo’有不同的调整。

得到fit之后的模型,就可以得到一些有用的属性:clf.support_vectors_得到支持向量,以array表示,行数是支持向量的个数,列数是特征个数;clf.dual_coef得到支持向量对应的alpha系数,当然都是大于0的值;clf.support_得到支持向量在训练数据中的索引值,因为支持向量是训练数据的一部分,由索引值可以得到具体是哪些训练样本是如此重要,直接决定了超球面的形成。这时查看支持向量对应的decision_function发现,决策函数的输出值不是0,但是支持向量不应该就落在超球面上吗,个人认为这里是由于引入了松弛变量。

之前提到,当外点也是available时,SVDD是可以加入外点一起训练的,只不过是增加一个约束条件罢了,而且可以通过重构表达式得到和标准SVDD结构一样的解。但是sklearn中貌似不支持训练数据有两个标签,fit函数中自动忽略标签取值。

此外还有其他类似的算法,如ensemble.IsolationForest and neighbors.LocalOutlierFactor, covariance.EllipticEnvelope ,他们都可以用来Novelty and Outlier Detection。这里的outlier detection和novelty detection其实是有区别的,outlier detection在训练的过程中是允许有外点的(即便是同一标签的数据,也会存在一些噪点),而外点检测算法会关注于更加集中的数据。对于OneClass SVM而言,它对噪声是很敏感的,所以需要通过超参数nu来调节松弛变量,避免过拟合。而novelty detection的训练数据是不受外点影响的。但其实outlier和novelty经常混用。

模型属性解析

dual_coef的维度是与支持向量个数对应的,它其实还与标签有关。以基本的SVM为例:

decision function=,为了方便,

那么coef是什么呢,coef只有当核函数是线性核时生效。当线性核时,决策函数退化为:

所以coef其实是以dual_coef为权重,对训练样本的加权和(每个特征分别加权),最终得到的值的维度和特征数一样,这样就可以直接和测试值求内积,从而求出决策函数输出值。

coef_ndarray of shape (1, n_features)
Weights assigned to the features (coefficients in the primal problem). This is only available in the case of a linear kernel.coef_ is readonly property derived from dual_coef_ and support_vectors_.dual_coef_ndarray of shape (1, n_SV)
Coefficients of the support vectors in the decision function.

对于高斯核函数也类似,只不过只能使用dual_coef计算,同时要注意先计算和支持向量的距离,然后使用高斯函数。具体到这里的SVDD,决策函数其实只有第二项是与测试样本z有关的(第一项为常数1):

而其余常数项被sklearn打包为一项:使用intercept_表示,所以decision_function

参数nu的解释

sklearn的手册中说明了这个参数,但是它居然同时代表了两个含义:An upper bound on the fraction of training errors and a lower bound of the fraction of support vectors. Should be in the interval (0, 1]. By default 0.5 will be taken.

实际上不光在OneClass中,在v-SVC中也有这个参数,也具有相同的含义:Parameter nu in NuSVC/OneClassSVM/NuSVR approximates the fraction of training errors and support vectors.

而这个参数其实是传统C-SVC的另外一种表示方法,二者是等价的:The ν-SVC formulation 15 is a reparameterization of the C-SVC and therefore mathematically equivalent.

nu表示new,可以看文档中提到的这篇论文https://www.stat.purdue.edu/~yuzhu/stat598m3/Papers/NewSVM.pdf

这时对nu的更详细的解释http://ntur.lib.ntu.edu.tw/bitstream/246246/155217/1/09.pdf

Reference:

1.https://scikit-learn.org/stable/modules/generated/sklearn.svm.OneClassSVM.html

2.https://mail.python.org/pipermail/scikit-learn/2016-July/000298.html

3.https://www.zhihu.com/question/32297061

4.https://scikit-learn.org/stable/modules/outlier_detection.html#outlier-detection

5.https://blog.csdn.net/resourse_sharing/article/details/51538480

6.距离与概率https://stats.stackexchange.com/questions/14876/interpreting-distance-from-hyperplane-in-svm

7.nuhttp://www.voidcn.com/article/p-unorlqyr-btg.html

https://zhuanlan.zhihu.com/p/97522759

没见过女人的小和尚——SVDD相关推荐

  1. 见过丑的,没见过这么丑的

    开心一刻笑话大王 1.每当听到有些女人说她需要一个美容觉的时候,我都想说:那你需要冬眠才行. 2.找一个路边摆摊的算命老者算姻缘,老人看了我,暗暗叹了口气,脸色很凝重. 我立马紧张起来,问老者为什么叹 ...

  2. ICLR 2022:AI如何识别“没见过的东西”?

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 行早 发自 凹非寺 量子位 | 公众号 QbitAI 这回域外物体检 ...

  3. 绝大多数人没玩过也没见过的现象:20个MYSQL进程共用1个3306端口

    各位客官听我讲,事情的过程是这样的: 10年前,公司有一个中型网站,服务器托管在IDC机房.网站是一拨老技术搞的,后来网站不商业运营了,老技术都离职,现已渺然于网络中.但网站还是要继续技术性维护(就是 ...

  4. 机器人鸣人是哪一集_火影里的五个机器人,第一个比鸣人还厉害,机器丁次你都没见过...

    火影虽然是一部讲述众多忍者们的热血故事,但是火影里的时代并不是和古代一样,里面的生活是和现在的我们一样,在动漫里的忍者也是住的高楼,随时打电话,生病了也要去医院,也会肚子饿,也要一天三顿饭.只是火影里 ...

  5. 【视觉盛宴三】不好意思,这些线材接口的横截面真的没见过

    点击上方"大鱼机器人",选择"置顶/星标公众号" 福利干货,第一时间送达! 本文作者 | 晓宇哥哥 转自公众号 | 芯片之家 作者:TubeTimeUS  排版 ...

  6. 超赞!12套你没见过的社交媒体 社交网站图标

    如今,社交网络成为我们信息获取和传播的重要途径,很多网站都有把内容分享到社交媒体的功能.社交媒体图标作为向用户传递信息的重要媒介,不管是在网页还是 Web 应用程序中都非常需要.今天这篇文章和大家分享 ...

  7. 18张难以置信的照片,封面这张你就没见过

    全世界只有3.14 % 的人关注了 爆炸吧知识 感谢网络,只要点几下鼠标,就能看到我们以前从未见过的东西--有些甚至是难以置信的! 鲸鱼的心脏 水中的鲨鱼卵 幼年的箭鱼萌萌哒 世界上最高的棕榈树,简直 ...

  8. (八大方法、逐层深入,有你一定没见过的)使用INSERT语句向表中插入数据

    (八大方法.逐层深入,有你一定没见过的)使用INSERT语句向表中插入数据 (八大方法.逐层深入,有你一定没见过的) 使用INSERT语句向表中插入数据(MSSQLSERVER版) 做开发的同仁对于向 ...

  9. 见过一个一个拉新地推没见过这么多一起推

    见过一个一个拉新地推没见过这么多一起推 我手上现在虽然没有这么多但也有十几个了听朋友讲这个团队一年100W,以前我不信但是现在我信了,之前这个不在我的认知范围内自从做了这行我信,认知是个很奇怪的东西, ...

最新文章

  1. 【干货】工作邮件高段位写法
  2. 【❌❌vectorの奇技淫巧⭕⭕】C++ vector 如何正确处理动态申请内存的元素
  3. HDU 1517 A Multiplication Game
  4. Qt creator5.7 OpenCV249之图片旋转(含源码下载)
  5. 【博客话题】爱上Linux的N+1个理由
  6. 各种排序算法比较--2015年7月23日22:33:43v1.0版
  7. centos6.5 安装python3.5
  8. POJ-1008(滑雪)
  9. readline/readline.h: No such file or directory
  10. multiset实现ALV树
  11. Mac字体管理工具: RightFont
  12. 哈佛教授揭秘:长期太累或太穷会变…
  13. idea结合git教程(拉取项目,提交代码,合代码等等)
  14. 在线swf转html,swf转换器
  15. 微信读书vscode插件_想用 VSCode 写书?这款插件必须备上!
  16. C语言三位数的整数立方和,c语言求一个三位数正整数n各个数位上数据的立方和...
  17. 等保2.0四级安全要求
  18. Slowly Change Dimention 常见三种类型
  19. *基于类平衡自我训练的无监督域自适应用于语义分割
  20. Python人脸识别——从入门到工程实践

热门文章

  1. Kruskal算法(java)
  2. c语言判断元旦是星期几,计算任何一天是星期几的C语言源代码.
  3. SaaS架构实现理论(三)可配置多租户
  4. HTML和CSS中的像素的三个单位
  5. Flink流式计算从入门到实战 一
  6. 计算机视觉实践(街景字符编码识别)-Task2 数据读取与数据扩增
  7. BEVFormer-accelerate:基于 EasyCV 加速 BEVFormer
  8. 从调试器控制异常和事件:SXE、 SXD、 SXN、SXI
  9. 《象雾象雨又象风》:不想说再见
  10. 什么?语音合成开源代码不会跑,follow me!