支持向量机(Support Vector Machine,SVM)是一种监督学习算法,具体为啥叫这个名字,暂时不做解释,知道被它广泛应用于分类和回归分析即可。SVM特别适合于处理高维空间的数据和复杂的非线性分类问题。
1.线性可分的二分类问题
这是一个典型的样本分类问题,黑色棋子和白色棋子如何分开,从图中看很好理解,使用一个平面分割开即可,然而如何将一个分类问题,建立成一个数学模型并且求出这个平面?
我们如果通过一个超平面将样本分割开,并且定义在上方的一类,在下方的为一类,那么有:
所有在超平面上方的样本都满足:
所有在超平面下方的样本都满足:
进一步 我们使用缩放法使得间隔变大 并且定义在超平面左边的为负样本,在超平面右边的为正样本,我们引入新的变量y取值1和-1来表示。
此时两个类可以描述为:
然后我们将两个类用一个式子表达:
,到此分类问题就成功的被建模为数学问题
如何求解超平面?使得间隔最大
此时的间隔是,详细过程不进行展示。也就说现在的问题转化为了:
在约束条件下的最大值,由于不好求解,我们将问题转化
在约束条件下求的最小值。这是高等数学里典型的多元微分条件极值问题。
我们构造拉格朗日函数:
就可以求出超平面和间隔:
至此 二分类问题就转化成条件极值并且可以求解。
当然,问题还没结束,当存在噪声样本时,训练集的样本集并不能被严格地线性可分,如下:
此时,引入松弛变量 ,如下所示。当 大于1时,等式会变号,也就是说结果会翻转,即对应图中本该错误分类的黑色棋子正确分类。此外 引入惩罚因子C,调节C的值,可以控制误分类的程度C越大时,被误分类的样本点的个数就越小。
2.线性不可分
样本在当前维度的空间对应的向量找不到一个超平面来区分开。处理方法是 对特征向量进行非线性映射,映射到一个更高维的空间,然后再在高维空间中寻找最优超平面,但计算内积时算法复杂度非常高;另一种处理方法为 核方法(kernel trick),用一个核函数来 取代 经映射之后的向量的内积,解决复杂度的问题。
常见的核函数有: