机器学习之SVM

一、线性分类器:

首先给出一个非常非常简单的分类问题(线性可分),我们要用一条直线,将下图中黑色的点和白色的点分开,很显然,图上的这条直线就是我们要求的直线之一(可以有无数条这样的直线)

假如说,我们令黑色的点 = -1, 白色的点 =  +1,直线f(x) = w.x + b,这儿的x、w是向量,其实写成这种形式也是等价的f(x) = w1x1 + w2x2 … + wnxn + b, 当向量x的维度=2的时候,f(x) 表示二

维空间中的一条直线, 当x的维度=3的时候,f(x) 表示3维空间中的一个平面,当x的维度=n > 3的时候,表示n维空间中的n-1维超平面。这些都是比较基础的内容,如果不太清楚,可能需要复习一

下微积分、线性代数的内容。

刚刚说了,我们令黑色白色两类的点分别为+1, -1,所以当有一个新的点x需要预测属于哪个分类的时候,我们用sgn(f(x)),就可以预测了,sgn表示符号函数,当f(x) > 0的时候,sgn(f(x)) = +1,

当f(x) < 0的时候sgn(f(x)) = –1。但是,我们怎样才能取得一个最优的划分直线f(x)呢?下图的直线表示几条可能的f(x)

一个很直观的感受是,让这条直线到给定样本中最近的点最远,这句话读起来比较拗口,下面给出几个图,来说明一下: 第一种分法:

第二种分法:

这两种分法哪种更好呢?从直观上来说,就是分割的间隙越大越好,把两个类别的点分得越开越好。就像我们平时判断一个人是男还是女,就是很难出现分错的情况,这就是男、女两个类别之间

的间隙非常的大导致的,让我们可以更准确的进行分类。在SVM中,称为Maximum Marginal,是SVM的一个理论基础之一。选择使得间隙最大的函数作为分割平面是由很多道理的,比如说从概

率的角度上来说,就是使得置信度最小的点置信度最大(听起来很拗口),从实践的角度来说,这样的效果非常好。

上图被红色和蓝色的线圈出来的点就是所谓的支持向量(support vector)。

上图就是一个对之前说的类别中的间隙的一个描述。Classifier Boundary就是f(x),红色和蓝色的线(plus plane与minus plane)就是support vector所在的面,红色、蓝色线之间的间隙就是我

们要最大化的分类间的间隙。

这里直接给出M的式子:(从高中的解析几何就可以很容易的得到了)

另外支持向量位于wx + b = 1与wx + b = -1的直线上,我们在前面乘上一个该点所属的类别y(还记得吗?y不是+1就是-1),就可以得到支持向量的表达式为:y(wx + b) = 1,这样就可以更简单

的将支持向量表示出来了。当支持向量确定下来的时候,分割函数就确定下来了,两个问题是等价的。得到支持向量,还有一个作用是,让支持向量后方那些点就不用参与计算了。

在这个小节的最后,给出我们要优化求解的表达式:

||w||的意思是w的二范数,跟上面的M表达式的分母是一个意思,之前得到,M = 2 / ||w||,最大化这个式子等价于最小化||w||, 另外由于||w||是一个单调函数,我们可以对其加入平方,和前面的系数,

熟悉的同学应该很容易就看出来了,这个式子是为了方便求导。

