首页 > 编程语言 >svm算法

svm算法

时间:2024-02-15 16:00:50浏览次数:30  
标签:svm 函数 求解 算法 SVM 超平面 ZHI zhihu

支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;SVM还包括核技巧,这使它成为实质上的非线性分类器。SVM的的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。SVM的的学习算法就是求解凸二次规划的最优化算法。

SVM算法原理

SVM学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。如下图所示,  \boldsymbol{w}\cdot x+b=0  即为分离超平面,对于线性可分的数据集来说,这样的超平面有无穷多个(即感知机),但是几何间隔最大的分离超平面却是唯一的。

在推导之前,先给出一些定义。假设给定一个特征空间上的训练数据集

 T=\left\{ \left( \boldsymbol{x}_1,y_1 \right) ,\left( \boldsymbol{x}_2,y_2 \right) ,...,\left( \boldsymbol{x}_N,y_N \right) \right\}

其中, \boldsymbol{x}_i\in \mathbb{R}^n  ,  y_i\in \left\{ +1,-1 \right\} ,i=1,2,...N  , x_i  为第  i  个特征向量,  y_i  为类标记,当它等于+1时为正例;为-1时为负例。再假设训练数据集是线性可分的。

几何间隔:对于给定的数据集  T  和超平面 w\cdot x+b=0 ,定义超平面关于样本点  \left( x_i,y_i \right)  的几何间隔为

 \gamma _i=y_i\left( \frac{\boldsymbol{w}}{\lVert \boldsymbol{w} \rVert}\cdot \boldsymbol{x}_{\boldsymbol{i}}+\frac{b}{\lVert \boldsymbol{w} \rVert} \right)

超平面关于所有样本点的几何间隔的最小值为

 \gamma =\underset{i=1,2...,N}{\min}\gamma _i

实际上这个距离就是我们所谓的支持向量到超平面的距离。

根据以上定义,SVM模型的求解最大分割超平面问题可以表示为以下约束最优化问题

 \underset{\boldsymbol{w,}b}{\max}\ \gamma

 s.t.\ \ \ y_i\left( \frac{\boldsymbol{w}}{\lVert \boldsymbol{w} \rVert}\cdot \boldsymbol{x}_{\boldsymbol{i}}+\frac{b}{\lVert \boldsymbol{w} \rVert} \right) \ge \gamma \ ,i=1,2,...,N

将约束条件两边同时除以  \gamma  ,得到

 y_i\left( \frac{\boldsymbol{w}}{\lVert \boldsymbol{w} \rVert \gamma}\cdot \boldsymbol{x}_{\boldsymbol{i}}+\frac{b}{\lVert \boldsymbol{w} \rVert \gamma} \right) \ge 1

因为  \lVert \boldsymbol{w} \rVert \text{,}\gamma  都是标量,所以为了表达式简洁起见,令

\boldsymbol{w}=\frac{\boldsymbol{w}}{\lVert \boldsymbol{w} \rVert \gamma}

b=\frac{b}{\lVert \boldsymbol{w} \rVert \gamma}

得到

y_i\left( \boldsymbol{w}\cdot \boldsymbol{x}_{\boldsymbol{i}}+b \right) \ge 1,\ i=1,2,...,N

又因为最大化  \gamma  ,等价于最大化  \frac{1}{\lVert \boldsymbol{w} \rVert} ,也就等价于最小化  \frac{1}{2}\lVert \boldsymbol{w} \rVert ^2  ( \frac{1}{2} 是为了后面求导以后形式简洁,不影响结果),因此SVM模型的求解最大分割超平面问题又可以表示为以下约束最优化问题

 \underset{\boldsymbol{w,}b}{\min}\ \frac{1}{2}\lVert \boldsymbol{w} \rVert ^2

 s.t.\ \ y_i\left( \boldsymbol{w}\cdot \boldsymbol{x}_{\boldsymbol{i}}+b \right) \ge 1,\ i=1,2,...,N

这是一个含有不等式约束的凸二次规划问题,可以对其使用拉格朗日乘子法得到其对偶问题(dual problem)。

首先,我们将有约束的原始目标函数转换为无约束的新构造的拉格朗日目标函数

