非线性支持向量机
非线性数据
在现实任务中,我们得到的数据一般都不是线性可分的,这时线性可分支持向 量机就不适用了。非线性数据意味着不存在这样的超平面,使训练点中的正类 和负类样本能够完全分别位于该超平面的两侧。
Kernel核函数方法
核方法的主要思想: 基于这样一个假设:“在低维空间中不能线性分割的点集,通过转化为高维空间中的点集 时,很有可能变为线性可分的”。
具体来说,在线性不可分的情况下,支持向量机首先在低维空间中完成计算,然后通过核 函数将输入空间映射到高维特征空间,最终在高维特征空间中构造出最优的分离超平面, 从而把平面上本身不好分的非线性数据分开。
SVM
处理非线性数据的一般方法:
选择一个非线性特征集,并将数据改写成新的表达方式,这等价于应用一个固定的非线性 映射,将数据映射到高维特征空间,在高维特征空间中使用线性分类器。
其中,ϕ ( ) 表示从输入空间到某个高维特征空间的映射。
这意味着线性分类方法求解非线性分类问题一般分为两步:
- 使用一个变换将原空间的数据映射到新空间。
- 在新空间里使用线性分类学习方法从训练数据中学习分类模型。
映射函数相当于把原来的分类函数进行了映射:
- 使用映射函数方法的再思考:
- 两种方法的区别:
一个是映射到高维空间中,然后再根据内积的公式计算:
而另一个则直接在原始空间中计算,而不需要显式地写出映射后的结果:
现在我们回忆下前面提到的维度爆炸,在前一种方法已经无法计算的情况下,后一种方法却 依旧能处理,甚至无穷维度也没有问题。
我们把这里的计算两个向量在隐式映射过后在空间中的内积的函数叫做核函数,例如,前面 的例子中,核函数为,例如,前面的例子中,核函数为:
核函数能够简化映射空间中的内积运算。
- 核函数的定义:
设X 是输入空间,H 为特征空间,,如果存在一个从X 到H 的映射:ϕ ( x ) : X → H 。使得对所有x , z ∈ X ,函数K ( x , z )满足条件:k ( x , z ) = ϕ ( x ) ⋅ ϕ ( z ) 。则称k ( x , z ) k(x,z)k(x,z)为核函数,ϕ ( x )为映射函数,式中ϕ ( x ) ⋅ ϕ ( z )为内积。
- 核技巧:
在核函数k ( x , z )给定的条件下,可以利用求解线性分类问题的方法求解非线性分类问题的支持向量机;学习是隐式地在特征空间进行,不需要显示地定义特征空间和映射函数,这样的技巧称为核技巧。
使用核技巧,解决了计算的复杂性问题,避开了直接在高维空间中进行计算,,而结果却是等价的。
- 针对任意一个映射,手工设计出相应的核函数是很困难的,所以我们通常是在 常用的核函数中,按照问题和数据特点,进行选择:
多项式核函数:
p ≥ 1 为多项式的次数。
高斯核函数:
δ ≥ 1 为高斯核的带宽。在实际应用中,采用较多的是高斯核函数,这个核可以将原始空间映射为高维空间(也就是我们前面提到的空间映射)。
- 高斯核函数中参数σ 对模型性能的影响。
如果σ 选得过大的话,高次特征上的权重实际上衰减的非常快,所以实际上相当于一个低维的子空间;
性质1. 当σ 趋于无穷时,SVM的判别函数为一常函数,其推广能力或对新样本的正确分类能力为零,即把所有样本点判别为同一类。
如果σ \sigmaσ选得过小的话,则可以将任意的数据映射为线性可分的–当然这并不完全是好事,因为随着而来的是非常严重的过拟合问题;
性质 2. 若RBF
核中尺度参数σ趋于0,则拉格朗日 乘子向量的所有分量都大于0,即全部样本点都是 支持向量。
总的来说,通过调控参数σ ,高斯核实际上具有相当高的灵活性,也是使用最广泛的核函数之一。
线性核函数:
核函数的本质
通常我们遇到的数据都是线性不可分的,我们需要将其映射到高维空间,但是这 可能带来维度灾难;这时候,核函数便是一种很好的解决方法,核函数的价值就 在于它虽然也是将特征进行从低维到高维的映射,但是核函数的巧妙之处在于它 事先在低维上进行计算,而将实质上的分类效果表现在高维上,这样做也就避免 了在高维空间中的复杂运算。
基于Kernel
的SVM
:假设现在你是一个农场主,圈养了一批羊,但为了预防狼群 袭击羊群,你需要搭建一个篱笆来把羊和狼分开,但是篱笆应该建在哪儿呢?
基于核函数的非线性支持向量机
最小二乘支持向量机
LSSVM概述
LSSVM提出的背景
- 支持向量机是针对小样本问题,基于结构风险最小化,较好地解决了以往机器学习模型中的 过学习、非线性、维数灾难以及局部极小值等问题,具有较好的泛化能力;
- 然而,该方法在大规模训练样本时,存在训练速度慢、稳定性差等缺陷,从而制约了其使用 范围(学习过程中需要求解二次规划问题);
- 因此,1999年,
Suykens
和Vandewalle
等人在SVM
的基础上提出LSSVM
(Least Square Support Vector Machine, LSSVM),该算法的计算复杂度大为减少,使得训练速度得到提高。 - 最小二乘支持向量机(
LSSVM
)是标准支持向量机的一种扩展,该算法将支持 向量机的求解从二次规划问题转化为线性方程组。 - 它与支持向量机的不同之处在于它把不等式约束改成等式约束,并把经验风险 由偏差的一次方改为二次方。
分类问题回顾:
LSSVM
分类算法:
(1) 构建LSSVM
的分类优化问题的目标函数:
(2) 相比于SVM
,其约束条件有所不同,它将SVM
的不等式约束改为等式约束:
(3) 构造拉格朗日函数:
(4) 根据KKT
条件,取最优值时应该满足对各变量的偏导数为0
的约束条件:
(5) 在上式的线性方程组系统中:
回归问题回顾
给定训练数据集
回归(Regression
)支持向量机的目标是构造如下形式的预测函数,使得f ( x ) 能够与样本的实际 函数值近似
最小二乘支持向量回归算法LSSVR
(1) 构建LSSVR
的优化问题的目标函数:
(2) 相比于SVM
,其约束条件有所不同,它将SVM
的不等式约束改为等式约束:
(3) 构造拉格朗日函数
(4)根据KKT
条件,取最优值时应该满足对各变量的偏导数为0
的约束条件:
(5) 在上式的线性方程组系统中:
在Python中使用支持向量机分类算法
在Scikit-Learn
库中,支持向量机算法族都在sklearn.svm
包中,当前版本一共有8
个类。看起来也与其他机器学习算法族一样似乎有不少变种,其实并不太一样,支持向量机算法总的来说就一种,只是在核函数上有不同的选择,以及用于解决不同的问题,包括分类问题、回归问题和无监督学习问题中的异常点检测,具体为:
LinearSVC
类:基于线性核函数的支持向量机分类算法。LinearSVR
类:基于线性核函数的支持向量机回归算法。SVC
类:可选择多种核函数的支持向量机分类算法,通过“kernel”
参数可以传入“linear”
选择线性函数、传入“polynomial”
选择多项式函数、传入“rbf”
选择径向基函数、传入“sigmoid”
选择Logistics
函数作为核函数,以及设置“precomputed”
使用预设核值矩阵。默认以径向基函数作为核函数。SVR
类:可选择多种核函数的支持向量机回归算法。NuSVC
类:与SVC
类非常相似,但可通过参数“nu”
设置支持向量的数量。NuSVR
类:与SVR
类非常相似,但可通过参数“nu”
设置支持向量的数量。OneClassSVM
类:用支持向量机算法解决无监督学习的异常点检测问题。
from sklearn.datasets import load_iris from sklearn.svm import SVC # 载入鸢尾花数据集 X, y = load_iris(return_X_y=True) clf = SVC().fit(X, y) # 训练模型 print(clf.predict(X)) # 分类预测 print(clf.score(X, y))
参考
【1】本文主要参考东北大学大数据科学课程SVM小节。