没见过女人的小和尚——SVDD

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

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

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

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

F(R,a)=R^2+C\sum_i \xi_i.......................(1)     

\left \| x_i-a \right \|^2\leq R^2+\xi_i\xi \geq 0...................(2)

L(R,a,\alpha_i,\gamma,\xi)=R^2 +C\sum_i \xi_i \\ +\sum_i \alpha_i \left \{ \left \| x_i-a \right \| ^2 -2a\cdot x_i +\left \| a \right \| ^2 -R^2 -\xi_i \right \} -\sum_i \gamma_i\xi_i...........................(3)

\frac{\partial{L}}{\partial{R}}=0=2R-\sum_i \alpha_i\cdot 2R...................(4)

\frac{\partial{L}}{\partial{a}}=0=-2\cdot \sum_i \alpha_i \cdot x_i+2 \cdot \sum_i \alpha_i \left \| a\right \|................(5)

\frac{\partial{L}}{\partial{xi_i}}=0=C-\alpha_i-\gamma_i.........................(6)

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

\sum_i\alpha_i=1...................(7)

a=\frac{ \sum_i \alpha_x x_i}{\sum_i \alpha_i}=\frac{ \sum_i \alpha_x x_i}{1}= \sum_i \alpha_x x_i...................(8)

0\leq \alpha_i\leq C...........................(9)

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

L=\sum_i \alpha_i(x_i \cdot x_i) -\sum_{i,j}\alpha_i \alpha_j (x_i \cdot x_j)...................(10)

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

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

\left \| x_i-a \right \|= R^2,此时可行解落在约束区域边界,需要指明梯度反向,所以0<\alpha<C,此时松弛变量\xi不起作用,所以对应的拉格朗日因子\gamma=0

\left \| x_i-a \right \|> R^2,此时有点理解无能,只能理解成达到另外一个临界状态:\alpha_i=C,\gamma_i>0.

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

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

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

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

\sum_i \alpha_i -\sum_l \alpha_l =1

a=\sum_i \alpha_i x_i -\sum_l \alpha_l x_l

0\leq \alpha_i\leq C_1,0\leq \alpha_l\leq C_2

同时使用内点和外点的SVDD

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

先看多项式核。

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

再看高斯核。K(x_i,x_j)=exp(-\left \| x_i-x_j \right \|^2/s^2)

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

\left \| z-a \right \|^2=(z \cdot z) -2\sum_i\alpha_i(z \cdot x_i) + \sum_{i,j}\alpha_j\alpha_j(x_i \cdot x_j)\leq R^2

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

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

误差估计

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

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

\tilde{E_{LOO}}\leq \frac{ \# SVs + \# errors}{N}

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

基于误差估计,可以对超参数C和s进行设定。对于C,因为\sum^N \alpha_i =1,所以n(\alpha_i >C)=1

实战

在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=sgn(\sum^n_{i=1}y_i\alpha_iK(x_i,x)+\rho ),为了方便,dual coef=y_i\alpha_i

那么coef是什么呢,coef只有当核函数是线性核时生效。当线性核时,决策函数退化为:sgn(\sum^n_{i=1}y_i\alpha_i<x_i,x> + \rho)=sgn((\sum^n_{i=1}\alpha_iy_ix_i)^T x) + \rho)=\\ sgn(coef\cdot x+ \rho)

所以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):

\left \| z-a \right \|^2=\Phi(z,z) -2\sum_i\alpha_i \Phi (d((z ,x_i) ))+ \sum_{i,j}\alpha_j\alpha_j \Phi(d(x_i,x_j))\leq R^2

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

\sum_i\alpha_i \Phi (d((z ,x_i) )) +clf. intercept=\\\sum_i\alpha_i exp(d((z ,x_i) *(-clf.gamma)) )) +clf. intercept

参数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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493532.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解读GAN及其 2016 年度进展

作者&#xff1a;程程 链接&#xff1a;https://zhuanlan.zhihu.com/p/25000523 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 GAN&#xff0c;全称为Generative Adversarial Nets&#xff0c;直译为生成式对抗网络…

全国首套中小学生人工智能教材在沪亮相

来源&#xff1a;网络大数据中小学 AI 教材正式亮相11 月 18 日&#xff0c;优必选与华东师范大学出版社共同发布了《AI 上未来智造者——中小学人工智能精品课程系列丛书》&#xff08;以下简称“AI 上未来智造者”丛书&#xff09;。据了解&#xff0c;该丛书根据教育部“义务…

numpy基础知识点

1. np.squeeze 一,np.squeeze """ np.squeeze 删除单维度的条 对多维度无效 """ import numpy as np anp.array([[1,2],[3,4],[4,5]]) print(a) print(a.shape) bnp.squeeze(a) print(b) ca.reshape(1,6,1) print(c) print(np.squeeze(c)) pri…

从智能交通到智能能源:智慧城市在7个方面的应用实践

来源&#xff1a;资本实验室目前&#xff0c;智慧城市已经成为全球众多城市未来规划和设计的方向&#xff0c;并致力于通过各种新技术的应用来改善城市居民的工作与生活。但什么样的技术应用能够推动智慧城市的建设&#xff1f;如何让新技术在智慧城市中的应用效率最大化&#…

别以为if slse很简单——决策树

怎么分——熵与Gini指数 熵&#xff0c;表示信息量的期望&#xff0c;含义是混乱程度&#xff0c;也是对随机变量编码所需的最小比特数。请参考之前的文章。 信息增益建立在熵之上&#xff0c;是选择某特征之后熵减少的多少&#xff08;熵减少即信息增加&#xff09;&#xf…

tensorflow实现回归

