线性可分数据
我们定义一条直线,,将上图的数据分为蓝、红两部分,则f(x)称为决策边界(Decision Boundary),这是非常简单和高效的,这类可以通过一条直线(或高维超平面)分离的我们称为是线性可分的。
但在上图中,我们可以看到多条线都可以将数据分开,我们要取哪条呢?很显然,我们要取离所有的点尽可能远的线,这样做的理由是输入数据中有可能有噪声点的存在,这些数据不应影响分类的准确性,因此,选择尽可能远的线将会对噪声有更好的抗干扰性。因此,SVM需要找到一条直线距离最小的点的最大值的直线(或超平面),如下所示:
为了得到上图的决策边界,我们需要训练数据,但我们并不需要训练所有的数据,只需训练那些接近对立点的就可以了。在上图中,有一个蓝色填充点和两个红色填充点,我们可以称它们为支持向量(supported vector),穿过支持向量的线我们称为支持平面(supported plane),两个支持平面之间的距离称为间隔(margin)
两个支持平面就可以代表两类数据了,例如,蓝色点可以被表示,红色点可以被表示,其中,w代表权重向量,b代表bias(偏差),x为特征向量,故决策边界可以定义为支持平面中间的线,即为,支持向量到决策边界的距离如下表示:,margin为该距离的两倍,我们需要最大化该margin,我们需要定义一个损失函数L,即:
其中ti代表每类的标签,ti∈[-1,1].
非线性可分模型
非线性可分模型通常可以将训练数据(d维)映射到更高维(>d)空间上,使其变为线性可分的模型。
以上的概念可能出现的问题就是分类错误的问题,我们不仅要考虑决策边界的最大margin问题,还要考虑分类错误的问题,有时,发现一个更小的margin但会减少分类错误是有可能的。总之,我们需要去修改我们的模型,例如去找到最大的margin但更小的分类错误,优化公式(loss函数)如下:
C代表误分的点距离其正确区域的距离,如下所示:
当然,计算C时需要计算所有的点,但那些未分类错误的点它们的距离是0.
故新的优化函数(loss)为:
关于C的选取,参考如下规则:
C的值很大代表更小的分类错误但更小的margin,反之,C的值很小代表更大的分类错误但跟大的margin。
说明:
决定分离超平面的只是支持向量起作用,其他点不起作用。
支持向量的点一般很少,所有支持向量由很少的重要样本确定支持向量的点一般很少,所有支持向量由很少的重要样本确定
当训练的超平面中支持向量过多的时候,得到的超平面可能是不好的
机器学习 十大经典算法
参考链接:
https://docs.opencv.org/3.4.1/d4/db1/tutorial_py_svm_basics.html