机器学习(11)——非线性SVM

前言:
上一篇介绍了线性SVM还有一些尾巴没有处理,就是异常值的问题。

软间隔

线性可分SVM中要求数据必须是线性可分的,才可以找到分类的超平面,但是有的时候线性数据集中存在少量的异常点,由于这些异常点导致了数据集不能够线性划分;直白来讲就是:正常数据本身是线性可分的,但是由于存在异常点数据,导致数据集不能够线性可分。
我们需要对上一章的SVM算法模型就行改进,对于每个样本只需要引入松弛因子η,使得样本到超平面的函数距离放松了。当然松弛因子的引入是有成本的,可能会导致模型的分类错误。为此我们需要在松弛因子前面加入惩罚项系数,来约束松弛因子的过大行为。通常情况下,惩罚项系数需要调参得到。
异常值在模型中表示如图所示:

image.png

然后按照上一篇的公式进行计算就可以了,这里就不重新推导了,计算步骤分方法可以参见上一章
软间隔小结
(1)可以解决线性数据中携带异常点的分类模型构建的问题;
(2).通过引入惩罚项系数(松弛因子),可以增加模型的泛化能力,即鲁棒性;
(3)如果给定的惩罚项系数越小,表示在模型构建的时候,就允许存在越多的分类错误的样本,也就表示此时模型的准确率会比较低;如果惩罚项系数越大,表示在模型构建的时候,就越不允许存在分类错误的样本,也就表示此时模型的准确率会比较高。
不管是线性可分SⅥM还是加入惩罚系数后的软间隔线性可分SⅥM其实都要求数据本身是线性可分的,对于完全不可以线性可分的数据,这两种算法模型就没法解决这个问题了。类似于下面如图的数据:

多项式扩展

在线性回归中,我们可以通过多项式扩展将低维度的数据扩展成为高维度的数据,从而可以使用线性回归模型来解决问题。也就是说对于二维空间中不是线性可分的数据,将其映射到高维空间中后,变成了线性可分的数据。

例如:两维线性模型:

表现为一条直线,如下图所示:

对其进行多形式扩展为:

二维可以变为五维,函数可以写作为:

在图像上表示为:

多项式扩展主要的作用是把线性不可分的数据,通过向高维空间做一个映射,使得存在一个超平面对数据进行线性分割。

映射函数

结合多项式回归在处理非线性可分数据时候的作用,在SVM的线性不可分的数据上,如果将数据映射到高维空间中,那么数据就会变成线性可分的,从而就可以使用线性可分SVM模型或者软门隔线性可分SVM模型。

也就是说,对于线性不可分SVM模型来讲,重点在于低维特征数据到高维特征数据之间的映射。

问题:怎么找到这个映射呢?也就是按照什么规则进行映射呢?

例如:对于分布两个圆环上的二维空间向量,只需要加上半径为第三空间的值就可以把二维向量映射到三维空间了,如下图所示:

所以映射函数非常多,只要找到能把数据进行线性分开即可。

定义一个从低维特征空间到高维特征空间的映射函数Φ,非线性可分SVM的优化目标函数我们在前面已经给出:

可以看到的是,只需要将原来的低维空间中的两个向量的点积转换为高维空间中两个向量的点积即可。

思考如下:

这样一来问题就解决了吗?似乎是的:拿到非线性数据,就找一个映射,然后一股脑把原来的数据映射到新空间中,再做线性SVM即可。不过事实上没有这么简单!其实刚才的方法稍想一下就会发现有问题:在最初的例子里做了一个二阶多项式的转换,对一个二维空间做映射,选择的新空间是原始空间的所有一阶和二阶的组合,得到了5个维度;如果原始空间是三维,那么我们会得到9维的新空间;如果原始空间是n维,那么我们会得到一个n(n+3)/2维的新空间;这个数目是呈爆炸性增长的,这给计算带来了非常大的困难,而且如果遇到无穷维的情况,就根本无从计算空间恐怖的内积计算量。

能不能找到一个简单的方法解决上述的额问题呢?下面引出核函数

核函数

核函数在解决线性不可分问题的时候,采取的方式是:使用低维特征空间上的计算来避免在高维特征空间中向量內积的恐怖计算量;也就是说此时SVM模型可以应用在高维特征空间中数据可线性分割的优点,同时又避免了引入这个高维特征。

假设函数Φ是一个从低维特征空间到高维特征空间的一个映射,那么如果存在函数K(X,z),对于任意的低维特征向量X和z,都有

称函数K(x,z)为核函数( kernal function);

常用的核函数有线性核函数、多项式核函数和高斯核函数还有sigmoid核函数,比较常用的有多项式核函数和高斯核函数。其中多项式核函数公式如下:


其中γ 、r、d为超参

下面以一个简单的例子来介绍一下多项式核函数的思想,以便增加对核函数的理解:

设两个向量a,b:

映射到五维空间后得到:

image.png

则他们的内积:

我们发现原本的二维空间积也可以得到类似的式子:

可以发现两者之间非常相似,所以我们只要乘上一个相关的系数,就可以让这两个式子的值相等,这样不就将五维空间的一个内积转换为两维空间的内积的运算。也就是多项式函数中的系数。

高斯核函数公式如下:

image.png

由于高斯函数只有一个参数,且能处理包括多项核函数的空间映射,所以实际应用中还是高斯核函数用的比较多。

高斯核函数分割数据的效果如图所示:

image.png

关于高斯核函数的证明,具体思想就是证明出高斯函数可以表示为两个映射函数的乘积,具体证明可以参照:

https://blog.csdn.net/u010551462/article/details/41748807

核函数的总结:

(1)核函数可以自定义;核函数必须是正定核函数,即Gram矩阵是半正定矩阵;

(2)核函数的价值在于它虽然也是将特征进行从低维到高维的转换,但核函数它事先在低维上进行计算,而将实质上的分类效果表现在了高维上,也就如上文所说的避免了直接在高维空间中的复杂计算

(3).通过核函数,可以将非线性可分的数据转换为线性可分数据

你可能感兴趣的:(机器学习(11)——非线性SVM)