SVM被许多人认为是最强大的“黑箱”学习算法,并通过提出一个巧妙选择的优化目标,今天最广泛使用的学习算法之一。

Optimization Objective

根据Logistic Regression,有如下表述:

为了达到尽量好的分类效果,我们需要theta‘*x >> 0 or theta‘*x << 0,根据上面的函数图象,这时候的h(x)->1 or h(x)->0,可以看出这时我们的分类效果是最具说服力的。

根据逻辑回归的Cost Function我们可以得到上面灰色的函数图像,

if y=1,随着z的增大,Cost Function的值趋近于0;

if y=0,随着z的减小,Cost Function的值趋近于0;

在SVMs中,为了使分类结果更具说服力(使y等于0,1的概率更大),我们将使用上面的玫瑰色的函数轨迹替代灰色轨迹,把它们分别称为cost1(y=1)和cost0(y=0),

可以看到,它们二者的很类似,除了当Z>=1时,使Cost Function等于0(y=1时);当Z<=-1时,使Cost Function等于0(y=0时)。

当然,这里你也可以将等于0的点设置为其他数据,比如z>=2,3等,视你的系统情况而定,z>=1不是硬性规定。

逻辑回归的Cost Function:

根据逻辑回归的Cost Function,我们得到SVM的Cost Function:

和上面的公式相比,SVM的Cost Function的两项都去掉的1/m,这个不会影响我们求最优值,因为最值和函数系数无关;

多了一个C,少了一个lambda,这个可以理解为C = 1/lambda,关于参数C后面还会讲到。

Large Margin Intuition

上面的图,是我们之前谈论的一个总结。在SVM中,我们使用上面的损失函数,且使theta'*x>=1时取y=1,而不再是像逻辑回归中的仅仅是theta'*x>=0;当y=0时,是一个意思。

为了方便研究我们的最优化目标,将C取一个很大的值,比如C=100,000,为了得到最小的Cost Function值,我们记上面方框中的式子为 W ,则必须使W的式子取值趋于0,

W有两项组成,当y=1时,此时W就只有第一项,根据之前cost1的图像可知,此时只需要取theta‘*x>=1就可使Cost Function等于0;y=0时,同理使theta‘*x<=-1可使Cost Function等于0。

然后我们的最优化目标将可简化为:

Large Margin

我们称SVM为“Large Margin Classifier“,下面将体现最大间隔:

这里给的样本是线性可分的,直观上来看,这里的粉色和绿色的都不是最大间隔,而是黑线,蓝色线是与最近的样本点相近的黑线的平行线。

下面给出一个非线性可分的样本,

当C很大时,SVM是严格的分类器,此时将严格划分样本点,可以看出此时的间隔已经非常不好了,上图红色的。

当C不是很大时,SVM可以允许有一定的噪声点,此时会直接忽略,得到一个看上去不错的分类间隔,上图黑色的。

The'mathematics' behind'large'margin' classification'(optional) 

首先,在这里我假设大家都知道向量内积和向量投影。

上面的基本意思就是,向量u和v计算内积,p是向量v在向量u方向上的投影,那么u’*v = p * ||u||=u1*v1+u2*v2.

其中投影p可正可负,是向量具有方向。

同理,将此应用到theta‘*x中去,此时p是x在theta方向上的投影,如下图所示。

上面使用的最优化目标是使C很大时,简化过后的,这样方便讨论。下面的讨论要结合上面和下面的图一起看。

由上面的讨论可知,当y=1时,theta’*x>=1 在这里就等价于 p * ||theta|| >= 1,优化目标变成1/2 * ||theta||^2。

这里我们设theta0=0,这样间隔面会通过原点.下面给一个样本集合,随意画一个间隔平面,将正负类分开。

我们知道间隔面的法向量thea跟它垂直,故x在theta上的投影p就是上图theta方向上的红色有向线段。

可以看出,在上面的情况,绿色的间隔面,此时正样本X的投影p取>0的很小的值,若要满足p * ||theta|| >= 1 的条件,必须使theta变得足够大,这样就跟我们最小化目标1/2*||theta||^2不符合了,所以这个就不是我们所需要的“最大间隔”。在负样本时p取<0的很小值,同样不满足最优化要求。那么最大间隔会是怎样的呢?看下面。

