线性可分支持向量机与软间隔最大化--SVM
### 给定线性可分的数据集
假设输入空间(特征向量)为![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191113084534799-827087946.png),输出空间为![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191113084658469-1161915561.png)。
输入![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191113084628419-1690349867.png)
表示实例的特征向量,对应于输入空间的点;
输出![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191113084720168-395217416.png)
表示示例的类别。
我们说可以通过**间隔最大化**或者等价的求出相应的**凸二次规划问题**得到的**分离超平面**
![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191113145531524-1277316451.png)
以及决策函数:
![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191113145640348-625490035.png)
但是,上述的解决方法对于下面的数据却不是很友好, 例如,下图中黄色的点不满足间隔大于等于1的条件
![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191115123540352-282703492.png)
这样的数据集不是线性可分的, 但是去除少量的异常点之后,剩下的点都是线性可分的, 因此, 我们称这样的数据集是近似线性可分的。
对于近似线性可分的数据集,我们引入了松弛变量
,使得函数间隔加上松弛变量大于等于1。这样就得到了下面的解决方案:
![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191115092333841-1791870743.png)
其中,每个样本点都对应一个松弛变量, C > 0 称为**惩罚参数**。C越大,对误分类的点的惩罚越大。
这个解决方案旨在使得**间隔最大化的同时减少误分类个数**。下图是C对分类的影响,左图是大C, 右图是小C:
![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191115091950272-1659216434.png)
可以证明w是唯一的, 但是b不唯一,而是存在一个区间
### 下面来解决这个问题
首先引入拉格朗日函数(Lagrange Function):
![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191115092625181-1234020238.png)
他的对偶问题(参考拉格朗日对偶性(Lagrange duality))是极大极小问题
, 首先求
。对
求导,解法如下:
![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191115093758117-1708053975.png)
代入得到:
![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191115094815186-717315385.png)
问题转化为:
![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191115095105841-585759787.png)
怎么求最优的w*, b*呢?
我们来看,原问题的KKT条件如下:
![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191115124638317-1342895612.png)
根据KKT条件的性质可以知道(参考[拉格朗日乘子(Lagrange multify)和KKT条件](https://www.cnblogs.com/hichens/p/11863780.html)):
![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119104720538-1512801861.png)
所以可以求得![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191115130601535-2099135497.png):
![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191115130747435-519339109.png)
## 综上, 引入松弛变量后线性支持向量机算法为:
.
![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119103343825-1387843165.png)
*我们引入的松弛变量去哪里了呢?为什么算法中没有了?
其实, 松弛变量
在通过惩罚参数C隐式的作用。
我们可以改变C值,看看改变C哪些变量会随着改变。
增大C,由
知,
就更有可能大于0, 再根据
,松弛变量
取0就更简单, 这样就没有约束作用了。对整个数据集来说相当于是小的约束作用。
反之也可推出约束作用更强。
可以用这张图来解释:
![](https://img2018.cnblogs.com/blog/1612966/201911/1612966-20191119105307199-625643595.png)