L\left( \boldsymbol{w,}b,\boldsymbol{\alpha } \right) =\frac{1}{2}\lVert \boldsymbol{w} \rVert ^2-\sum_{i=1}^N{\alpha _i\left( y_i\left( \boldsymbol{w}\cdot \boldsymbol{x}_{\boldsymbol{i}}+b \right) -1 \right)}

其中  \alpha _i  为拉格朗日乘子,且  \alpha _i\ge 0  。现在我们令

 \theta \left( \boldsymbol{w} \right) =\underset{\alpha _{_i}\ge 0}{\max}\ L\left( \boldsymbol{w,}b,\boldsymbol{\alpha } \right)

当样本点不满足约束条件时,即在可行解区域外:

 y_i\left( \boldsymbol{w}\cdot \boldsymbol{x}_{\boldsymbol{i}}+b \right) <1

此时,将 \alpha _i  设置为无穷大,则  \theta \left( \boldsymbol{w} \right)  也为无穷大。

当满本点满足约束条件时,即在可行解区域内:

y_i\left( \boldsymbol{w}\cdot \boldsymbol{x}_{\boldsymbol{i}}+b \right) \ge 1

此时,  \theta \left( \boldsymbol{w} \right)  为原函数本身。于是,将两种情况合并起来就可以得到我们新的目标函数

 \theta \left( \boldsymbol{w} \right) =\begin{cases} \frac{1}{2}\lVert \boldsymbol{w} \rVert ^2\ ,\boldsymbol{x}\in \text{可行区域}\\ +\infty \ \ \ \ \ ,\boldsymbol{x}\in \text{不可行区域}\\ \end{cases}

于是原约束问题就等价于

 \underset{\boldsymbol{w,}b}{\min}\ \theta \left( \boldsymbol{w} \right) =\underset{\boldsymbol{w,}b}{\min}\underset{\alpha _i\ge 0}{\max}\ L\left( \boldsymbol{w,}b,\boldsymbol{\alpha } \right) =p^*

看一下我们的新目标函数,先求最大值,再求最小值。这样的话,我们首先就要面对带有需要求解的参数  \boldsymbol{w}  和  b 的方程,而  \alpha _i  又是不等式约束,这个求解过程不好做。所以,我们需要使用拉格朗日函数对偶性,将最小和最大的位置交换一下,这样就变成了:

 \underset{\alpha _i\ge 0}{\max}\underset{\boldsymbol{w,}b}{\min}\ L\left( \boldsymbol{w,}b,\boldsymbol{\alpha } \right) =d^*

要有  p^*=d^*  ,需要满足两个条件:

① 优化问题是凸优化问题

② 满足KKT条件

首先,本优化问题显然是一个凸优化问题,所以条件一满足,而要满足条件二,即要求

 \begin{cases} \alpha _i\ge 0\\ y_i\left( \boldsymbol{w}_{\boldsymbol{i}}\cdot \boldsymbol{x}_{\boldsymbol{i}}+b \right) -1\ge 0\\ \alpha _i\left( y_i\left( \boldsymbol{w}_{\boldsymbol{i}}\cdot \boldsymbol{x}_{\boldsymbol{i}}+b \right) -1 \right) =0\\ \end{cases}

为了得到求解对偶问题的具体形式,令  L\left( \boldsymbol{w,}b,\boldsymbol{\alpha } \right)  对  \boldsymbol{w} 和  b  的偏导为0,可得

\boldsymbol{w}=\sum_{i=1}^N{\alpha _iy_i\boldsymbol{x}_{\boldsymbol{i}}}

\sum_{i=1}^N{\alpha _iy_i}=0

将以上两个等式带入拉格朗日目标函数,消去  \boldsymbol{w} 和  b  , 得

 L\left( \boldsymbol{w,}b,\boldsymbol{\alpha } \right) =\frac{1}{2}\sum_{i=1}^N{\sum_{j=1}^N{\alpha _i\alpha _jy_iy_j\left( \boldsymbol{x}_{\boldsymbol{i}}\cdot \boldsymbol{x}_{\boldsymbol{j}} \right)}}-\sum_{i=1}^N{\alpha _iy_i\left( \left( \sum_{j=1}^N{\alpha _jy_j\boldsymbol{x}_{\boldsymbol{j}}} \right) \cdot \boldsymbol{x}_{\boldsymbol{i}}+b \right) +}\sum_{i=1}^N{\alpha _i}

