支持向量机本身是一个二元分类算法,是对感知机模型的一种扩展,现在svm支持线性分类和非线性分类的分类应用,我们也可以讲svm应用在多元分类领域当中。在不考虑集成学习算法,不考虑特定的数据集的时候,在分类算法中SVM可以说是特别优秀的。
在感知机模型之中,我们可以找到多个分类的超平面将数据分开,并且优化时希望所有的点离超平面尽可能的远,但实际上离超平面较远的点已经被正确分类了,所以这个是没有意义的,反而比较关心那些离超平面很近的点,比较容易被分错,所以说我们让离超平面比较近的点尽可能远离这个超平面,我们的svm模型的分类效果就会不错。
线性可分:在数据集中,如果可以找到一个超平面,将两组数据分开,那么这个数据j集叫线性可分的数据。
线性不可分:数据集中,没法找到一个超平面将两组数据分开,那么这个数据就是线性不可分
分割超平面:将数据集分开的直线叫做分割超平面
间隔:数据点到分割超平面的距离称为间隔
支持向量:离分割超平面最近的那些点叫做支持向量。
2、支持向量机支持处理线性可分数据集、非线性可分数据集。
当训练数据线性可分时,通过硬间隔最大化,学习一个线性分类器,即线性可分支持向量机(也称作硬间隔支持向量机)。
当训练数据近似线性可分时,通过软间隔最大化,学习一个线性分类器,即线性支持向量机(也称为软间隔支持向量机)。
当训练数据不可分时,通过使用核技巧以及软间隔最大化,学习一个非线性分类器,即非线性支持向量机。
知识回顾:
(1)、拉格朗日乘子法
拉格朗日乘子法要求前面的系数不等于零
从上面的公式可以知道,第二个方程求出来的
x
∗
x^*
x∗一定满足上述的限制条件,即h(x*)=0。
(2)kkt条件
kkt条件的约束中一定是有不等值约束。此时相当于
蓝色线代表等高线
即当此时β=0,g(x)<0时,可行解在限制区域内部,当β>0时,可行解在g(x)=0,可行解在g(x)边界。
(这里记住就行了,我们推导支持向量机时,如果β=0,g(x)<0,如果β>0,g(x)=0)
(3)对偶问题
3.1、首先我们看看拉格朗日乘数的函数可以写成哪种形式
3.2、对偶转化:
对偶问题说明,对L先对x求最小值再对β求最大值等价于先对β求最大再对x求最小。但注意这里对偶变换是有条件的,即β=0或者g(x)=0,
(4)距离计算公式:
1、线性可分SVM
1.1 线性可分svm基本思路
2、线性可分svm的基础知识
对于向量x而言,
∣
w
T
x
+
b
∣
|w^Tx+b|
∣wTx+b∣为函数间隔,只能相对的表示x到超平面的距离,但是
3、线性svm推导
在以前学习感知机模型我们知道,我们可以找到多个分割超平面将点分开,并且优化时希望所有的点
离超平面尽可能的远,但实际上离超平面足够远的点基本上已经被分类正确了,所以这个是没有意义的。我们反而比较关心那些离超平面很近的点。这些点比较容易分错。所以我们只需要让离超平面比较近的点尽可能原理超平面,那么模型的分类效果就比较不错。svm其实就是这个思想。
现在我们假设数据线性可分,那么存在一个超平面
w
T
x
+
b
w^Tx+b
wTx+b可以将数据完全分开。那么
w
T
x
+
b
=
1
和
w
T
x
+
b
=
−
1
w^Tx+b=1和w^Tx+b=-1
wTx+b=1和wTx+b=−1被称为支持向量平面。即这两个平面到分割平面的距离分别为1,那么在这两个平面上的点被称为支持向量。那么有
设x为支持向量,则x满足
w
T
x
+
b
=
±
1
w^Tx+b=±1
wTx+b=±1其中,这些点被称为支持向量,
∣
(
w
T
x
+
b
)
∣
∣
∣
w
∣
∣
\frac {|(w^Tx+b)|}{||w||}
∣∣w∣∣∣(wTx+b)∣为支持向量到超平面的几何距离(注意上面的距离公式写错了)
wx+b=0为超平面
wx+b=1和wx+b=-1分别为支持向量平面,其函数距离全部设为1或者-1.
则两个支持向量到超平面的距离之和为:
1
∣
∣
w
∣
∣
\frac{1}{||w||}
∣∣w∣∣1
所以SVM模型就是要求所有的分类点到支持向量的集合间隔经可能的大,在所有点分类正确的情况下,用数学公式表示如下
其中第一个条件表示我们希望,支持向量距离超平面的几何距离尽可能的远
第二个条件表示,我们同时希望所有样本都能分类正确。
要求分类正确,所以限制条件中所有点类别乘以其表达式都是大于等于1的。
求1/||w|| 的最大值等价于求||w||的最大值,等价于
∣
∣
w
∣
∣
2
||w||^2
∣∣w∣∣2的最大值,等价于求
1
2
∣
∣
w
∣
∣
2
{1\over 2}||w||^2
21∣∣w∣∣2
此时将目标函数和约束条件使用KKT条件转换为拉格朗日函数,从而转换为无约束的优化函数
根据kkt对偶互补条件,可以得到如下转换。
即:
Ax对x求偏导,等于A的转置。
将上面求出的结果带入L(w,b,β)这个函数中
注意上述公式,
Σ
β
i
y
i
=
0
但
是
Σ
β
i
y
i
x
i
不
等
于
0
Σβ_iy^{i}=0但是Σβ_iy^{i}x^{i}不等于0
Σβiyi=0但是Σβiyixi不等于0
则公式推导如下:
假设我们已经算出了β,
即我们求出的
β
∗
β^*
β∗中对应的其分量大于0的样本即支持向量。
β
i
(
y
i
∗
(
w
T
x
i
+
b
)
−
1
)
=
0
β_i(y_i*(w^Tx^i+b)-1)=0
βi(yi∗(wTxi+b)−1)=0的原因是为了限制kkt对偶互补条件
上面的公式推导
图中的最后松弛条件约束中表明,即我们的每个求出来β大于0对应的点都是支持向量机上的点。因为支持向量机上的点才会使得
y
i
∗
(
w
T
x
i
+
b
)
−
1
=
0
{y^{i}*(w^{T}x^{i}+b)-1=0}
yi∗(wTxi+b)−1=0,这时β一定大于0。
SVM算法简单流程
可以看出对于支持向量机来说,其构造的分类器只受支持向量的影响。而其他向量并不受影响。
最终的约束方程为:
svm案例:
求解过程:
二、非线性支持向量机与核函数
svm软间隔模型
ζ
{\zeta}
ζ表示松弛因子,松弛因子越大,样本点离分类的超平面越近,表示模型越允许你可以分错更多更多的点,C表示惩罚项,
∑
1
m
ζ
i
{\sum_1^m{\zeta}_i}
∑1mζi表示总的分错代价,我们尽可能的希望这个分错的代价尽可能的少,防止
ζ
{\zeta}
ζ取得过大。C也可以理解为你对分错样本的容忍度有多大,比如我设
∑
1
m
ζ
i
{\sum_1^m{\zeta}_i}
∑1mζi为10,c=1000,这时即时这个点的支持向量离超平面很近(1/2*||w||很小),我也不选这个点(对错误容忍度很低)
C
−
β
i
−
μ
i
>
=
0
C-β_i-\mu_i>=0
C−βi−μi>=0
svm软间隔算法模型算法流程:
其中支持向量的集合也可以把条件限制为
(
0
<
β
i
<
c
)
(0<β_i<c)
(0<βi<c)
软间隔svm总结:
注:C越大,表示对松弛因子的惩罚力度越大,越不允许模型将点分错,被分错的样本越少,准确率就越高,相反C越小,惩罚力度越小,允许分错的点就越多,正确率就越高,但是c不一定越大越好,因为c越大,虽然准确率高但泛化能力差,容易产生过拟合,但是c如果小的,虽然错分率高,但是泛化能力高,不容易产生过拟合(因为本来很多样本就会有噪声),