支持向量机(SVM)
@(数据挖掘)[svm]
一、线性可分支持向量机和硬间隔最大化
-
名词解释
线性可分:就是指给定一组数据集,其中,,如果存在某个超平面S,,能够将整个数据集的正实例和负实例完全正确地划分到超平面的两侧,则称这个数据集T是线性可分数据集(linearly separable data set);否则就是线性不可分的。
硬间隔最大化,也就是线性可分支持向量机,在线性可分数据集上利用间隔最大化求最优分离超平面的过程 -
首先从点到直线的距离发散到高维易知,能够相对的表示点到超平面的距离,而的符号与类标记的符号是否一致能够表示分类是否正确,所以:
可以用来表示数据集中每个点分类正确性和到分割超平面距离(也可以称为分类置信度大小),也叫超平面关于样本点的函数间隔。
我们可以进一步定义超平面关于整个数据集T的函数间隔为数据集T中所有点到超平面函数间隔的最小值:
但是可以发现,我们同时按比例增大和,超平面仍然是没有变,但是函数间隔却同样按比例变化了,所以我们对分离超平面的法向量加了约束,使得,也就是间隔值不会改变,这时函数间隔变成了几何间隔,记做:
则同理数据集到超平面的几何距离为: - 进一步,我们的线性可分支持向量机就变成了一个约束最优化问题:
即是最大化几何间隔的问题,接着根据函数间隔与几何间隔的关系,我们易得:
然后我们可以看到函数间隔的取值并不改变上述最优化问题的解,所以我们可以取,带入上式,再通过简单变换,将最大化问题变成最小化问题,得到:
而上述两式就是我们最终的线性可分支持向量机学习算法
而满足条件的最优就构成我们的分离超平面:
分类决策函数为:
二、线性可分支持向量机的对偶算法(应用拉格朗日对偶,简化原始优化问题为求解对偶问题)
-
为了上述线性可分支持向量机的最优化问题求解更简单,我们对上述最优化问题应用拉格朗日对偶性,通过求解对偶问题得到原始问题的最优解。也叫线性可分支持向量机的对偶算法。
优点:- 对偶问题的解通常更容易求得
- 自然引入核函数技巧,进而推广到非线性分类问题上
证明过程这里不再说明,主要就是为每个样本引入一个拉格朗日乘子,使得原始问题等价于一个极大极小值问题,然后将其中求极小值部分先用求偏导方法得到的极值关于的表示方法,带入原式,从而去掉求关于的极大值问题,最后变成单纯的求关于的极小值问题。
-
具体算法如下:
- 下式中的为引入的拉格朗日乘子,N为样本数
求得最优解. - 在计算
选择一个, 下式中就是该正乘子对应的样本特征向量和标签 - 从而易知超平面为:
分类决策函数为:
- 下式中的为引入的拉格朗日乘子,N为样本数
需要注意的是,从原始问题到对偶问题的关系中,我们容易看出,训练集中对应的样本点为支持向量
三、线性支持向量机与软间隔最大化
之前我们提到线性可分支持向量机是针对数据集线性可分的情况下得到的,但是实际情况中大部分的数据集是线性不可分的,这时我们就要修改硬间隔最大化为软间隔最大化。
-
线性不可分,其实说白了就是有些样本不能满足函数间隔大于等于1的约束条件,所以自然我们想到放松约束条件,为每个样本引入一个松弛变量,是的约束条件的函数间隔加上松弛变量大于等于1,则约束变成了:
同时,对于松弛变量,我们要在原目标函数加入一个惩罚项,则变为:
这里,成为惩罚参数,可以看出C越大队伍分类惩罚越大,C越小对误分类惩罚变小, 上式其实有两个作用:尽量小即间隔尽量大,但同时又要让误分类的个数尽量少,这是个trade-off问题,由C控制平衡 -
所以这时我们的问题线性支持向量机变成如下凸二次规划问题:
四、线性支持向量机的对偶算法
- 证明过程完全类似于线性可分支持向量机的对偶算法,这里不再赘述。
- 对偶算法为:
- 下式中的为引入的拉格朗日乘子,N为样本数
求得最优解. - 在计算
选择一个, 下式中就是该乘子对应的样本特征向量和标签 - 从而易知超平面为:
分类决策函数为:
- 下式中的为引入的拉格朗日乘子,N为样本数
需要注意的是,由于这里的b的最优解肯定不止一个,所以往往取所有符合条件的样本点上的平均b值
这里的支持向量定义更复杂一点:
- 若,则支持向量刚好在分类间隔边界上
- 若,则分类正确,且支持向量在分类边界与分离超平面之间
- 若,则支持向量刚好在分离超平面上
- 若,则支持向量在分离超平面误分类一侧
五、线性支持向量机的另外一种合理解释
- 合页损失函数:
我们的线性支持向量机可以看成是最小化一个包含和也损失函数的目标函数:
这个损失函数第一项就是一个关于函数间隔的合页函数,只有当函数间隔大于1的时候损失为0,否则就是。
原始线性支持向量机问题为:
而我们很容易证明原始线性支持向量机问题等价于最优化问题
证明过程大致是令,则易知,符合原始约束2,通过分析也易得,此时元最优化问题变成:
取,则
所以得证与原始线性支持向量机问题等价
六、核技巧
- 其实核技巧核心思想就是:当前数据集的输入特征所在高维空间无法被线性超平面分隔,那么我们就通过一个非线性变换,把输入特征空间转换到另一个特征空间,使得我们在原始特征空间必须用超曲面分离的数据集,在转换后可以用对应的超平面完美分隔。
- 而核函数就代表这种非线性变换函数,让我们非线性可分的数据集通过转换可以变成线性可分的,从而简化模型学习,只需要用线性支持向量机就可以对数据进行模型的学习。
- 常用的核函数有多项式核函数、高斯核函数、字符串核函数
注:本文参考李航的《统计学习方法》