\ \ \ \ \ \ \ \ \ \ \ =-\frac{1}{2}\sum_{i=1}^N{\sum_{j=1}^N{\alpha _i\alpha _jy_iy_j\left( \boldsymbol{x}_{\boldsymbol{i}}\cdot \boldsymbol{x}_{\boldsymbol{j}} \right)}}+\sum_{i=1}^N{\alpha _i}


\underset{\boldsymbol{w,}b}{\min}\ L\left( \boldsymbol{w,}b,\boldsymbol{\alpha } \right) =-\frac{1}{2}\sum_{i=1}^N{\sum_{j=1}^N{\alpha _i\alpha _jy_iy_j\left( \boldsymbol{x}_{\boldsymbol{i}}\cdot \boldsymbol{x}_{\boldsymbol{j}} \right)}}+\sum_{i=1}^N{\alpha _i}

求  \underset{\boldsymbol{w,}b}{\min}\ L\left( \boldsymbol{w,}b,\boldsymbol{\alpha } \right)  对  \boldsymbol{\alpha }  的极大,即是对偶问题

\underset{\boldsymbol{\alpha }}{\max}\ -\frac{1}{2}\sum_{i=1}^N{\sum_{j=1}^N{\alpha _i\alpha _jy_iy_j\left( \boldsymbol{x}_{\boldsymbol{i}}\cdot \boldsymbol{x}_{\boldsymbol{j}} \right)}}+\sum_{i=1}^N{\alpha _i}

 s.t.\ \ \ \ \sum_{i=1}^N{\alpha _iy_i}=0

 \ \ \ \ \ \ \ \alpha _i\ge 0,\ i=1,2,...,N

把目标式子加一个负号,将求解极大转换为求解极小

 \underset{\boldsymbol{\alpha }}{\min}\ \frac{1}{2}\sum_{i=1}^N{\sum_{j=1}^N{\alpha _i\alpha _jy_iy_j\left( \boldsymbol{x}_{\boldsymbol{i}}\cdot \boldsymbol{x}_{\boldsymbol{j}} \right)}}-\sum_{i=1}^N{\alpha _i}

 s.t.\ \ \ \ \sum_{i=1}^N{\alpha _iy_i}=0

\ \ \ \ \ \ \ \alpha _i\ge 0,\ i=1,2,...,N

现在我们的优化问题变成了如上的形式。对于这个问题,我们有更高效的优化算法,即序列最小优化(SMO)算法。这里暂时不展开关于使用SMO算法求解以上优化问题的细节,下一篇文章再加以详细推导。

我们通过这个优化算法能得到 \boldsymbol{\alpha }^*  ,再根据 \boldsymbol{\alpha }^*  ,我们就可以求解出  \boldsymbol{w} 和  b  ,进而求得我们最初的目的:找到超平面,即”决策平面”。

前面的推导都是假设满足KKT条件下成立的,KKT条件如下

 \begin{cases} \alpha _i\ge 0\\ y_i\left( \boldsymbol{w}_{\boldsymbol{i}}\cdot \boldsymbol{x}_{\boldsymbol{i}}+b \right) -1\ge 0\\ \alpha _i\left( y_i\left( \boldsymbol{w}_{\boldsymbol{i}}\cdot \boldsymbol{x}_{\boldsymbol{i}}+b \right) -1 \right) =0\\ \end{cases}

另外,根据前面的推导,还有下面两个式子成立

\boldsymbol{w}=\sum_{i=1}^N{\alpha _iy_i\boldsymbol{x}_{\boldsymbol{i}}}

\sum_{i=1}^N{\alpha _iy_i}=0

由此可知在 \boldsymbol{\alpha }^*  中,至少存在一个  \alpha _{j}^{*}>0 (反证法可以证明,若全为0,则  \boldsymbol{w}=0  ,矛盾),对此  j  有

 y_j\left( \boldsymbol{w}^*\cdot \boldsymbol{x}_{\boldsymbol{j}}+b^* \right) -1=0

