机器学习:SVM
SVM
前言:支持向量机(Support Vector Machine, SVM),作为最富盛名的机器学习算法之一,其本身是一个二元分类算法,为了更好的了解SVM,首先需要一些前提知识,例如:梯度下降、拉格朗日乘子法、KKT条件、感知机等...
背景知识
这部分内容,对SVM涉及到的部分知识先进行大致的摘录,便于后续对SVM更好的理解。
最优化问题
最优化问题一般是指对于某一个函数而言,求解在其指定作用域上的全局最小值问题,一般可分为下述三种情况:
- 无约束条件:一般采用梯度下降法,牛顿法,坐标轴下降法进行求解;
- 等式约束条件:求解方式一般为拉格朗日乘子法;
- 不等式约束条件:求解方式一般为KKT条件。
上述求解出来的解一般都为局部最小值,只有当函数是凸函数的时候,才可以得到全局最小值
等式约束条件
假设,此时需要求解f(x)的全局最小值
\]
f(x)为凸函数
当不存在约束条件时,我们可直接用梯度下降法进行求解,对f(x)进行求导,令其为0即可求出x;
当有了等值约束条件后,就不能直接采用梯度下降法对f(x)进行求导了,因为需要考虑到约束条件:
\]
而拉格朗日乘子法就是当优化函数存在等值约束的情况下的一种最优化求解方式,即把这个等式约束条件直接添加到目标函数中去,这样既考虑到了原目标函数,也考虑了约束条件,如下:
\]
之后采取梯度下降法解出x的值后,再将x的值反代入约束条件中求出α的值后,再将α的值带回求出x即可。
解释:
现存在目标函数f(x)和约束条件h(x)如下:
\[f(x)=x_1+x_2;h(x)=x^2_1+x^2_2−2
\]求在此约束条件下的极小值点\(x^*\),将函数绘制在二维坐标中如下:
可见,在h(x)的限制条件下,f(x)的最小值左下角和圆的交点上,为-2;容易发现,在关键的极小值点处,f(x)的负梯度和h(x)的梯度在同一直线上,如下图左下方critical point的蓝色和红色箭头所示:
由此可知,在极小值点,h(x)和f(x)的梯度在同一线上,有
\[∇_xf(x^*)=\alpha∇_xh(x^*)
\]因此,对于f(x)和h(x)而言,需要满足上述条件,同时使得h(x)=0时的解就为我们需要求解的极小值;
而通过构造拉格朗日函数,令函数的偏导数为0,恰好等价于满足上述式子,同时h(x)=0,原问题转化为对拉格朗日函数求极值问题,这就是拉格朗日乘子法,如下:
\[L(x,\alpha)=f(x)+\sum_{i=1}^{p}{\alpha_ih_i(x)}
\]\[∇_xL(x^*,\alpha^*)=0 <<<<< ∇_xf(x^*)=\alpha^*∇_xh(x^*)
\]\[∇_\alpha(x^*,\alpha^*)=0<<<<<<<h(x^*)=0
\]
不等式约束条件
在结束了等式约束条件后,面对不等式的约束条件,在求解最优化问题时,就需要采用KKT进行解决了。
KKT条件主要应用在当我们的优化函数存在不等值约束的情况下的一种最优化求解方式;KKT条件即满足不等式约束情况下的条件,如下
\]
\]
\]
满足上述三个条件就成了KKT条件,现优化问题转变为如下:
\]
\]
KKT理解
当给出不等式约束g(x)时,存在如下情况:
- 当计算出的f(x)的极小值点x在约束区域g(x)之内时,此时约束条件不起作用,直接计算\(minf(x)\)即可,即令β=0消去约束即可;
- 当f(x)的极小值点x在g(x)=0上时,等价于等式约束问题的求解。
- 当f(x)的极小值点x超出g(x)划定的区域时,可行域的限制起到作用,极小值点必落在可行域的边界上,即g(x)=0,也类似于等值约束,且此时g(x)的梯度和f(x)的负梯度同向(下方有解释),如下
\]
eg:目标函数f(x)和约束条件g(x)如下:
\[f(x)=(x_1−1.1)^2+(x_2+1.1)^2;g(x)=x^2_1+x^2_2−1
\]将f(x)和g(x)在坐标系中进行绘制,如下:
此时f(x)的极值点显然不止g(x)的可行域内,在这种情况下考虑f(x)在约束条件下的极小值如下:
- 对于f(x)而言,需要沿着其负梯度方向走向最小值点,如上图的蓝色箭头;
- 对于g(x)而言,其梯度往外发散,如上图中的红色箭头
- 当在约束条件下,f(x)走到极小值点的时候,g(x)的梯度和f(x)的负梯度同向,如下所示,此时极小值点在边界上,即g(x)等于0。
\[-∇_xf(x)=\beta∇_xg(x)
\]
对偶问题
在含有约束的最优化问题中,往往可通过转化为对偶问题来进行求解,下面通过对偶的关系,对最优函数L进行求解,如下:
\[minf(x),在约束条件g_j(x) \leq 0 ,j=1,2,...,q时
\]\[转换为拉格朗日函数形式:L(x,\beta)=f(x)+\sum_{i=1}^{q}{\beta_ig_i(x)},其中\beta_i \geq 0
\]\[∵\beta_i \geq 0,g_i(x) \leq 0,\beta_ig_i(x) \leq 0
\]\[当\beta_ig_i(x)取最大值,即为0时,有:f(x)=max_\beta L(x,\beta)
\]\[此时有:min_xf(x)=min_xmax_\beta L(x, \beta)
\]\[由对偶问题,可得:min_xmax_\beta L(x, \beta)=max_\beta min_x L(x, \beta)
\]\[原问题转换为:min_xf(x)=max_\beta min_xL(x, \beta)=max_\beta[min_xf(x)+min_x\beta g(x)]
\]\[=max_\beta min_xf(x)+max_\beta min_x\beta g(x)=min_xf(x) + max_\beta min_x\beta g(x)
\]\[∵\beta_i \geq 0,g_i(x) \leq 0,可得min_x\beta g(x)=\begin{cases} 0,\beta 为0或者g(x)为0\\ -∞, \beta > 0且g(x)<0 \end{cases}
\]\[∴ max_\beta min_x\beta g(x)=0
\]\[∴min_xf(x)=max_\beta min_xL(x, \beta);\beta =0 或者g(x)=0
\]
空间中的距离
- 点到平面的距离:
\]
\]
- 从三维空间扩展到多维空间:
\]
\]
感知器
感知器模型是SVM,神经网络,深度学习算法的基础;其思想为:在数据是线性可分的前提下,寻找一条直线(二维平面)或超平面(高维空间),把数据进行二元分割。
感知器模型
- 对于m个样本,每个样本具有n个特征以及一个二元类别的输出y,如下:
\]
- 寻找到一个超平面,即:
\]
\]
- 使得其中一类样本满足:\(θ⋅x > 0\);另一类样本满足:\(θ⋅x < 0\);
- 感知器模型为:
\]
损失函数
- 正确类别:\(y⋅θ⋅x > 0\);错误类别:\(y⋅θ⋅x < 0\)
- 定义损失函数为:使分类错误的所有样本(a条)到超平面的距离之和最小
\]
出于分子分母都包含有θ,存在一定的倍数关系,因此为了简化损失函数,将分母部分固定为1,则Loss定义为:
\[L=-\sum_{i=1}^{a}{y^{(i)}⋅θ⋅x^{(i)}}
\]
- 采用梯度下降对损失函数进行求解,出于分类错误的样本数不是不固定,因此采用SGD或MBGD进行求解,如下
\]
\]
感知器在某种程度上,和Logistics Regression类似
线性可分SVM
支持向量机,SVM,本身为一个二元分类算法,是对感知器模型算法模型的一种扩展;
目前的SVM算法支持线性分类和非线性分类的分类应用,并且也能够直接将SVM应用到回归应用中,同时通过OvR或者OvO的方式,也可将SVM应用在多元分类领域中。
SVM中的概念:
- 线性可分(Linearly Separable):在数据集中,若可以找出一个超平面,将两组数据分开,那么这个数据集为线性可分数据;
- 线性不可分(Linear Inseparable):在数据集中,没法找出一个超平面,能够将两组数据分开,那么这个数据集叫做线性不可分数据;
- 分割超平面(Separating Hyperplane):将数据集分割开来的直线/平面叫做分割超平面;
- 间隔(Margin):数据点到分割超平面的距离称为间隔;
- 支持向量(Support Vector):离分割平面最近的那些点叫做支持向量
线性可分SVM
在感知器模型中,算法是在数据中找出一个划分超平面,让尽可能多的数据分布在这个平面的两侧,从而达到分类的效果;但是在实际的情况中,符合情况的超平面可能是存在多个的,例如下方在二维平面中,就存在多条直线能将两类数据划分开来:
感知器模型在优化的过程中,期望是所有的点都里超平面尽可能的远,但实际上离超平面足够远的点基本都是被正确分类的;
而SVM的思想如下:关注那些离超平面比较近的点,这些点是比较容易被错分的;因此只需要让离超平面比较近的点尽可能的远离这个超平面,那么模型的分类效果应该会比较好。
推导过程:
以下图为例,进行说明:
- 支持向量(图中已标)到超平面的距离为:
\]
\]
注:在SVM中支持向量到超平面的距离一般设置为1
也可不为1,令其为k,如下:
\[w^Tx+b=±k
\]\[通过移项后:\frac{w^T}{k}x+\frac{b}{w^T}=±1
\]\[等价于:{w^*}^Tx+b^*=±1
\]
- 而SVM的模型时让所有点在各自类别的支持向量的两边,同时要求支持向量尽可能的远离这个超平面,如下:
\]
\]
\]
- 由此推出SVM的目标函数/损失函数为:
\]
\]
\]
- 到了KKT条件出马了,此时将目标函数和约束条件转化为拉格朗日函数,从而转化为无约束的优化函数,如下:
\]
- 在引入拉格朗日乘子后,优化目标变成:
\]
- 由拉格朗日对偶化特性,将该优化目标转化为等价的对偶问题进行求解,如下:
\]
- 对于上述优化函数而言,先对求出w和b的极小值,再求解对于拉格朗日乘子β的极大值,如下:
\]
\]
- 将求解出来的w和b(这里b已经没了)代入到优化函数L中,如下
\]
\]
化简过程:
\[L(β)=\frac{1}{2}w^Tw-\sum_{i=1}^{m}{β_iy^{(i)}w^Tx^{(i)}}-\sum_{i=1}^{m}{β_iy^{(i)}b}+\sum_{i=1}^{m}{β_i}
\]\[=-\frac{1}{2}w^Tw-b\sum_{i=1}^{m}{β_iy^{(i)}}+\sum_{i=1}^{m}{β_i}
\]\[=-\frac{1}{2}(\sum_{i=1}^{m}{β_i \cdot y^{(i)}⋅x^{(i)}})^T(\sum_{i=1}^{m}{β_i \cdot y^{(i)}⋅x^{(i)}})+\sum_{i=1}^{m}{β_i}
\]\[=-\frac{1}{2}\sum_{i=1}^{m}{β_i \cdot y^{(i)}⋅(x^{(i)})^T}(\sum_{i=1}^{m}{β_i \cdot y^{(i)}⋅x^{(i)}})+\sum_{i=1}^{m}{β_i}
\]\[=\sum_{i=1}^{m}{β_i}-\frac{1}{2}\sum_{i=1}^{m}{\sum_{j=1}^{m}{β_iβ_jy^{(i)}y^{(j)}(x^{(i)})^T}x^{(j)}}
\]\[s.t:\sum_{i=1}^{m}{β_i \cdot y^{(i)}}=0,β \geq 0,i=1,2,...,m
\]
- 通过化简,最终的优化函数只与β有关,此时,只需极大化优化函数,得出β的值,从而得到w和b的值:
\]
\]
\]
关于β的求解需要使用SMO算法,后文中有介绍
假设存在最优解\(β^*\);根据w、b和β的关系,可以分别计算出对于的w值和b值,如下:
- w的计算:
\[w^*=\sum_{i=1}^{m}{β_i^*y^{(i)}x^{(i)}}
\]- b计算,注意到对于任意的支持向量\((x^s, y^s)\),都有:
\[y^s(w^Tx^s+b)=y^s(\sum_{i=1}^{m}{β_i^*y^{(i)}(x^{(i)})^T}x^s+b)=1
\]\[由于y^s=±1可得:b^*=y^s-\sum_{i=1}^{m}{β_i^*y^{(i)}(x^{(i)})^T}x^s
\]此时若有S个支持向量,则对应能求出S个\(b^*\),对求出的所有值取平均作为最终的结果。
得到支持向量方法:
根据KKT条件中的对偶互补条件,支持向量必须满足如下公式:
\[β_i(y^{(i)}(w^Tx^{(i)}+b)-1)=0
\]\[即当β_i>0时,y^{(i)}(w^Tx^{(i)}+b)-1=0,此时的(x^{(i)},y^{(i)})为支持向量
\]
算法流程
进过上述的推导,对线性SVM的算法流程做下述概况:
对于输入的m个样本数据
\]
\]
- 首先,构造约束优化问题:
\]
\]
- 采用SMO算法求出上式优化中对于的最优解\(β^*\);
- 找出所有的支持向量集合S,
\]
- 更新参数\(w^*\),\(b^*\)的值:
\]
- 构建最终分类器
\]
example:
\[有三个数据点:正例点x_1=(3,3),x_2=(4,3),负例点x_3=(1,1),构造此时的优化条件
\]\[\frac{1}{2}(18β_1^2+25β_2^2+2β_3^2+42β_1β_2-12β_1β_3-14β_2β_3)-β_1-β_2-β_3
\]\[S.t:β_1+β_2-β_3=0,β_i \geq 0,i=1,2,3
\]
总结
- 要求数据必须是线性可分的;
- 纯线性可分的SVM模型对于异常数据的预测可能会不太准;
- 对于线性可分的数据,SVM分类器的效果非常不错
SVM的软间隔模型
线性可分SVM中要求数据必须是线性可分的,才可以找到分类的超平面,但是有的时候线性数据集中存在少量的异常点,由于这些异常点导致了数据集不能够线性划分;直白来讲就是:正常数据本身是线性可分的,但是由于存在异常点数据,导致数据集不能够线性可分,如下图:
如果线性数据中存在异常点导致没法直接使用SVM线性分割模型的时候,我们可以通过引入软间隔的概念来解决这个问题;
硬间隔:上述线性划分SVM中的距离度量就是硬间隔,在线性划分SVM中,要求函数距离一定是大于1的,最大化硬间隔条件为:
\]
软间隔:SVM对于训练集中的每个样本都引入一个松弛因子(ξ),使得函数距离加上松弛因子后的值大于等于1;这表明相对于硬间隔,对样本到超平面的距离要求放松了
\]
因此由上式公式可得,松弛因子(ξ)越大,表示样本点离超平面越越近;如果松弛因子大于1,那么表示允许存在错分的样本;
但是加入松弛因子是有成本的,过大的松弛因子可能会导致模型分类错误,此时最终的目标函更改如下:
\]
其中,C>0,这时C即为一个超参;类似于惩罚因子,C越大表示对错误分类的样本惩罚越大
目标函数
在加入松弛因子后,构造软间隔最大化的约束问题对应的拉格朗日函数如下:
\]
\]
\[对于L中的某项:-\sum_{i=1}^{m}{μ_iξ_i},解释如下,由于约束条件为ξ_i \geq 0,修改为-ξ_i \leq 0,采用拉格朗日乘子法后即为上述结果
\]
将优化目标函数转换为:
\]
优化目标函数同样满足KKT条件,因此使用拉格朗日对偶的特性将优化问题转换为等价的对偶问题:
\]
在转换后,先对目标函数求w,b,ξ的极小值,通过对三个变量求偏导,令导函数为0即可,如下:
\]
\]
\]
将计算的w,b,ξ参数导入到L中,消去w,b,ξ,如下:
\]
\]
\]
最终优化后的目标函数如下:
\]
\]
该式与线性可分的SVM模型一样,不同处在于约束条件不同,如下:
\]
\]
其中C为超参
也需要通过SMO算法对β进行求解
算法流程
对于输入的m个样本数据
\]
\]
- 首先,选择一个惩罚系数C,构造约束优化问题:
\]
\]
- 采用SMO算法求出上式优化中对于的最优解\(β^*\);
- 找出所有的支持向量集合S,
\]
在软件间隔中对于支持向量S的计算,以下图为例:
\[对于每个样本(x_i,y_i)都引入了松弛变量ξ_i,因此对于第i个点到支持向量的距离为:\frac{ξ_i}{||w||_2}
\]\[根据软件间隔中的KKT条件的对偶互补条件:β_i(y^{(i)}(w^{(T)}x^{(i)}+b)-1+ξ_i)=0
\]\[1.若β=0,那么y^{(i)}(w^{(T)}x^{(i)}+b)-1 \geq 0,即样本在间隔边界上或已经被正确分类,如上图中所有远离间隔边界的点
\]\[2.若0 < β_i < C,那么ξ_i=0,y^{(i)}(w^{(T)}x^{(i)}+b)-1 = 0,即点在间隔边界上
\]\[3.若β_i = C,说明此时是一个比较异常的点,需检查此时的ξ_i
\]\[3.1若0≤ξ_i≤1,那么点被正确分类,但是却在超平面和自己类别的间隔边界之间,如上图中的样本2和4.
\]\[3.2如果ξ_i=1,那么点在分离超平面上,无法被正确分类
\]\[3.3如果ξ_i>1,那么点在超平面的另一侧,也就是说,这个点不能被正常分类,如上图中的样本1和3.
\]
- 更新参数\(w^*\),\(b^*\)的值:
\]
- 构建最终分类器
\]
SVM的软件间隔模型总结:
- 可以解决数据中存在的异常点,而无法构建分类模型问题;
- 通过引入惩罚项系数C(松弛因子ξ),可以增加模型的泛化能力,即鲁棒性;
- 若给定的惩罚项系数C越小,表示在模型构建中,允许存在越多的分错的样本,此时模型的准确率较低;反之就越高。
非线性可分SVM
上述线性可分SVM与软件间隔SVM都需要数据是线性可分的,对于非线性的数据,上述两种模型无法解决。
多项式回顾
在线性回归中,可以通过多项式扩展,将低纬度的数据扩展成为高纬度的数据,从而继续使用线性回归来解决非线性的数据,即:对于在二维数据中不是线性可分的数据,将其映射到高维空间中后,变成了线性可分的数据。
应用于SVM中时,也可将低维数据映射到高维空间中,那么数据也会变成线性可分的,此时就可以用线性可分SVM或软间隔线性可分SVM模型。
优化函数
定义一个从低维特征到高维特征空间的映射函数Φ,非线性可分SVM的优化目标函数如下:
\]
\]
上式可以看出,只需将原来的低维空间中的两个向量的点积转换为高维空间中两个向量的点积即可。
问题:
从低维空间转换到高维空间,将导致计算量的爆炸。
核函数
为解决上述空间映射所带来的巨大的计算量,引出核函数:
假设函数Φ是一个从低维特征空间到高维特征空间的一个映射,那么若存在函数对于任意的低维特征向量x和z,有如下关系:
\]
则,称函数K(x,z)为核函数
核函数在解决线性不可分问题的时候,采取的方式:
使用低维特征空间上的计算来避免在高维特征空间中向量内积的恐怖计算量;即此时的SVM模型可以应用在高维特征空间中数据可分的优点,同时有避免了引入高维特征空间的大计算量;
eg:
\[设有两个向量x_1=(μ_1,μ_2)^T和x_2=(η_1,η_2)^T
\]\[进行二阶多项式扩展后映射到5维空间:[μ_1,μ_2,μ_1^2,μ_2^2,μ_1μ_2]^T;[η_1,η_2,η_1^2,η_2^2,η_1η_2]^T
\]\[映射后的内积(点乘):Φ(x_1) \cdot Φ(x_2)=μ_1η_1+μ_2η_2+μ_1^2η_1^2+μ_2^2η_2^2+μ_1μ_2η_1η_2
\]\[同时发现有:(x_1 \cdot x_2+1)^2=[(μ_1η_1+μ_2η_2)+1]^2=2μ_1η_1+2μ_2η_2+μ_1^2η_1^2+μ_2^2η_2^2+2μ_1μ_2η_1η_2+1
\]发现两者非常相似,因此只要乘上一个相关系数,就可以让这两个式子相等,那么就等价于将5维空间中的一个内积转换为2维空间的内积运算(核函数的作用)
不同的核函数:
- 线性核函数(Linear Kernel):
\]
- 多项式核函数(Polynomial Kernel):其中γ,r,d为超参
\]
- 高斯核函数(Gaussian Kernel):其中γ需要大于0为超参
\]
\[上式可写成:K(x,z)=e^{-\frac{||x-z||_2^2}{2σ^2}},σ为方差
\]\[令\frac{1}{2σ^2}=γ即可,γ > 0
\]*高斯核函数证明:
\[K(x,z)=e^{-γ||x-z||_2^2}=e^{-γ||x||_2^2}e^{-γ||z||_2^2}e^{2γx \cdot z}
\]\[令x \cdot z=0处对上式做Taylor展开:
\]\[原式=e^{-γ||x||_2^2}e^{-γ||z||_2^2}(\sum_{i=0}^{+∞}{\frac{(2γx \cdot z)^i}{i !}})
\]\[=\sum_{i=0}^{+∞}{e^{-γ||x||_2^2}e^{-γ||z||_2^2}\frac{(2γx \cdot z)^i}{i !}}
\]由于高斯核函数对任意样本都成立,故此处先令z=x
\[原式=\sum_{i=0}^{+∞}{e^{-γ||x||_2^2}e^{-γ||z||_2^2} \sqrt{\frac{(2γ)^i}{i!}}\sqrt{\frac{(2γ)^i}{i!}}||x||_2^i||z||_2^i}
\]\[=Φ(x)Φ(z)
\]\[Φ(x)=e^{-γ||x||_2^2}\cdot (1, \sqrt{\frac{(2γ)^1}{1!}}||x||_2^1, \sqrt{\frac{(2γ)^2}{2!}}||x||_2^2,...)
\]
- *Sigmoid核函数:其中γ,r为超参
\]
核函数总结
核函数可自定义(一般只需要用高斯核函数即可)
核函数必须是正定的,即Gram矩阵为半正定矩阵
\[Gram = \left\{ \begin{matrix} K(x_1,x_1) & K(x_1,x_2) & \cdots & K(x_1,x_m)\\ K(x_2,x_1) & K(x_2,x_2) & \cdots & K(x_2,x_m) \\ \vdots & \vdots & \ddots & \vdots \\ K(x_m,x_1) & K(x_m,x_2) & \cdots & K(x_m,x_m) \end{matrix} \right\}
\]核函数的价值在于:在低维空间上进行运算,而体现出高维空间的分类效果;
通过核函数,将非线性的数据转换为线性可分的数据。
SMO
序列最小优化算法(Sequential minimal optimization),一种用于解决SVM训练过程中产生的优化问题的算法。
SVM的优化函数
优化函数,如下:
\]
\]
由上述核函数内容可得:
\[令:K(x^{(i)},x^{(j)})=Φ((x^{(i)})^T)Φ(x^{(j)})
\]
当求出β的最优解后,根据KKT条件,可计算出w和b的最优解,如下:
\]
进而得到超平面如下:
\]
所求的解需要满足KKT条件的对偶互补条件:
\]
- 由上述式子,可推出:
\]
\]
\]
\]
即最终找出的分割超平面必须满足上述的条件,且有相应的初始的限制条件
SMO思想
目标:求β值;
由于目前有很多个β值,我们在可以选择两个β值,将剩余的β值固定,而只对这两个β值进行优化;那么此时多变量优化问题就转化为两变量优化问题了
- 令\(β_1,β_2\)为变量,其余的β为常量,优化函数为:
\]
\]
\]
- 将\(β_1\)用\(β_2\)进行表示后,代入优化函数中,化简,如下:
\]
\[为了简化式子,令:v_j=\sum_{i=3}^{m}{y^{(i)}β_iK_{ij}}
\]
\]
- 对于上式,对\(β_2\)求偏导,令偏导为0,可以求得在没有限制条件的β的极小值,如下:
\]
\]
\]
\]
\]
\[其中,new代表新的值,old代表原先值,unt代表为加上约束条件
\]\[E_i = g(x^{(i)})-y^{(i)}
\]
考虑到β取值的限定范围,如下
\[L \leq β_2^{new} \leq H
\]- 当\(y_1=y_2\)时,\(β_1+β_2=k\),可得
\[\begin{cases} 0 \leq k-β_2^{new} \leq C \\ 0 \leq β_2^{new} \leq C \end{cases}
\]\[可推:\begin{cases} L=max(0, β_2^{old} + β_1^{old} - C) \\ H=min(C, β_2^{old} + β_1^{old})\end{cases}
\]- 当\(y_1 \ neq y_2\)时,\(β_1-β_2=k\),可得:
\[\begin{cases} 0 \leq k+β_2^{new} \leq C \\ 0 \leq β_2^{new} \leq C \end{cases}
\]\[可推:\begin{cases} L=max(0, β_2^{old} - β_1^{old}) \\ H=min(C, β_2^{old} - β_1^{old})\end{cases}
\]根据β取值限制范围以及函数W的β最优解,得到迭代过程中的最优解为:
\]
- 然后根据\(β_1和β_2\)的关系,得出\(β_1\)的值:
\]
\]
SMO初始值选择
关于变量的选择,参考:
每次进行优化的两个分量应该是违反g(x)目标条件比较多的,如下:
\]
第一个变量β的选择
- 选择训练集上违反KKT条件最严重的的样本点;
- 一般情况下,先选择0<β<C的点,即支持向量,只有当所有的支持向量都满足KKT条件的时候,才会选择其他的样本点;
第二个变量β的选择
在选择第一个变量\(β_1\)后,进行第二个变量\(β_2\)的选择。
\(β_2\)的选择标准是:让\(|E_1-E_2|\)有足够大的变化
\[β_2^{new,unt}=β_2^{old}+\frac{y^{(2)}(E_1-E_2)}{K_{11}+K_{22}-2K_{12}}
\]由于在\(β_1\)确定后,\(E_1\)已经确定,从上式可知只需要\(|E_1-E_2|\)足够大,参数就相应的有更大的变化
参数更新
在每次完成两个变量β的优化更新后,需要重新计算阈值b和差值\(E_i\),
\]
化简:
\]
\]
\]
同样,当\(β_2\)的取值为0<β<C时,也可得到
\]
最终的b为:
\]
当更新b后,就可得到差值:
\]
SMO算法总结
对于输入的m个样本数据
\]
- 取初始值\(β^0=0, k=0\);
- 选择需要进行更新的两个变量:\(β_1^k, β_2^k\),计算出新的\(β_2^{new, unt}\)
\]
- 按照下列式子求出具体的\(β_2^{k+1}\)
\]
- 按照\(β_1^{k}和β_2^{k}\)的关系,计算\(β_1^{k+1}\)的值:
\]
- 按照公式计算\(b^{k+1}\)和\(E_i\)的值:
\]
\]
- 检测函数\(y^{(i)} \times E_i\)的绝对值是否在精度范围内,并且求解出来的β解满足KKT相关的约束条件;
- 那么此时循环结束,返回此时β的解即可,否则继续迭代计算\(β_2^{new,unt}\)的值
SVR
参考:
SVM也可用于回归中,在SVM的分类模型(SVC)中,目标函数和限制条件如下:
\]
\]
\]
而在SVR中,目的是为了尽量拟合一个线性模型,\(y=w^Tx + b\),此时定义一个常量ϵ>0,对于任意一点(x,y),若有\(|y - w^Tx + b| \leq ϵ\),那么可以认为没有损失,从而得到目标函数和限制条件如下:
\]
\]
如下图所示:
蓝色带条中都是没有损失的,在外面的点是有损失的点,损失大小为红色线的长度
\[SVM回归模型的损失度量如下:err(x^{(i)},y^{(i)})=\begin{cases} 0,|y - w^Tx - b| \leq ϵ\\ |y - w^Tx - b| - ϵ, |y - w^Tx - b| > ϵ \end{cases}
\]
此时也可加入松弛因子ξ,加入后目标函数和限制条件修改为:
\]
\]
\]
构造拉格朗日函数,将目标函数转换为无约束的形式:
\]
\]
\]
采用拉格朗日对偶的特性,如下:
\]
\]
对w,b,ξ求偏导,令导函数为0,来获取其极小值:
\]
\]
\]
\]
计算出后,将w,b,ξ代入到优化的目标函数L中,最终化简结果:
\]
\]
\]
对于β的求解,同样可以通过SMO算计进行求解
实际应用
- 00_1梯度下降:一维和二维图像
- 00_2梯度下降:求解最优解
- 00_3梯度下降:拉格乘子法
- 01_案例一:鸢尾花数据SVM分类
- 02_案例二:鸢尾花数据不同分类器效果比较
- 03_案例三:不同SVM核函数效果比较
- 04_案例四:不同SVM惩罚参数C值不同效果比较
- 05_案例五:异常值检测(OneClassSVM)
- 06_案例六:SVM多目标属性分类问题
- 07_综合案例一:手写数字识别
- 08_综合案例二:自定义SVM内部核函数
- 09_综合案例三:使用SVM预测波士顿房价
- 10_综合案例四:分类算法比较
机器学习:SVM的更多相关文章
- 文本分类学习 (五) 机器学习SVM的前奏-特征提取(卡方检验续集)
前言: 上一篇比较详细的介绍了卡方检验和卡方分布.这篇我们就实际操刀,找到一些训练集,正所谓纸上得来终觉浅,绝知此事要躬行.然而我在躬行的时候,发现了卡方检验对于文本分类来说应该把公式再变形一般,那样 ...
- 机器学习——SVM详解(标准形式,对偶形式,Kernel及Soft Margin)
(写在前面:机器学习入行快2年了,多多少少用过一些算法,但由于敲公式太过浪费时间,所以一直搁置了开一个机器学习系列的博客.但是现在毕竟是电子化的时代,也不可能每时每刻都带着自己的记事本.如果可以掏出手 ...
- 程序员训练机器学习 SVM算法分享
http://www.csdn.net/article/2012-12-28/2813275-Support-Vector-Machine 摘要:支持向量机(SVM)已经成为一种非常受欢迎的算法.本文 ...
- [机器学习]SVM原理
SVM是机器学习中神一般的存在,虽然自深度学习以来有被拉下神坛的趋势,但不得不说SVM在这个领域有着举足轻重的地位.本文从Hard SVM 到 Dual Hard SVM再引进Kernel Trick ...
- [机器学习] SVM——Hinge与Kernel
Support Vector Machine [学习.内化]--讲出来才是真的听懂了,分享在这里也给后面的小伙伴点帮助. learn from: https://www.youtube.com/wat ...
- 机器学习--------SVM
#SVM的使用 (结合具体代码说明,代码参考邹博老师的代码) 1.使用numpy中的loadtxt读入数据文件 data:鸢尾花数据 5.1,3.5,1.4,0.2,Iris-setosa 4.9,3 ...
- 小刘的机器学习---SVM
前言: 这是一篇记录小刘学习机器学习过程的随笔. 正文: 支持向量机(SVM)是一组用于分类, 回归和异常值检测的监督学习方法. 在分类问题中,SVM就是要找到一个同时离各个类别尽可能远的决策边界即最 ...
- 机器学习—SVM
一.原理部分: 依然是图片~ 二.sklearn实现: import pandas as pd import numpy as np import matplotlib.pyplot as plt i ...
- 机器学习——SVM讲解
支持向量机(Support Vector Machine) SVM是一类按监督学习方式对数据进行二元分类的广义线性分类器,决策边界是对学习样本求解的最大边距超平面.只需要知道,SVM是一个有监督的分类 ...
- 机器学习——SVM
整理自: https://blog.csdn.net/woaidapaopao/article/details/77806273?locationnum=9&fps=1 带核的SVM为什么能分 ...
随机推荐
- Python - 头部解析
背景 写 python 的时候,基本都要加两个头部注释,这到底有啥用呢? #!usr/bin/env python # -*- coding:utf-8 _*- print("hello-w ...
- Linux内核学习之2号进程kthreadd
Author : Toney Email : vip_13031075266@163.com Date : 2020.12.04 Copyright : ...
- LinkedList 添加元素源码解析
jdk版本:1.8 LinkedList添加元素有两个方法:add(E e)和add(int index,E e). add(E e) /** * Appends the specified elem ...
- 433MHZ SPI模块使用心得
最近使用了433MHZ的模块进行了一个通讯项目,选用的是SX1208模块,对接了RTOS和Linux两个操作系统,使用心得如下: 1. 首先要拿来datasheet看一遍,通揽一下它的功能.可以得到一 ...
- Dede后台广告管理模块增加图片上传功能插件
用户问题:网站广告后台管理非常方便,但是织梦后台的广告管理模块,发布广告时图片没有上传选项,只能用URL地址,很不方便,那么织梦帮就教大家一个方法实现广告图片后台直接上传,非常方便.先给大家看下修改后 ...
- Spring Cloud Hystrix 学习(三)请求合并
什么是请求合并?我们先来看两张图: 上方的两张图中,第二张可以看出服务端只执行了一次响应,这就是请求合并.客户端新增的请求合并模块,内部存在一个等待的时间窗口,将一定时间段内满足条件的请求进行合并,以 ...
- win10环境charles抓包unknow问题
win10环境,charles已经安装了证书,但是抓包的时候还是unknow,让人头疼. 1.确保证书安装成功. 2.检查charles设置是否正确. 进入Charles - > Proxy - ...
- YbtOJ#853-平面标记【整体二分,凸壳】
正题 题目链接:http://www.ybtoj.com.cn/contest/119/problem/3 题目大意 给出\(n\)个点\((x_i,y_i)\),\(m\)次给出\((k_i,a_i ...
- RabbitMQ 3.9.7 镜像模式集群的搭建
1. 概述 老话说的好:做人脚踏实地,一步一个脚印,便定能战胜一切困难,最终取得成功!!! 言归正传,之前我们聊了 RabbitMQ 单点服务的安装,今天我们来聊聊 RabbitMQ 3.9.7 镜像 ...
- SpringBoot碰到的疑问或问题
1.@ResponseBody 和 @RequestBody 的区别 @ResponseBody是作用在方法上的,@ResponseBody 表示该方法的返回结果直接写入 HTTP response ...