此时的样本的投影P不论在>0or<0时的取值都比较大,所以为了满足p*||theta||>1,此时的theta就可以取较小的值了,就能得到最优化的结果,即为最大间隔。

所以最优的间隔应该是使x的投影p尽可能大。

SVM Kernles

首先我们从下面的非线性决策边界分类说起。

在之前,我们学习过用多项式模型拟合出上面的边界。我们将featuer使用f1,f2,...来表示。

当我们使用多项式模型时,计算成本大大加重,这在图像处理时根本就是无法使用的。

思考一下featuer有没有更好的表示方法呢?下面将介绍基于landmark的方法。

给定的样本x,我们计算其与landmarks(l1,l2,l3)的相近度来确定new feature,上面使用Gaussian Kernels作为相似函数,分别计算f1,f2,f3...

结合上图的分析可知,当样本x与landmark接近时,其f1->1,相反,当x离l很远时,f1->0.计算后的f,将作为new feature。

关于f作以下说明:

f作为图像的z轴的高,最高值为1,该点对应的坐标即为l1,从该点想四周扩散时,f在不断减小直至趋于0.关于参数sigma,是控制f值下降的快慢。

下面来讨论引入new feature的SVM是如何预测分类的。

首先根据样本x和landmarks计算f1,f2,f3,假设现在已经训练出了参数theta如上面所示,

则将算的f带入上面的式子,用向量表示为theta‘*f,如果其结果>=0,则预测结果为y=1;结果为<0,则预测结果为y=0。

上面的结果便是,离l1和l2近的点其预测为y=1,即在那个红色的圈内,y=1;在圈外预测y=0.

下面就将说明如何确定landmark和训练theta。

我们把每一个样本都作为landmark,l(1) = x(1),l(2) = x(2),...

然后使用Kernel计算new feature f1,f2,....

其中每个x(i)对应的f(i),每个f(i)都有一个分量f(i,i)=1,如上图红笔所示,然后设每一个f向量的f(0)=1,这样就得到了new feature的f向量,这里的样本x和f都是(m+1)维的数据。

接下来就是训练theta。

通过最小化上面的Cost Function,便可以得到参数theta,这里使用new feature f 替代x,带入cost1和cost2.

然后就可以使用训练得的theta参数进行分类预测了。if theta’*f >= 0,predict ‘y=1’,otherwise ‘y=0’。

下面是关于SVM参数C和Gaussian Kernels参数sigma的说明。

提示一下,当使用参数C时,请把它看作是逻辑回归中的1/lambda,然后就可以根据lambda来分析bias和variance。

同理,sigma可以看作是高斯分布中的sigma,表示图像的宽度。

Using an SVM

在使用SVM时,请注意图中画框的部分,主要是参数C和Kernel的选择,如果选择Gaussian Kernel就要面临参数sigma的选择。

需要提醒的是,在使用Gaussian Kernel时请务必先进行feature scaling。

另外,除了上面提到的不同的kernel,还有其他的选择,如下。

SVM也可以扩展到多分类,原理和logistics regression相似,都是one-vs-all method,具体可以参考http://www.cnblogs.com/yangmang/p/6352118.html

最后还有一件事,比较一下logistics regression和SVMs。

参考:http://blog.csdn.net/abcjennifer/article/details/7849812