因此可以得到

\boldsymbol{w}^*=\sum_{i=1}^N{\alpha _{i}^{*}y_i\boldsymbol{x}_i}

 b^*=y_j-\sum_{i=1}^N{\alpha _{i}^{*}y_i\left( \boldsymbol{x}_{\boldsymbol{i}}\cdot \boldsymbol{x}_{\boldsymbol{j}} \right)}

对于任意训练样本  \left( \boldsymbol{x}_{\boldsymbol{i}},y_i \right)  ,总有  \alpha _i=0  或者 y_{j}\left(\boldsymbol{w} \cdot \boldsymbol{x}_{j}+b\right)=1 。若  \alpha _i=0  ,则该样本不会在最后求解模型参数的式子中出现。若  \alpha _i>0 ,则必有  y_j\left( \boldsymbol{w}\cdot \boldsymbol{x}_{\boldsymbol{j}}+b \right) =1  ,所对应的样本点位于最大间隔边界上,是一个支持向量。这显示出支持向量机的一个重要性质:训练完成后,大部分的训练样本都不需要保留,最终模型仅与支持向量有关。

到这里都是基于训练集数据线性可分的假设下进行的,但是实际情况下几乎不存在完全线性可分的数据,为了解决这个问题,引入了“软间隔”的概念,即允许某些点不满足约束

y_j\left( \boldsymbol{w}\cdot \boldsymbol{x}_{\boldsymbol{j}}+b \right) \ge 1

采用hinge损失,将原优化问题改写为

\underset{\boldsymbol{w,}b,\xi _i}{\min}\ \frac{1}{2}\lVert \boldsymbol{w} \rVert ^2+C\sum_{i=1}^m{\xi _i}

 s.t.\ \ y_i\left( \boldsymbol{w}\cdot \boldsymbol{x}_{\boldsymbol{i}}+b \right) \ge 1-\xi _i

 \ \ \ \ \ \xi _i\ge 0\ ,\ i=1,2,...,N

其中  \xi _i  为“松弛变量”, \xi _i=\max \left( 0,1-y_i\left( \boldsymbol{w}\cdot \boldsymbol{x}_{\boldsymbol{i}}+b \right) \right)  ,即一个hinge损失函数。每一个样本都有一个对应的松弛变量,表征该样本不满足约束的程度。  C>0  称为惩罚参数, C 值越大,对分类的惩罚越大。跟线性可分求解的思路一致,同样这里先用拉格朗日乘子法得到拉格朗日函数,再求其对偶问题。

综合以上讨论,我们可以得到线性支持向量机学习算法如下:

输入:训练数据集  T=\left\{ \left( \boldsymbol{x}_1,y_1 \right) ,\left( \boldsymbol{x}_1,y_1 \right) ,...,\left( \boldsymbol{x}_N,y_N \right) \right\} 其中, \boldsymbol{x}_i\in \mathbb{R}^n ,  y_i\in \left\{ +1,-1 \right\} ,i=1,2,...N ;

输出:分离超平面和分类决策函数

(1)选择惩罚参数  C>0  ,构造并求解凸二次规划问题

 \underset{\boldsymbol{\alpha }}{\min}\ \frac{1}{2}\sum_{i=1}^N{\sum_{j=1}^N{\alpha _i\alpha _jy_iy_j\left( \boldsymbol{x}_{\boldsymbol{i}}\cdot \boldsymbol{x}_{\boldsymbol{j}} \right)}}-\sum_{i=1}^N{\alpha _i}

 s.t.\ \ \ \ \sum_{i=1}^N{\alpha _iy_i}=0

 \ \ \ \ \ \ \ 0\le \alpha _i\le C,\ i=1,2,...,N

得到最优解  \boldsymbol{\alpha }^*=\left( \alpha _{1}^{*},\alpha _{2}^{*},...,\alpha _{N}^{*} \right) ^T

(2)计算

 \boldsymbol{w}^*=\sum_{i=1}^N{\alpha _{i}^{*}y_i\boldsymbol{x}_i}

