没见过女人的小和尚——SVDD
是的,即便是出生在山上的小和尚,从来没有下过山,没有见过女人,但是一旦有女施主上山,小和尚依然可以轻松地区分出眼前的人是如此不同。
传统的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.每当听到有些女人说她需要一个美容觉的时候,我都想说:那你需要冬眠才行. 2.找一个路边摆摊的算命老者算姻缘,老人看了我,暗暗叹了口气,脸色很凝重. 我立马紧张起来,问老者为什么叹 ...
- ICLR 2022:AI如何识别“没见过的东西”?
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 行早 发自 凹非寺 量子位 | 公众号 QbitAI 这回域外物体检 ...
- 绝大多数人没玩过也没见过的现象:20个MYSQL进程共用1个3306端口
各位客官听我讲,事情的过程是这样的: 10年前,公司有一个中型网站,服务器托管在IDC机房.网站是一拨老技术搞的,后来网站不商业运营了,老技术都离职,现已渺然于网络中.但网站还是要继续技术性维护(就是 ...
- 机器人鸣人是哪一集_火影里的五个机器人,第一个比鸣人还厉害,机器丁次你都没见过...
火影虽然是一部讲述众多忍者们的热血故事,但是火影里的时代并不是和古代一样,里面的生活是和现在的我们一样,在动漫里的忍者也是住的高楼,随时打电话,生病了也要去医院,也会肚子饿,也要一天三顿饭.只是火影里 ...
- 【视觉盛宴三】不好意思,这些线材接口的横截面真的没见过
点击上方"大鱼机器人",选择"置顶/星标公众号" 福利干货,第一时间送达! 本文作者 | 晓宇哥哥 转自公众号 | 芯片之家 作者:TubeTimeUS 排版 ...
- 超赞!12套你没见过的社交媒体 社交网站图标
如今,社交网络成为我们信息获取和传播的重要途径,很多网站都有把内容分享到社交媒体的功能.社交媒体图标作为向用户传递信息的重要媒介,不管是在网页还是 Web 应用程序中都非常需要.今天这篇文章和大家分享 ...
- 18张难以置信的照片,封面这张你就没见过
全世界只有3.14 % 的人关注了 爆炸吧知识 感谢网络,只要点几下鼠标,就能看到我们以前从未见过的东西--有些甚至是难以置信的! 鲸鱼的心脏 水中的鲨鱼卵 幼年的箭鱼萌萌哒 世界上最高的棕榈树,简直 ...
- (八大方法、逐层深入,有你一定没见过的)使用INSERT语句向表中插入数据
(八大方法.逐层深入,有你一定没见过的)使用INSERT语句向表中插入数据 (八大方法.逐层深入,有你一定没见过的) 使用INSERT语句向表中插入数据(MSSQLSERVER版) 做开发的同仁对于向 ...
- 见过一个一个拉新地推没见过这么多一起推
见过一个一个拉新地推没见过这么多一起推 我手上现在虽然没有这么多但也有十几个了听朋友讲这个团队一年100W,以前我不信但是现在我信了,之前这个不在我的认知范围内自从做了这行我信,认知是个很奇怪的东西, ...
最新文章
- 【干货】工作邮件高段位写法
- 【❌❌vectorの奇技淫巧⭕⭕】C++ vector 如何正确处理动态申请内存的元素
- HDU 1517 A Multiplication Game
- Qt creator5.7 OpenCV249之图片旋转(含源码下载)
- 【博客话题】爱上Linux的N+1个理由
- 各种排序算法比较--2015年7月23日22:33:43v1.0版
- centos6.5 安装python3.5
- POJ-1008(滑雪)
- readline/readline.h: No such file or directory
- multiset实现ALV树
- Mac字体管理工具: RightFont
- 哈佛教授揭秘:长期太累或太穷会变…
- idea结合git教程(拉取项目,提交代码,合代码等等)
- 在线swf转html,swf转换器
- 微信读书vscode插件_想用 VSCode 写书?这款插件必须备上!
- C语言三位数的整数立方和,c语言求一个三位数正整数n各个数位上数据的立方和...
- 等保2.0四级安全要求
- Slowly Change Dimention 常见三种类型
- *基于类平衡自我训练的无监督域自适应用于语义分割
- Python人脸识别——从入门到工程实践