斯坦福机器学习视频笔记 Week7 支持向量机 Support Vector Machines的更多相关文章

  1. 【原】Coursera—Andrew Ng机器学习—课程笔记 Lecture 12—Support Vector Machines 支持向量机

    Lecture 12 支持向量机 Support Vector Machines 12.1 优化目标 Optimization Objective 支持向量机(Support Vector Machi ...

  2. 机器学习(八)--------支持向量机 (Support Vector Machines)

    与逻辑回归和神经网络相比,支持向量机或者简称 SVM,更为强大. 人们有时将支持向量机看作是大间距分类器. 这是我的支持向量机模型代价函数 这样将得到一个更好的决策边界 理解支持向量机模型的做法,即努 ...

  3. [C7] 支持向量机(Support Vector Machines) (待整理)

    支持向量机(Support Vector Machines) 优化目标(Optimization Objective) 到目前为止,你已经见过一系列不同的学习算法.在监督学习中,许多学习算法的性能都非 ...

  4. 斯坦福第十二课:支持向量机(Support Vector Machines)

    12.1  优化目标 12.2  大边界的直观理解 12.3  数学背后的大边界分类(可选) 12.4  核函数 1 12.5  核函数 2 12.6  使用支持向量机 12.1  优化目标 到目前为 ...

  5. 斯坦福机器学习视频笔记 Week1 Linear Regression and Gradient Descent

    最近开始学习Coursera上的斯坦福机器学习视频,我是刚刚接触机器学习,对此比较感兴趣:准备将我的学习笔记写下来, 作为我每天学习的签到吧,也希望和各位朋友交流学习. 这一系列的博客,我会不定期的更 ...

  6. 斯坦福机器学习视频笔记 Week1 线性回归和梯度下降 Linear Regression and Gradient Descent

    最近开始学习Coursera上的斯坦福机器学习视频,我是刚刚接触机器学习,对此比较感兴趣:准备将我的学习笔记写下来, 作为我每天学习的签到吧,也希望和各位朋友交流学习. 这一系列的博客,我会不定期的更 ...

  7. 机器学习课程-第7周-支持向量机(Support Vector Machines)

    1. 优化目标 在监督学习中,许多学习算法的性能都非常类似,因此,重要的不是你该选择使用学习算法A还是学习算法B,而更重要的是,应用这些算法时,所创建的大量数据在应用这些算法时,表现情况通常依赖于你的 ...

  8. 十二、支持向量机(Support Vector Machines)

    12.1 优化目标 参考视频: 12 - 1 - Optimization Objective (15 min).mkv 到目前为止,你已经见过一系列不同的学习算法.在监督学习中,许多学习算法的性能都 ...

  9. Ng第十二课:支持向量机(Support Vector Machines)(三)

    11 SMO优化算法(Sequential minimal optimization) SMO算法由Microsoft Research的John C. Platt在1998年提出,并成为最快的二次规 ...

随机推荐

  1. sqoop 从oracle导数据到hive中,date型数据时分秒截断问题

    oracle数据库中Date类型倒入到hive中出现时分秒截断问题解决方案 1.问题描述: 用sqoop将oracle数据表倒入到hive中,oracle中Date型数据会出现时分秒截断问题,只保留了 ...

  2. ini文件

    *.INI内容 [NETWORK] ServerIP=100.100.100.53 程序: main() { char ip[16]; DWORD num=0; num=GetPrivateProfi ...

  3. 用ActivatedRoute获取url中的参数

    突然让我用ActivatedRoute import {Injectable} from "@angular/core"; import {ActivatedRoute} from ...

  4. C# winform中 选择文件和保存文件

    转载自https://blog.csdn.net/qq_31788297/article/details/62047952 我们在使用桌面软件的时候经常会使用到选择文件并打开和另存为等的窗口,这样方便 ...

  5. 第二章----python基础

    概要:python是一种计算机编程语言,有自己的一套语法,编译器或者解释器负责把符合语法的程序代码翻译成CPU能识别的机器码,然后执行.python使用缩进来组织代码块,Python程序中大小写是敏感 ...

  6. HashMap的clear()方法和new HashMap的效率问题

    最近研究Lucene的时候,遇到的用到大量Map的问题,心生好奇,想看一下在1W,10W,100W三种数据量下,new HashMap ,与 HashMap.clear()方法的效率问题. 提前说明: ...

  7. Java的四种引用,强弱软虚,用到的场景

    众所周知,java中是JVM负责内存的分配和回收,这是它的优点(使用方便,程序不用再像使用c那样操心内存),但同时也是它的缺点(不够灵活).为了解决内存操作不灵活这个问题,可以采用软引用等方法. 在J ...

  8. JQUERY几个操作action,随意记录

    .click:鼠标单击 .mouseenter 鼠标滑动

  9. 如何使用模板生成 sqlite3 sql 创建语句?

    template<typename T,typename... Args> std::string createTable(T tableName,Args&&... ar ...

  10. 常用代码块:java使用剪贴板复制文本

    // 获得系统剪切板 Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); // 复制到剪切板上 String ...