选择 \boldsymbol{\alpha }^*  的一个分量  \alpha _{j}^{*}  满足条件  0<\alpha _{j}^{*}<C  ,计算

b^*=y_j-\sum_{i=1}^N{\alpha _{i}^{*}y_i\left( \boldsymbol{x}_{\boldsymbol{i}}\cdot \boldsymbol{x}_{\boldsymbol{j}} \right)}

(3)求分离超平面

 \boldsymbol{w}^*\cdot \boldsymbol{x}+b^*=0

分类决策函数:

 f\left( \boldsymbol{x} \right) =sign\left( \boldsymbol{w}^*\cdot \boldsymbol{x}+b^* \right)

 

非线性SVM算法原理

对于输入空间中的非线性分类问题,可以通过非线性变换将它转化为某个维特征空间中的线性分类问题,在高维特征空间中学习线性支持向量机。由于在线性支持向量机学习的对偶问题里,目标函数和分类决策函数都只涉及实例和实例之间的内积,所以不需要显式地指定非线性变换,而是用核函数替换当中的内积。核函数表示,通过一个非线性转换后的两个实例间的内积。具体地,  K\left( x,z \right)  是一个函数,或正定核,意味着存在一个从输入空间到特征空间的映射  \phi \left( x \right)  ,对任意输入空间中的  x,z  ,有

K\left( x,z \right) =\phi \left( x \right) \cdot \phi \left( z \right)

在线性支持向量机学习的对偶问题中,用核函数  K\left( x,z \right)  替代内积,求解得到的就是非线性支持向量机

f\left( x \right) =sign\left( \sum_{i=1}^N{\alpha _{i}^{*}y_iK\left( x,x_i \right) +b^*} \right)

综合以上讨论,我们可以得到非线性支持向量机学习算法如下:

输入:训练数据集  T=\left\{ \left( \boldsymbol{x}_1,y_1 \right) ,\left( \boldsymbol{x}_1,y_1 \right) ,...,\left( \boldsymbol{x}_N,y_N \right) \right\} 其中, \boldsymbol{x}_i\in \mathbb{R}^n ,  y_i\in \left\{ +1,-1 \right\} ,i=1,2,...N ;

输出:分离超平面和分类决策函数

(1)选取适当的核函数  K\left( x,z \right)  和惩罚参数  C>0  ,构造并求解凸二次规划问题

 \underset{\boldsymbol{\alpha }}{\min}\ \frac{1}{2}\sum_{i=1}^N{\sum_{j=1}^N{\alpha _i\alpha _jy_iy_jK\left( \boldsymbol{x}_{\boldsymbol{i}},\boldsymbol{x}_{\boldsymbol{j}} \right)}}-\sum_{i=1}^N{\alpha _i}

 s.t.\ \ \ \ \sum_{i=1}^N{\alpha _iy_i}=0

 \ \ \ \ \ \ \ 0\le \alpha _i\le C,\ i=1,2,...,N

得到最优解  \boldsymbol{\alpha }^*=\left( \alpha _{1}^{*},\alpha _{2}^{*},...,\alpha _{N}^{*} \right) ^T

(2)计算

选择 \boldsymbol{\alpha }^*  的一个分量  \alpha _{j}^{*}  满足条件  0<\alpha _{j}^{*}<C  ,计算

 b^*=y_j-\sum_{i=1}^N{\alpha _{i}^{*}y_iK\left( \boldsymbol{x}_{\boldsymbol{i}},\boldsymbol{x}_{\boldsymbol{j}} \right)}

(3)分类决策函数:

 f\left( x \right) =sign\left( \sum_{i=1}^N{\alpha _{i}^{*}y_iK\left( x,x_i \right) +b^*} \right)

 

介绍一个常用的核函数——高斯核函数

 K\left( x,z \right) =\exp \left( -\frac{\lVert x-z \rVert ^2}{2\sigma ^2} \right)

对应的SVM是高斯径向基函数分类器,在此情况下,分类决策函数为

f\left( x \right) =sign\left( \sum_{i=1}^N{\alpha _{i}^{*}y_i\exp \left( -\frac{\lVert x-z \rVert ^2}{2\sigma ^2} \right) +b^*} \right)

 