这个式子有还有一些限制条件,完整的写下来,应该是这样的:(原问题

s.t的意思是subject to,也就是在后面这个限制条件下的意思,这个词在svm的论文里面非常容易见到。这个其实是一个带约束的二次规划(quadratic programming, QP)问题,是一个凸问题,凸问题

就是指的不会有局部最优解,可以想象一个漏斗,不管我们开始的时候将一个小球放在漏斗的什么位置,这个小球最终一定可以掉出漏斗,也就是得到全局最优解。s.t.后面的限制条件可以看做是一个

凸多面体,我们要做的就是在这个凸多面体中找到最优解。这些问题这里不展开,因为展开的话,一本书也写不完。如果有疑问请看看wikipedia。

二、转化为对偶问题,并优化求解:

这个优化问题可以用拉格朗日乘子法去解,使用了KKT条件的理论,这里直接作出这个式子的拉格朗日目标函数:

求解这个式子的过程需要拉格朗日对偶性的相关知识(另外pluskid也有一篇文章专门讲这个问题),并且有一定的公式推导,如果不感兴趣,可以直接跳到后面用蓝色公式表示的结论,该部分推导主要

参考自plukids的文章

首先让L关于w,b最小化,分别令L关于w,b的偏导数为0,得到关于原问题的一个表达式

将两式带回L(w,b,a)得到对偶问题的表达式

新问题加上其限制条件是(对偶问题):

这个就是我们需要最终优化的式子。至此,得到了线性可分问题的优化式子。

求解这个式子,有很多的方法,比如SMO等等,个人认为,求解这样的一个带约束的凸优化问题与得到这个凸优化问题是比较独立的两件事情,所以在这篇文章中准备完全不涉及如何求解这个话题,

如果之后有时间可以补上一篇文章来谈谈:)。

三、线性不可分的情况(软间隔):

接下来谈谈线性不可分的情况,因为线性可分这种假设实在是太有局限性了:

下图就是一个典型的线性不可分的分类图,我们没有办法用一条直线去将其分成两个区域,每个区域只包含一种颜色的点。

要想在这种情况下的分类器,有两种方式,一种是用曲线去将其完全分开,曲线就是一种非线性的情况,跟之后将谈到的核函数有一定的关系:

另外一种还是用直线,不过不用去保证可分性,就是包容那些分错的情况,不过我们得加入惩罚函数,使 得点分错的情况越合理越好。其实在很多时候,不是在训练的时候分类函数越完美越好,

因为训练函数中有些数据本来就是噪声,可能就是在人工加上分类标签的时候加错了,如果我们在训练(学习)的时候把这些错误的点学习到了,那么模型在下次碰到这些错误情况的时候就难免出

错了(假如老师给你讲课的时候,某个知识点讲错了,你还信以为真了,那么在考试的时候就难免出错)。这种学习的时候学到了“噪声”的过程就是一个过拟合(over-fitting),这在机器学习中是一

个大忌,我们宁愿少学一些内容,也坚决杜绝多学一些错误的知识。还是回到主题,用直线怎么去分割线性不可分的点:

我们可以为分错的点加上一点惩罚,对一个分错的点的惩罚函数就是这个点到其正确位置的距离:

在上图中,蓝色、红色的直线分别为支持向量所在的边界,绿色的线为决策函数,那些紫色的线表示分错的点到其相应的决策面的距离,这样我们可以在原函数上面加上一个惩罚函数,并且带

上其限制条件为:

公式中蓝色的部分为在线性可分问题的基础上加上的惩罚函数部分,当xi在正确一边的时候,ε=0,R为全部的点的数目,C是一个由用户去指定的系数,表示对分错的点加入多少的惩罚,当C很大

的时候,分错的点就会更少,但是过拟合的情况可能会比较严重,当C很小的时候,分错的点可能会很多,不过可能由此得到的模型也会不太正确,所以如何选择C是有很多学问的,不过在大部分情

况下就是通过经验尝试得到的。

接下来就是同样的,求解一个拉格朗日对偶问题,得到一个原问题的对偶问题的表达式:

蓝色的部分是与线性可分的对偶问题表达式的不同之处。在线性不可分情况下得到的对偶问题,不同的地方就是α的范围从[0, +∞),变为了[0, C],增加的惩罚ε没有为对偶问题增加什么复杂度。

四、核函数:

