支持向量机(Support Vector Machines, SVM)讲解
2017-08-18 21:09
435 查看
本次讲解的参考资料:
1.《机器学习实战》,作者:Peter Harrington
2.《机器学习》,作者:周志华
3.CSDN博客:http://blog.csdn.net/garfielder007/article/details/51476057,作者:GarfieldEr007
(此篇博客开头有如下内容,望各位看下)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/c0a8cae9c9cbae243060a70a23c5ce5e)
下面开始我个人对支持向量机的讲解
我们先看一下一个线性的例子。在线性二分类问题中,我们需要求得一个函数将两类进行分开,如下图,其中红线部分将黑点和蓝点分开了。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/bcde95f55f9bcae2b5b806cd38f202a9)
上图就是一个简单的二分类图形化的例子,那么其实支持向量机在我个人看来主要的作用也是在于对二分类问题的求解。在支持向量机中有一个概念叫超平面(separating hyperplane),如上图中的红线就是一个超平面,超平面的作用就是将给定的数据进行分开。
超平面
《机器学习实战》对超平面的解释:在二维平面上将数据分开时,超平面为一条线;如果数据集是三维的,则超平面是一个二维平面;更高维的情况可以以此类推。例如1024维的数据集就可以用1023维的某对象来分割。所以N维的用N-1维的对象来分割。该对象被称为超平面,也就是分类的决策边界。分布在超平面一侧的所有数据都属于某个类别,而分布在另一侧的所有数据则属于另一个类别。
但是,我们应该知道能将数据分开的超平面会有很多个,如图所示,图中就有三条直线可以将我们已有的数据集进行分开,那么我们应该选择哪一个超平面会是最好的呢?哪个超平面好我们就要取决于另一个概念,间隔(margin)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/30064b6f31d0eb54f642709881b4d576)
间隔
点到超平面的距离称为间隔,如图所示。那么我们希望的是最近点的间隔最大。也就是说我们希望最近点到超平面的距离越远越好,这样我们的模型出错的概率会越来越小。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/6944f3b51469e06f8150f8bdae225a38)
所以我们的主要目的就是对最近点间隔的最大化进行求解,下面进行数学推导
4000
我们可以用下面的线性方程来表示超平面,其中w=(w1,w2,w3,…,wn)是超平面的法向量,决定了超平面的方向;b为位移项,决定了超平面与原点之间的距离。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/f5ed03e54e16c98db13853c4322b2a9d)
样本空间中的任意一点A(xA,yA)到超平面的距离,我们可以求得(个人理解可以看成点到直线的距离,其中||w||是二范数):
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/121a9fc75f1e7ff1b588ff1aa68bd75c)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/9ae4a167a5df2a3e57f1adf3188f20b2)
我们将超平面的一侧,也就是下面公式(1)中的一侧的标签定义为y=+1,公式(2)表示的另一侧标签定义为y=-1
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/c8b56bf4bd295d5417edf6fe5bbdb172)
我们讲上述内容的目的是,通过上面的定义我们就可以用一个统一的公式来表示间隔或者样本点到超平面的距离了,同时也不必担心数据到底是属于哪一侧的。间隔通过用y*r来表示
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/560fb75781b474eed672998d6ad6002d)
以上的好处就是,我们通过标签y和距离r组成的公式,如果样本点处于>0的一侧(y=+1的一侧)并且离超平面很远的位置,那么r会是一个很大的正数,y*r也是一个很大的正数,同理可证在<0的一侧(y=-1的一侧),r是一个很大的负数,y*r也是一个很大的正数。那么最小间隔的数据点该怎么表示,如下图:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/454c2d2322ddaef297550bfdde2b99e2)
其中大括号里面的内容,是求得最小距离的点,然后在这个点的基础上我们求得可以使得整个式子最大化的w和b,w和b求出来,也就把我们最优的超平面求出了,这个也是我们一直以来的目标。
上面的式子直接求解很是困难,如果我们可以固定一部分,而对剩余的部分进行求解就容易的多,这里我们做一个假设:
设超平面(w,b)能将样本空间正确分类,即对于点(xi,yi)∈D,令
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/1713c8a8f80798a1b706226253c606c6)
如下图所示(图片来自《机器学习》),假设离超平面最近的几个样本点使得上面假设的式子成立,这些点称为“支持向量”(support vector)。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/9cb4e20e30ef1fc754da4a69b34bdac8)
这样我们就使得上述我们要求的w和b的公式的一部分进行了固定,公式中仅仅就剩下了1/||w||的部分。我们再将异侧支持向量到超平面的距离相加的和称为:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/b5beb98ff906ff709fbd3d84a6289d5c)
这个也正是我们要求得的式子。因为我们是基于假设得到的这个式子,所以我们有一个约束条件伴随着:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/21086ac53c5a4183fab33e26d33c4898)
上面的式子我们可以对其进行转换:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/8a6f49fe9d5d727623ef1a11bc448c71)
、
这个最终的式子就是支持向量机的基本型(来自《机器学习》书中介绍)。
我们可以使用拉格朗日乘子法对上述式子进行求解,对上述式子每条约束添加拉格朗日乘子 :
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/46dee55de2aef40cf1d9406e19a4a6d5)
则要求式子的拉格朗日函数可写为:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/081024ef5f24fe40b240002ccee9bd43)
之后令L对w,b的偏导为零可得:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/aaa22928e5917a05d0316dcadc96a51c)
将对w偏导的结果带入到拉格朗日函数中我们可以得到一个对偶问题的表达式(其限制条件是对b的偏导结果):
![](https://oscdn.geek-share.com/Uploads/Images/Content/201908/15/432a7b06c9b92c5a208b16f0fa8367a3)
这样我们通过最终的这个式子求出拉格朗日乘子,之后就可以把w和b求出来,也就求出了最优的超平面。求解这个式子的方法有很多,我比较推荐的是SMO(序列最小化,Sequential Minimal Optimization)算法。
稍后我们会介绍如何用SMO算法求得最终的结果。
1.《机器学习实战》,作者:Peter Harrington
2.《机器学习》,作者:周志华
3.CSDN博客:http://blog.csdn.net/garfielder007/article/details/51476057,作者:GarfieldEr007
(此篇博客开头有如下内容,望各位看下)
下面开始我个人对支持向量机的讲解
我们先看一下一个线性的例子。在线性二分类问题中,我们需要求得一个函数将两类进行分开,如下图,其中红线部分将黑点和蓝点分开了。
上图就是一个简单的二分类图形化的例子,那么其实支持向量机在我个人看来主要的作用也是在于对二分类问题的求解。在支持向量机中有一个概念叫超平面(separating hyperplane),如上图中的红线就是一个超平面,超平面的作用就是将给定的数据进行分开。
超平面
《机器学习实战》对超平面的解释:在二维平面上将数据分开时,超平面为一条线;如果数据集是三维的,则超平面是一个二维平面;更高维的情况可以以此类推。例如1024维的数据集就可以用1023维的某对象来分割。所以N维的用N-1维的对象来分割。该对象被称为超平面,也就是分类的决策边界。分布在超平面一侧的所有数据都属于某个类别,而分布在另一侧的所有数据则属于另一个类别。
但是,我们应该知道能将数据分开的超平面会有很多个,如图所示,图中就有三条直线可以将我们已有的数据集进行分开,那么我们应该选择哪一个超平面会是最好的呢?哪个超平面好我们就要取决于另一个概念,间隔(margin)
间隔
点到超平面的距离称为间隔,如图所示。那么我们希望的是最近点的间隔最大。也就是说我们希望最近点到超平面的距离越远越好,这样我们的模型出错的概率会越来越小。
所以我们的主要目的就是对最近点间隔的最大化进行求解,下面进行数学推导
4000
我们可以用下面的线性方程来表示超平面,其中w=(w1,w2,w3,…,wn)是超平面的法向量,决定了超平面的方向;b为位移项,决定了超平面与原点之间的距离。
样本空间中的任意一点A(xA,yA)到超平面的距离,我们可以求得(个人理解可以看成点到直线的距离,其中||w||是二范数):
我们将超平面的一侧,也就是下面公式(1)中的一侧的标签定义为y=+1,公式(2)表示的另一侧标签定义为y=-1
我们讲上述内容的目的是,通过上面的定义我们就可以用一个统一的公式来表示间隔或者样本点到超平面的距离了,同时也不必担心数据到底是属于哪一侧的。间隔通过用y*r来表示
以上的好处就是,我们通过标签y和距离r组成的公式,如果样本点处于>0的一侧(y=+1的一侧)并且离超平面很远的位置,那么r会是一个很大的正数,y*r也是一个很大的正数,同理可证在<0的一侧(y=-1的一侧),r是一个很大的负数,y*r也是一个很大的正数。那么最小间隔的数据点该怎么表示,如下图:
其中大括号里面的内容,是求得最小距离的点,然后在这个点的基础上我们求得可以使得整个式子最大化的w和b,w和b求出来,也就把我们最优的超平面求出了,这个也是我们一直以来的目标。
上面的式子直接求解很是困难,如果我们可以固定一部分,而对剩余的部分进行求解就容易的多,这里我们做一个假设:
设超平面(w,b)能将样本空间正确分类,即对于点(xi,yi)∈D,令
如下图所示(图片来自《机器学习》),假设离超平面最近的几个样本点使得上面假设的式子成立,这些点称为“支持向量”(support vector)。
这样我们就使得上述我们要求的w和b的公式的一部分进行了固定,公式中仅仅就剩下了1/||w||的部分。我们再将异侧支持向量到超平面的距离相加的和称为:
这个也正是我们要求得的式子。因为我们是基于假设得到的这个式子,所以我们有一个约束条件伴随着:
上面的式子我们可以对其进行转换:
、
这个最终的式子就是支持向量机的基本型(来自《机器学习》书中介绍)。
我们可以使用拉格朗日乘子法对上述式子进行求解,对上述式子每条约束添加拉格朗日乘子 :
则要求式子的拉格朗日函数可写为:
之后令L对w,b的偏导为零可得:
将对w偏导的结果带入到拉格朗日函数中我们可以得到一个对偶问题的表达式(其限制条件是对b的偏导结果):
这样我们通过最终的这个式子求出拉格朗日乘子,之后就可以把w和b求出来,也就求出了最优的超平面。求解这个式子的方法有很多,我比较推荐的是SMO(序列最小化,Sequential Minimal Optimization)算法。
稍后我们会介绍如何用SMO算法求得最终的结果。
相关文章推荐
- 支持向量机(Support Vector Machines, SVM)
- Stanford Machine Learning: (5). Support Vector Machines(SVM支持向量机)
- 支持向量机(support vector machines, SVM)
- 漫谈支持向量机(support vector machines,SVM )
- 机器学习之支持向量机: Support Vector Machines (SVM)
- 支持向量机 Support Vector Machines (SVM)
- 支持向量机SVM(Support Vector Machines)介绍
- 支持向量机(support vector machines)-SVM
- 支持向量机(Support Vector Machines SVM)基础学习
- OpenCV3.3中支持向量机(Support Vector Machines, SVM)实现简介及使用
- 可支持向量机SVM(support vector machine)基础
- 支持向量机 Support Vector Machines
- 海量数据挖掘MMDS week6: 支持向量机Support-Vector Machines,SVM
- 海量数据挖掘MMDS week6: 支持向量机Support-Vector Machines,SVM
- 机器学习——支持向量机SVM(Support Vector Machine)(上)
- 支持向量机(Support Vector Machine)-----SVM之SMO算法(转)
- 机器学习:支持向量机(Support Vector Machine, SVM)
- 【机器学习实战-python3】支持向量机(Support Vecrtor Machines SVM)
- (五)Support Vector Machines[支持向量机]
- 支持向量机(Support Vector Machine)-----SVM之SMO算法(转)