支持向量机为一个二分类模型,它的基本模型定义为特征空间上的间隔最大的线性分类器。而它的学习策略为最大化分类间隔,最终可转化为凸二次规划问题求解。
SVM可以用于解决二分类或者多分类问题,此处以二分类为例。
SVM的目标是寻找一个最优化超平面在空间中分割两类数据,这个最优化超平面需要满足的条件是:离其最近的点到其的距离最大化,这些点被称为支持向量。
点到超平面距离
SVM对偶问题推导
由简至繁的模型包括:
当训练数据线性可分时,存在无穷个分离超平面可以将两类数据正确分开。
感知机利用误分类最小策略,求得分离超平面,不过此时的解有无穷多个。
线性可分支持向量机利用间隔最大化求得最优分离超平面,这时,解是唯一的。另一方面,此时的分隔超平面所产生的分类结果是最鲁棒的,对未知实例的泛化能力最强。
目的有两个:
SVM有两个目标,第一个是使间隔最大化,第二个是使样本正确分类,由此推出目标函数:
w是超平面参数,目标一是从点到面的距离公式化简来的,具体不展开,目标二就相当于感知机,只是把大于等于0进行缩放变成了大于等于1,为了后面的推导方便。
上式的拉格朗日函数为::
在满足Slater定理的时候,且过程满足KKT条件的时候,原问题转换成对偶问题:
先求内部最小值,对 w w w 和 b b b 求偏导并令其等于 0 可得:
将其代入到上式中去可得到
此时需要求解 α \alpha α,利用SMO(序列最小优化)算法:
SMO算法的基本思路是每次选择两个变量 α i \alpha_i αi和 α j \alpha_j αj,选取的两个变量所对应的样本之间间隔要尽可能大,因为这样更新会带给目标函数值更大的变化。SMO算法之所以高效,是因为仅优化两个参数的过程实际上仅有一个约束条件,其中一个可由另一个表示,这样的二次规划问题具有闭式解。
SVM的变量个数为支持向量的个数。
已知一个训练集,现在有正例 x 1 = ( 3 , 3 ) T x_1=(3, 3)^T x1=(3,3)T , x 2 = ( 4 , 3 ) T x_2=(4, 3)^T x2=(4,3)T ,负例 x 3 = ( 1 , 1 ) T x_3=(1, 1)^T x3=(1,1)T ,试求最大间隔分离超平面。
答:按照上述算法,构建训练集约束最优化问题:
=
其中(对b求导的那一项)
将
代入上式,得:
为了求 L ( λ 1 , λ 2 ) L(\lambda_1, \lambda_2) L(λ1,λ2)最小值,分别对 λ 1 , λ 2 \lambda_1, \lambda_2 λ1,λ2求偏导:
得到在点 ( 3 2 , − 1 ) T (\frac{3}{2}, -1)^T (23,−1)T取极值。但因为该点不符合约束条件,所以最小值应该在边界上。
当 λ 1 = 0 \lambda_1=0 λ1=0 时,在点 ( 0 , 2 13 ) T (0, \frac{2}{13})^T (0,132)T 取最小值 − 2 13 -\frac{2}{13} −132,
当 λ 2 = 0 \lambda_2=0 λ2=0时,在点 ( 1 4 , 0 ) T (\frac{1}{4}, 0)^T (41,0)T 取最小值 − 1 4 -\frac{1}{4} −41,
因此在点 ( 1 4 , 0 ) T (\frac{1}{4}, 0)^T (41,0)T 取最小值,此时 λ 1 = 1 4 \lambda_1=\frac{1}{4} λ1=41 , λ 2 = 0 \lambda_2=0 λ2=0 , λ 3 = 1 4 \lambda_3=\frac{1}{4} λ3=41,相对应的,点 x 1 , x 3 x_1,x_3 x1,x3 为支持向量 。
不管直接在原特征空间,还是在映射的高维空间,我们都假设样本是线性可分的。虽然理论上我们总能找到一个高维映射使数据线性可分,但在实际任务中,寻找一个合适的核函数核很困难。此外,由于数据通常有噪声存在,一味追求数据线性可分可能会使模型陷入过拟合,因此,我们放宽对样本的要求,允许少量样本分类错误。这样的想法就意味着对目标函数的改变,之前推导的目标函数里不允许任何错误,并且让间隔最大,现在给之前的目标函数加上一个误差,就相当于允许原先的目标出错,引入松弛变量 ξ \xi ξ,公式变为:
那么这个松弛变量怎么计算呢,最开始试图用0,1损失去计算,但0,1损失函数并不连续,求最值时求导的时候不好求,所以引入合页损失(hinge loss):
理解起来就是,原先制约条件是保证所有样本分类正确, y i ( w T x i + b ) ≥ 1 , ∀ i y_i(w^Tx_i+b)\ge1, {\forall}i yi(wTxi+b)≥1,∀i ,现在出现错误的时候,一定是这个式子不被满足了,即 y i ( w T x i + b ) < 1 , ∀ i y_i(w^Tx_i+b)<1, {\forall}i yi(wTxi+b)<1,∀i ,衡量一下错了多少呢?因为左边一定小于1,那就跟1比较,因为1是边界,所以用1减去 y i ( w T x i + b ) y_i(w^Tx_i+b) yi(wTxi+b) 来衡量错误了多少,所以目标变为(正确分类的话损失为0,错误的话付出代价):
但这个代价需要一个控制的因子,引入C>0,惩罚参数,即:
可以想象,C越大说明把错误放的越大,说明对错误的容忍度就小,反之亦然。当C无穷大时,就变成一点错误都不能容忍,即变成硬间隔。实际应用时我们要合理选取C,C越小越容易欠拟合,C越大越容易过拟合。
所以软间隔的目标函数为:
其中:
上式的拉格朗日函数为:
在满足Slater定理的时候,且过程满足KKT条件的时候,原问题转换成对偶问题:
先求内部最小值,对 w w w, b b b 和 ξ \xi ξ 求偏导并令其等于 0 可得:
此时需要求解 α \alpha α,同样利用SMO(序列最小优化)算法。
当样本在原始空间线性不可分时,可将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分。而引入这样的映射后,所要求解的对偶问题的求解中,无需求解真正的映射函数,而只需要知道其核函数。核函数的定义:K(x,y)=<ϕ(x),ϕ(y)>,即在特征空间的内积等于它们在原始样本空间中通过核函数 K 计算的结果。一方面数据变成了高维空间中线性可分的数据,另一方面不需要求解具体的映射函数,只需要给定具体的核函数即可,这样使得求解的难度大大降低。
用自己的话说就是,在SVM不论是硬间隔还是软间隔在计算过程中,都有X转置点积X,若X的维度低一点还好算,但当我们想把X从低维映射到高维的时候(让数据变得线性可分时),这一步计算很困难,等于说在计算时,需要先计算把X映射到高维的的ϕ(x),再计算ϕ(x1)和ϕ(x2)的点积,这一步计算起来开销很大,难度也很大,此时引入核函数,这两步的计算便成了一步计算,即只需把两个x带入核函数,计算核函数
个人对核函数的理解:核函数就是一个函数,接收两个变量,这两个变量是在低维空间中的变量,而核函数求的值等于将两个低维空间中的向量映射到高维空间后的内积。
引入核函数目的:把原坐标系里线性不可分的数据用核函数Kernel投影到另一个空间,尽量使得数据在新的空间里线性可分
LR是参数模型,SVM为非参数模型。
LR采用的损失函数为logisticalloss,而SVM采用的是hingeloss。
在学习分类器的时候,SVM只考虑与分类最相关的少数支持向量点。
LR的模型相对简单,在进行大规模线性分类时比较方便。
LR与SVM的区别
相同点:
不同点:
1)本质上是损失函数不同
LR的损失函数是交叉熵:
逻辑回归基于概率理论,假设样本为正样本的概率可以用sigmoid函数来表示,然后通过极大似然估计的方法估计出参数的值。
支持向量机基于几何间隔最大化原理,认为存在最大几何间隔的分类面为最优分类面。
2)两个模型对数据和参数的敏感程度不同
SVM考虑分类边界线附近的样本(决定分类超平面的样本)。在支持向量外添加或者减少任何样本点对分类决策面没有任何影响;
LR受所有数据点的影响。直接依赖于数据分布,每个样本点都会影响决策面的结果。如果训练数据不同类别严重不平衡,则一般需要先对数据做平衡处理,让不同类别的样本尽量平衡。
3)SVM基于距离分类,LR基于概率分类
SVM依赖数据表达的距离测度,所以需要对数据先做normalization;LR不受其影响
4)在解决非线性问题时,支持向量机采用核函数的机制,而LR通常不采用核函数的方法
SVM中只有少数几个代表支持向量的样本参与到分类决策计算,也就是只有少数几个样本需要参与核函数的计算。
LR算法里,每个样本都必须参与分类决策的计算过程,也就是说,假设我们在LR里也运用核函数的原理,那么每个样本都必须参与核运算,这带来的计算复杂度是相当高的,尤其是数据量很大的时候,我们无法承受。所以,在具体应用时,LR很少运用核函数机制。
5)在小规模数据集上,Linear SVM要略好于LR,但差别也不是特别大,而且Linear SVM的计算复杂度受数据量限制,对海量数据LR使用更加广泛。
6)SVM的损失函数自带正则项,而LR必须另外在损失函数之外添加正则项
红框内为正则项。这就是为什么SVM是结构风险最小化算法的原因!!!LR则是经验风险最小化。而LR必须另外在损失函数上添加正则项!!!
当数据的特征提取的较好,所包含的信息量足够大,很多问题是线性可分的那么可以采用线性核。若特征数较少,样本数适中,对于时间不敏感,遇到的问题是线性不可分的时候可以使用高斯核来达到更好的效果。
当样本的特征很多且维数很高时可考虑用SVM的线性核函数。当样本的数量较多,特征较少时,一般手动进行特征的组合再使用SVM的线性核函数。当样本维度不高且数量较少时,且不知道该用什么核函数时一般优先使用高斯核函数,因为高斯核函数为一种局部性较强的核函数,无论对于大样本还是小样本均有较好的性能且相对于多项式核函数有较少的参数。
核函数隐含着一个从低维空间到高维空间的映射,这个映射可以把低维空间中线性不可分的两类点变成线性可分的。
没有,样本之间只要存在差异,也就是说只要不是相同的样本点,一定能在某种程度上对其进行区分。我们无法划分,只是维度太低观察到的信息不够。随着维度的上升,我们的信息量越来越充足,只要是有差异的样本并且找到其差异,一定能够使用该差异来划分的。
不会,就像上一个问题一样,当你在某一维突然获取到了能够划分样本的足够多的信息后,随着维度的上升,我们得到的信息量只会越来越多,而第N维的信息量就足够我们划分了,更多的信息量并不会出现问题中的这种情况。