标签:svm,函数,求解,算法,SVM,超平面,ZHI,zhihu
From: https://www.cnblogs.com/copyjames/p/18016301

相关文章

  • 【算法】【动态规划】过桥问题
    1 题目在一个夜黑风高的晚上,有n(n<=50)个小朋友在桥的这边,现在他们需要过桥,但是由于桥很窄,每次只允许不大于两人通过,他们只有一个手电筒,所以每次过桥的两个人需要把手电筒带回来,i号小朋友过桥的时间为T[i],两个人过桥的总时间为二者中时间长者。问所有小朋友过桥的总时间最短是......
  • 回溯算法模板
    回溯算法的模板通常包含递归函数和回溯过程。以下是一个通用的回溯算法模板:defbacktrack(start,path,other_parameters):#满足结束条件时,将当前路径加入结果ifsatisfies_end_condition:result.append(path[:])return#从start开始遍历可......
  • 字符串KMP算法详解
    引入字符串kmp算法用于解决字符串匹配的问题:给出两个字符串\(s_1\)和\(s_2\),若\(s_1\)的区间\([l,r]\)子串与\(s_2\)完全相同,则称\(s_2\)在\(s_1\)中出现了,其出现位置为\(l\)。现在请你求出\(s_2\)在\(s_1\)中所有出现的位置。很显然,我们能够想到暴力求......
  • Tarjan 算法
    part1:离线求\(lca\)将走过的点且未回溯的标记为\(1\),已回溯的标记为\(2\),未访问标记为\(0\)把对于一点\(x\)的询问\(y\)存进相应的\(vector\),当回溯时判断如果询问的点标记为\(2\),则\(lca\)为询问的点\(y\)到根的路径上最早标记为\(1\)的点但直接找复杂度不对......
  • 使用lanczos算法进行的预处理共轭梯度算法(Preconditioned Conjugate Gradients Metho
    构造预处理矩阵M(对称正定)下图来自:预处理共轭梯度法(1)......
  • 代码随想录算法训练营第十七天| 110.平衡二叉树 257. 二叉树的所有路径 404.左叶
    110.平衡二叉树 题目链接:110.平衡二叉树-力扣(LeetCode)思路:判断平衡二叉树,就是判断两个子树的高度差,继而问题转化为了如何求子树的高度——后序遍历(主要卡在了这里)。递归函数返回的是树的高度,同时用-1来表示退出递归(一开始想着用bool型作为返回值,发现函数不好设计)。同时要关......
  • URL编码算法:解决特殊字符在URL中的烦恼
    引言:URL编码算法是一种将URL中的特殊字符转换为特定格式的编码方式。它在网络传输中起到了保护数据安全与完整性的重要作用。本文将深入探讨URL编码算法的优点与缺点,并介绍它在Web开发、网络安全等方面的应用。URL编码解码|一个覆盖广泛主题工具的高效在线平台(amd794.com)h......
  • 【算法】【动态规划】钢条切割
    1 题目来自算法导论的一道经典题目:2 解答动态规划原理虽然已经用动态规划方法解决了上面问题,但是大家可能还跟我一样并不知道什么时候要用到动态规划。总结一下上面的斐波拉契数列和钢条切割问题,发现两个问题都涉及到了重叠子问题,和最优子结构。①最优子结构用动态规......
  • 预处理共轭梯度算法(Preconditioned Conjugate Gradients Method)
    预处理共轭梯度算法(PreconditionedConjugateGradientsMethod)给出百度百科上的解释:预处理共轭梯度法预处理共轭梯度法是。不必预先估计参数等特点。共轭梯度法近年来在求解大型稀疏方程组中取得了较好的成效。理论上普通的共扼梯度法对于对称超正定方程,只要迭代步数达到......
  • leetcode——数组算法——前缀和构建和应用
    leetcode——数组算法——前缀和构建和应用前缀和技巧适用于快速、频繁地计算一个索引区间内的元素之和303.区域和检索-数组不可变比如leetcode303.区域和(检索-数组不可变)题目介绍:给定一个整数数组nums,处理以下类型的多个查询:计算索引left和right(包含left......