前面我们已经讲了感知机,感知机算法的思想就是先随机初始化一个超平面,然后根据分类错误的样本不断调整超平面的参数,直到所有的样本都分类正确。但是感知机存在以下缺陷:
(1) 当存在一个超平面可以将正负样本完全分开时,这样的超平面会有无数条;
(2) 模型的鲁棒性不好:我们找到的超平面是刚好可以把正负样本分开,当我们增加数据量时,这个超平面很可能就无法正确分类了;
(3) 对初始参数敏感:初始化参数不同时,感知机最后得到的分类超平面可能会不同。
为了解决以上问题,支持向量机就出现了。我们需要找到唯一一个分类效果最好的超平面,如何确定分类效果呢?通过分类间隔!分类间隔越大,分类效果越好。我们先来确定一下间隔的概念。
样本:
样本与超平面的函数间隔: ,当样本正确分类时,>0;分类错误时<0。但是函数间隔存在一个问题,当我们将平面修改为时,超平面的位置并未发生改变,但是函数间隔变为了原来的2倍。所以单纯的用函数间隔的大小无法衡量分类效果的好坏。我们需要增加约束条件,如限制x前面的参数,那么我们的超平面公式为,定义函数间隔:。那么我们可以用函数间隔来判断模型的性能了。
线性可分支持向量机
假设我们的数据是线性可分的,既然间隔是用来表示样本到超平面的距离,那么我们的目标当然是让间隔越大越好了:
用函数间隔来表示:
既然我们前面都说了,函数间隔是会随着超平面参数的成倍改变而改变的,那么它的大小对于超平面的选择是没有影响的,我们令,这是我们的目标变为:
将最大化目标函数转为最小化:
引入拉格朗日对偶化,通过求解对偶问题,得到原始问题的解,定义拉格朗日函数:
根据拉格朗日对偶性,原始问题可以转为极大极小问题:
我们先求的极小问题,再求的极大化问题。
根据可得:
, ,得:,
代入目标函数:
后面我们需要做的就是最大化关于的目标函数L了,这里因为一共有n个需要优化的参数,当样本量非常大时,求解就会变得困难,可以用启发式的方法来求解参数,如SMO,具体的我们后面再讲。
假设我们已经求解了,现在我们如何进行分类呢?当拉格朗日函数满足KKT条件时,原始问题解和对偶问题的解一致。KKT条件中有,我们需要做的就是找到一条数据对应的不为0,则有,那么,代入wx+b=0,得到超平面表达式为:
线性支持向量机
当数据为线性可分的情况下,当数据是线性不可分时,不存在一个超平面可以将正负样本完全分开。这时候我们将原来的硬间隔最大化转为软间隔最大化,具体方法就是给每个样本引入一个松弛因子,原来的目标函数变为:
定义拉格朗日函数:
和线性可分支持向量机一样,将极小极大问题转为极大极小问题,并对w,b求导,得:
;
;
解得:,,,代入目标函数得到的结果和线性可分是一样的,不过增加了约束条件:
约束条件是由和合并得到的。
非线性支持向量机
非线性支持向量机是在线性支持向量机基础上引入“核技巧”,达到将数据映射到更高维空间甚至无穷维空间变成线性可分数据,再找到合适的超平面将正负样本分隔开。核技巧主需要定义核函数,不需要明确映射函数。直接计算核函数会比较方便,而通过映射函数来计算更麻烦一些。常用的核函数有:高斯核函数、多项式核函数...
加入核函数的目标函数变为:
其中代表核函数。