刚刚在谈不可分的情况下,提了一句,如果使用某些非线性的方法,可以得到将两个分类完美划分的曲线,比如接下来将要说的核函数。

    我们可以让空间从原本的线性空间变成一个更高维的空间,在这个高维的线性空间下,再用一个超平面进行划分。这儿举个例子,来理解一下如何利用空间的维度变得更高来帮助我们分类的

下图是一个典型的线性不可分的情况

但是当我们把这两个类似于椭圆形的点映射到一个高维空间后,映射函数为:

    用这个函数可以将上图的平面中的点映射到一个三维空间(z1,z2,z3),并且对映射后的坐标加以旋转之后就可以得到一个线性可分的点集了。

用另外一个哲学例子来说:世界上本来没有两个完全一样的物体,对于所有的两个物体,我们可以通过增加维度来让他们最终有所区别,比如说两本书,从(颜色,内容)两个维度来说,

可能是一样的,我们可以加上 作者 这个维度,是在不行我们还可以加入 页码,可以加入 拥有者,可以加入 购买地点,可以加入 笔记内容等等。当维度增加到无限维的时候,一定可以让任

意的两个物体可分了。

回忆刚刚得到的对偶问题表达式:

我们可以将红色这个部分进行改造,令:     这个式子所做的事情就是将线性的空间映射到高维的空间,k(x, xj)有很多种,下面是比较典型的两种:

上面这个核称为多项式核,下面这个核称为高斯核,高斯核甚至是将原始空间映射为无穷维空间,另外核函数有一些比较好的性质,比如说不会比线性条件下增加多少额外的计算量,等等,

这里也不再深入。一般对于一个问题,不同的核函数可能会带来不同的结果,一般是需要尝试来得到的。

五、参考资料

(1)周志华的西瓜书。不过省略了很多原理和中间的步骤,不太好懂。

(2)博客:SVM的三层境界,推导和原理写的最透的一篇博客,https://blog.csdn.net/macyang/article/details/38782399

本文转自http://www.cnblogs.com/LeftNotEasy/archive/2011/05/02/basic-of-svm.html

原文地址:https://www.cnblogs.com/junjiang3/p/8906711.html

时间: 2024-08-22 23:44:00

机器学习之SVM的相关文章

机器学习笔记——SVM之一

SVM(Support Vector Machine),中文名为 支持向量机,就像自动机一样,听起来异常神气,最初总是纠结于不是机器怎么能叫"机",后来才知道其实此处的"机"实际上是算法的意思. 支持向量机一般用于分类,基本上,在我的理解范围内,所有的机器学习问题都是分类问题.而据说,SVM是效果最好而成本最低的分类算法. SVM是从线性可分的情况下最优分类面发展而来的,其基本思想可以用下图表示: (最优分类面示意图) 图中空心点和实心点代表两类数据样本,H为分类线

[matlab]机器学习及SVM工具箱学习笔记

