【ML-9-2】支持向量机--线性不可分与核函数
一、目录
1、目录
2、背景
3、核函数引入
4、核函数介绍
5、SVN小结
二、背景
支持向量机(一)讲到的软间隔最大化只能解决由于异常点而导致的线性不可分问题,而对于本身的数据集就是非线性的问题就无能为力,根据相关理论对于在低维空间线性不可分的问题,一般将其映射到高维空间后都是线性可分的,我们可以将这一理论运用到支持向量机中。
三、核函数的引入
回过头来看我们之前的优化函数:
只需要将优化函数中的內积 xi · xj 转化成 ϕ(xi) · ϕ(xj) 即可解决我们的非线性问题,但与此同时也引入了新的问题我们的数据维度增大后,內积的计算量也增大了,当映射后的维度很高,甚至是达到无穷维之后,求解模型时的计算量也会显著增大,
那么如何来处理这个问题呢?这就需要引入我们的核函数。
四、核函数介绍
我们知道即使在映射到高维后,內积 ϕ(xi) · ϕ(xj) 的值也依然是一个常数,那么是否存在这样一个函数
K( xi · xj ) = ϕ(xi) · ϕ(xj) ,有理论证明当这样的函数是存在的(Mercer定理已证明),我们将其称为核函数。在此引出了支持向量机的第三个亮点:在不需要将样本映射到高维空间,而利用核函数解决非线性分类问题 。梳理如下:
- 核函数可以自定义;核函数必须是正定核函数,即Gram矩阵是半正定矩阵;
- 核函数的价值在于它虽然也是将特征进行从低维到高维的转换,但核函数它事先在低维上进行计算,而将实质上的分类效果表现在了高维上,也就如上文所说的避免了直接在高维空间中的复杂计算;
-
通过核函数,可以将非线性可分的数据转换为线性可分数据;
通过借助核函数就解决了我们的问题,当然不是什么函数都能作为核函数的,已经被证明的核函数并不多,而常用的核函数也就那么几个(scikit-learn常见的):
4.1 线性核函数
线性核函数(Linear Kernel)其实就是我们前两篇的线性可分SVM,表达式为:K(x,z)=x∙z
也就是说,线性可分SVM我们可以和线性不可分SVM归为一类,区别仅仅在于线性可分SVM用的是线性核函数。
4.2 多项式核函数
多项式核函数(Polynomial Kernel)是线性不可分SVM常用的核函数之一,表达式为:
其中γ、r、d属于超参,需要调参定义
4.3 径向基核函数
径向基核函数也称为高斯核函数
其中γ属于超参,要求大于0,需要调参定义;
3.4 Sigmoid核函数(很少用)
其中γ、r属于超参,需要调参定义, 其中 tanh 函数双曲正切函数,也被常用来作神经网络中的激活函数。
根据泰勒展开式,我们知道高阶可导的函数都可以用多项式函数表示,在这里径向基核函数和Sigmoid核函数都是高阶可导的,因此都可以用多项式来表述。换句话说,径向基核函数和Sigmoid核函数都是可以表述高阶多项式的,因此在选择核函数时,径向基核函数和Sigmoid 核函数通常要比多项式核函数表现的要好,因为可以自动的去匹配阶数,而不需要我们去指定多项式核函数的阶数,此外多项式核函数需要调试的参数也比较多,因此通常选择径向基核函数,svc()函数默认也是这个。
五、SVM分类小结
引入了核函数后,我们的SVM算法才算是比较完整了。不再区别是否线性可分。输入是m个样本(x1,y1),(x2,y2),...,(xm,ym),,其中x为n维特征向量。y为二元输出,值为1,或者-1。输出是分离超平面的参数w∗和b∗和分类决策函数。
算法过程如下:
总的来说,在集成算法和神经网络风靡之前,SVM 基本上是最好的分类算法,但即使在今天,它依然占有较高的地位。
SVM 的主要优点有:
1)引入最大间隔,分类精确度高
2)在样本量较小时,也能准确的分类,并且具有不错的泛化能力
3)引入核函数,能轻松的解决非线性问题,避开高维空间的复杂性,直接用此空间的内积函数(既是核函数),再利用在线性可分的情况下的求解方法直接求解对应的高维空间的决策问题
4)能解决高维特征的分类、回归问题,即使特征维度大于样本的数据,也能有很好的表现
SVM 的主要缺点有:
1)在样本量非常大时,核函数中內积的计算,求解拉格朗日乘子α 值的计算都是和样本个数有关的,会导致在求解模型时的计算量过大
2)核函数的选择通常没有明确的指导,有时候难以选择一个合适的核函数,而且像多项式核函数,需要调试的参数也非常多
3)SVM 对缺失数据敏感 (好像很多算法都对缺失值敏感,对于缺失值,要么在特征工程时处理好,要么使用树模型)。
支持向量机的主要应用和研究:
目前支持向量机主要应用在模式识别领域中的文本识别,中文分类,人脸识别等;同时也应用到许多的工程技术和信息过滤等方面.
当前研究的热点主要是对支持向量机中算法的优化,包括解决SVM中二次规划求解问题,对大规模SVM的求解问题,对SVM中QP问题的求解问题等.另外就是如何更好的构造基于SVM的多类分类器,如何提高SVM的归纳能力和分类速度等.如何根据实际问题确定核函数也是一个重要的研究热点.
附件一:核函数举例:
附件二:径向基核函数(高斯核函数)