直线拟合&#xff1a;yw*xb """ 回归:直线拟合 """ import tensorflow as tf import numpy as np import matplotlib.pyplot as plt x_datanp.random.rand(100) y_datax_data*51Wtf.Variable(0.) btf.Variable(0.) y_predW*x_databxtf.placehol…

微软亚研院20周年独家撰文:数据智能的现在与未来

文&#xff1a;微软亚洲研究院软件分析组来源&#xff1a;雷锋网摘要&#xff1a;今年是微软亚洲研究院&#xff08;MSRA&#xff09;20周年&#xff0c;站在这个大节点上&#xff0c;MSRA副院长张冬梅以及她的团队写了这篇有关数据智能的文章&#xff0c;对该领域的发展和未来…

二维与三维之间的桥梁——点云

在做图像配准时就听闻过一些点云的方法&#xff0c;却没对其有太多的认识&#xff0c;只是知道点云point cloud顾名思义就是一些离散点的集合。现在在无人驾驶中一些激光雷达的作用其实就是生成点云数据&#xff0c;接下来介绍一下点云数据的含义和基础的使用方法。 虽然特斯拉…

python刷题+leetcode(第一部分)

1. 设计前中后队列 思路:python代码直接利用list的insert特性 class FrontMiddleBackQueue:def __init__(self):self.queque []def pushFront(self, val: int) -> None:self.queque.insert(0, val)def pushMiddle(self, val: int) -> None:self.queque.insert(len(self…

LINQ基础概述

介绍LINQ基础之前&#xff0c;首说一下LINQ 的历史和LINQ是什么&#xff0c;然后说一下学习 LINQ要了解的东西和 LINQ基础语法LINQ 的历史从语言方面的进化 –委托 –匿名方法 –Lambda表达式 –Linq查询表达式 上边这四个我会在下边一一解说 从时间方面的演进 –2004年 –2005…

机器人“快递小哥”上岗了!京东配送机器人编队长沙亮相

11 月 22 日上午&#xff0c;京东物流配送机器人智能配送站启用仪式在长沙举行&#xff0c;随着载有用户订单的配送机器人编队从站内依次发出&#xff0c;全球首个由机器人完成配送任务的智能配送站正式投入使用。首个京东配送机器人智能配送站位于长沙市科技新城&#xff0c;占…

3D打印技术如何影响未来

来源&#xff1a;学习时报我们应该对3D打印技术保持谨慎态度&#xff0c;但过度反应和监管也可能会扼杀创新。历史经验表明&#xff0c;在技术的不利一面被应用之前进行规范构建对话是最有效的。因此&#xff0c;各国际主体&#xff0c;包括国家、商业领袖、政府官员和其他政策…

HDR简单介绍

问题定义 HDR字面意思是高动态范围High Dynamic Range&#xff0c;而动态范围是高图像质量的五个要素之一&#xff08;其余是1. 分辨率&#xff0c;2.位深度&#xff0c;3.帧速率&#xff0c;4.色域&#xff09;,而画质直接关系到人眼的主观感受。 如果将动态范围理解为量化的…

争议中挺进全新里程——中国“超级对撞机”《概念设计报告》发布侧记

来源&#xff1a;科技导报2018 年11 月12 日下午6 点半&#xff0c;北京市玉泉路&#xff0c;中国科学院高能物理研究所&#xff0c;所有建筑和行人沐浴在初冬夜晚的清冷与安静之中。不同的是&#xff0c;主楼西侧一座新楼的大厅里&#xff0c;却充满了热望和兴奋。这里正进行着…

haar级联分类器--人脸检测和匹配

分类器链接&#xff0c;https://download.csdn.net/download/fanzonghao/10582586 代码&#xff1a; import numpy as np import cv2# 实例化人脸分类器 face_cascade cv2.CascadeClassifier(./haarcascades/haarcascade_frontalface_default.xml) # 实例化眼睛分类器 eye_c…

社会科技奖不是新鲜事?如何真正做大

来源&#xff1a;中国科学报我国的社会力量设立科学技术奖励起步于上世纪80年代。科技部网站上2018年9月5日更新的《社会科技奖励目录》显示&#xff0c;目前我国共有269个社会科技奖项登记在册&#xff0c;其中最后一个正是未来科学大奖。11月18日&#xff0c;2018未来科学大奖…

泊松融合——用了拉普拉斯但没有金字塔

图像融合的方式有alpha融合&#xff0c;拉普拉斯金字塔融合。 同样是基于拉普拉斯算子&#xff0c;我们可以直接用求解的方式得到融合后的图像。因为人眼对二阶导是更敏感的&#xff0c;所以只要我们指定了融合区域内部的梯度值&#xff0c;并且知道融合边界处的值&#xff0c…

三层神经网络实现手写字母的识别(基于tensorflow)

数据集的制作参考这篇文章&#xff1a; https://blog.csdn.net/fanzonghao/article/details/81229409 一&#xff0c;读取数据集 import tensorflow as tf import numpy as np import pickle import matplotlib.pyplot as plt #对于x变成(samles,pixs),y变成one_hot (sample…

(转)Kinect背景移除支持多人

原文&#xff1a;http://blogs.msdn.com/b/k4wdev/archive/2013/10/22/using-kinect-background-removal-with-multiple-users.aspx?utm_sourcetuicool Introduction: Background Removal in Kinect for Windows The 1.8 release of the Kinect for Windows Developer Toolkit…

德国汉堡科学院院士张建伟:信息物理系统驱动智能未来

来源&#xff1a;OFweek工控网随着第四次工业革命的到来&#xff0c;信息技术&#xff08;IT&#xff09;和运营技术&#xff08;OT&#xff09;的融合成为新趋势&#xff0c;工厂开始进入数字化转型阶段&#xff0c;而德国“工业4.0”战略给全球制造业发展带来启示&#xff0c…