机器学习与神经网络的关系: 机器学习是目的,神经网络是算法.神经网络是实现机器学习的一种方法,平行于SVM. 常用的两种工具:svm tool.libsvm clear; N = 50; n=2*N; randn('state',6); x1 = randn(2,N) y1 = ones(1,N); x2 = 5+randn(2,N); y2 = -ones(1,N); figure; plot(x1(1,:),x1(2,:),'bx',x2(1,:),x2(2,:),'k.'); axis([

机器学习之SVM初解与浅析(一):

sdsshngshan'gccha       这段时间在看周志华大佬的<机器学习>,在看书的过程中,有时候会搜搜其他人写的文章,对比来讲,周教授讲的内容还是比较深刻的,但是前几天看到SVM这一章的时候,感觉甚是晦涩啊,第一感觉就是比较抽象,特别是对于像本人这种IQ不怎么高的,涉及到高维向量之后,对模型的理解就比较懵了,特别是对于那个几何距离(或者说是最大间隔),一直是模棱两可,似懂非懂的感觉,本人也看了其他人写的SVM的文章,好多都没用讲清楚那个最大间隔模型 d = 1/||w|| 为什么分

机器学习之SVM初解与浅析(一):最大距离

这段时间在看周志华大佬的<机器学习>,在看书的过程中,有时候会搜搜其他人写的文章,对比来讲,周教授讲的内容还是比较深刻的,但是前几天看到SVM这一章的时候,感觉甚是晦涩啊,第一感觉就是比较抽象,特别是对于像本人这种IQ不怎么高的,涉及到高维向量之后,对模型的理解就比较懵了,特别是对于那个几何距离(或者说是最大间隔),一直是模棱两可,似懂非懂的感觉,本人也看了其他人写的SVM的文章,好多都没用讲清楚那个最大间隔模型 d = 1/||w|| 为什么分子是1而不是|f(x)|.苦思冥想之后,给了一个

机器学习之&amp;&amp;SVM支持向量机入门:Maximum Margin Classifier

概率论只不过是把常识用数学公式表达了出来. --拉普拉斯 0. 前言 这是一篇SVM的入门笔记,来自我对PlusKid.JerryLead.July等大神文章的拜读心得,说是心得还不如说是读文笔记,希望在自己理解的层面上给予SVM这个伟大的机器学习算法概要介绍,让更多的热爱机器学习的伙伴们进入到SVM的世界.PS:文章会以问答的形式为主要结构. 1.概念 1.1.什么是SVM? 支持向量机即 Support Vector Machine,简称 SVM .(第一次接触SVM是在阿里大数据竞赛的时候

从软件工程的角度写机器学习5——SVM(支持向量机)实现

SVM实现 SVM在浅层学习时代是主流监督学习算法,在深度学习时代也往往作为最后一个预测层使用(说深度学习击败了SVM的纯属扯淡). SVM算法总体流程 本系列文章旨在讲解机器学习算法的工程实现方法,不在于推导数学原理.因此想深入了解原理的请移步去看<支持向量机通俗导论(理解SVM的三层境界)>: http://www.cnblogs.com/v-July-v/archive/2012/06/01/2539022.html 对于急于求成的小伙伴,建议就看下面描述的基本过程,知其然,不必知其所以

机器学习:SVM公式推导

? ? 引言 ? ? 对于SVM的大致原理之前已经讲过了,但是对于公式的推导,很多书都并未做要求,而且在实际应用过程中并未涉及过深,但鉴于台大机器学习课程中讲到了,自己为了巩固自己的学习,也梳理一遍SVM中公式的推导 ? ? 此处考虑了C,也就是惩罚因子,不再是之前的hard-margin ? ? 推导过程 ? ? 如果是soft-margin,那就说明我们能容忍一些错误,那么目标问题转化为 ? ? ? ? 其中C比较大的时候,对离群点重视,越不要犯错越好,C比较小的时候,不是很看重离群点,重点

机器学习——支持向量机SVM在R中的实现

支持向量机是一个相对较新和较先进的机器学习技术,最初提出是为了解决二类分类问题,现在被广泛用于解决多类非线性分类问题和回归问题.继续阅读本文,你将学习到支持向量机如何工作,以及如何利用R语言实现支持向量机. 支持向量机如何工作? 简单介绍下支持向量机是做什么的: 假设你的数据点分为两类,支持向量机试图寻找最优的一条线(超平面),使得离这条线最近的点与其他类中的点的距离最大.有些时候,一个类的边界上的点可能越过超平面落在了错误的一边,或者和超平面重合,这种情况下,需要将这些点的权重降低,以减小它们

机器学习之SVM调参实例

一.任务 这次我们将了解在机器学习中支持向量机的使用方法以及一些参数的调整.支持向量机的基本原理就是将低维不可分问题转换为高维可分问题,在前面的博客具体介绍过了,这里就不再介绍了. 首先导入相关标准库: %matplotlib inline import numpy as np import matplotlib.pyplot as plt from scipy import stats import seaborn as sns;sns.set() # 使用seaborn的默认设置 作为一个例