2021人工智能领域新星创作者,带你从入门到精通,该博客每天更新,逐渐完善机器学习各个知识体系的文章,帮助大家更高效学习。
一、概述
我们之前讲解的硬间隔支持向量机或者像一些感知机算法,它们都是适用于线性可分的数据的,如果面对不可分的数据SVM有引出了软间隔的概念,可以容忍犯一些错误,降低一些标准,来达到对噪声点的容错,但要求还是大部分数据是线性可分的,如果我们的数据分布十分不规范,比如:
像这种数据显然用简单的线性超平面的不可区分的,如果我们采用曲线的方式就会很容易的区分
其实这种曲线的方式就是引入了核函数进而转成曲线的,具体怎么回事下面会说。
如果我们此时的空间维度线性不可分,我们能不能将其换个空间维度然后再使用线性分割呢?其实这是可以的,研究证明我们任何不可分的数据都可以将其转化为更高的维度将其变得线性可分,我们举个例子:
就是这么简单的例子,我们的线性分类器都没有办法解决,找不到任何一条直线可以完全的区分所有样本点,假设现在我们将每个样本映射到高维空间,此时就不一样了
我们发现将原始的二维数据映射到了三维空间,这样数据就可以找到一个黑色平面进行区分了,我们接下来的思想就是这样,如果原特征空间不可区分,那么我们就想办法将他们映射到高维空间,然后在高纬度空间线性可分,进而执行之前的算法操作。
二、核函数
前面叙述这么多,到底什么是核函数呢?
核函数其实来说既是一种函数,也不是一种函数,它所表达的是两个向量的内积:
K ( x , z ) = < ϕ ( x ) , ϕ ( z ) > = x T z = x ⋅ z K(x,z)=<\phi (x),\phi(z)>=x^Tz=x·zK(x,z)=<ϕ(x),ϕ(z)>=xTz=x⋅z
这就是核函数的表达形式,上面我们说解决线性不可分的方法就是将低纬数据映射到高维数据,那么它和核函数有什么关系呢?
既然我们将数据映射到了高维空间,那么我们之后的操作就对应这在高纬度空间中的操作,比如乘法、加法、数乘等,但是前提是我们需要映射函数 ϕ \phiϕ 是什么,在实际中,我们一般不采用他,如果这样,首先我们面临的就是先找到这样的一个映射函数来将低维空间映射到高维空间,这会很难,其次如果求出了映射函数,我们还需要将低纬度空间的数据带入该函数,求得映射后的空间向量,然后再进行相关操作很麻烦,所以有人就想到了使用核函数的方式进行替代。
核函数表达为高维空间向量的内积,其中 ϕ ( x ) \phi(x)ϕ(x) 为经过映射函数后的高维空间向量,现在我们如果要求高维空间中两个向量的内积,我们并不需要求得映射函数,也不需要知道映射后的向量是什么,我们只需要我们用到的核函数K,我们只要把低纬度空间中的两个向量带入K函数中,就自然可以获得高维空间中向量的内积。
那么有人会问,采用这种方法是解决了求高维空间内积的方式,但是别的呢?比如乘法、数乘这些。
对于这个问题,前人已经证明,这些的计算都可以转化为内积的表达式,也就是求这些问题结果都可先将表达式做各种替换,变成一个关于内积的代数式进而进行计算,另外一点,一般算法中大多数采用的都是内积。
又有人提出问题就是,那么我们的K也就是核函数,我们不知道是什么啊?
针对这个问题,核函数其实有很多,只要满足上面的等式一般都可以成为核函数,这么说不严谨,我们大可不必自己去找核函数,前任已经经过大量的实验已经把常用以及效果非常好的核函数给出:
1.线性核(Linear Kernel)
K ( x , z ) = x T z = x ⋅ z = < x , z > K(x,z)=x^Tz=x·z=<x,z>K(x,z)=xTz=x⋅z=<x,z>
2.多项式核(Polynomial Kernel)
K ( x , z ) = ( a x T z + c ) d = ( a x ⋅ z + b ) d K(x,z)=(ax^Tz+c)^d=(ax·z+b)^dK(x,z)=(axTz+c)d=(ax⋅z+b)d
3.高斯核(径向基核函数)(Radial Basis Function)
K ( x , z ) = e − ∣ ∣ x − y ∣ ∣ 2 2 σ 2 K(x,z)=e^{-\frac{||x-y||^2}{2\sigma^2}}K(x,z)=e−2σ2∣∣x−y∣∣2
或者
K ( x , z ) = e − γ ∣ ∣ x − y ∣ ∣ 2 K(x,z)=e^{-\gamma||x-y||^2}K(x,z)=e−γ∣∣x−y∣∣2
4.拉普拉斯核(Laplacian Kernel)
K ( x , z ) = e − ∣ ∣ x − y ∣ ∣ σ K(x,z)=e^{-\frac{||x-y||}{\sigma}}K(x,z)=e−σ∣∣x−y∣∣
上面的几个是比较常用的核函数,用法就是将低维向量作为参数传入,就可以获得高维空间中的内积,具体是哪个维度空间中的内积根据不同问题不太一样,对于核函数中其它一些参数都是超参数,可以人为的改动,比如线性核的C。
引申了这么多还没有说核函数的具体定义呢!!!
核函数:如果满足 K : X ∗ X − > R 对 于 任 意 的 x 、 z 属 于 X , 则 称 K ( x , z ) 为 核 函 数 K:X*X->R 对于任意的x、z属于X,则称K(x,z)为核函数K:X∗X−>R对于任意的x、z属于X,则称K(x,z)为核函数
说白了就是从特征空间映射到了R实数空间
那么什么是正定核函数呢?
对于正定核函数存在两种定义方式,对于第一种定义方式:
1.如果满足其为核函数,此时如果对于任意的X属于R,而 ϕ ∈ H \phi \in Hϕ∈H ,且服从 K ( x , z ) = < ϕ ( x ) , ϕ ( z ) > K(x,z)=<\phi(x),\phi(z)>K(x,z)=<ϕ(x),ϕ(z)>,那么则称其为正定核函数
2.如果 K ( x , z ) K(x,z)K(x,z) 满足下面两条性质则称正定核函数
(1)对称性:K ( x , z ) = K ( z , x ) K(x,z)=K(z,x)K(x,z)=K(z,x)
(2)正定性:满足Gram matrix是半正定矩阵,该矩阵的形式为 G r a m = [ K i , j ] Gram=[K_{i,j}]Gram=[Ki,j]
下面我们将会给出证明
三、证明Gram matrix为半正定矩阵的必要性
针对于对称性很显然,两个向量的内积满足对称性,下面我们重点证明矩阵正定性
证明:
证明一个矩阵半正定的方式有两种:
1.矩阵的特征值大于等于0
2.对于任意的列向量x都满足 x T A x ≥ 0 x^TAx\geq0xTAx≥0 ,则说明A矩阵为半正定矩阵
我们采用第二种方式进行证明,我们只需要证明 x T K x ≥ 0 x^TKx\geq0xTKx≥0 即可
x T K x = [ x 1 , x 2 , . . . , x n ] [ K 11 , K 12 . . . K 1 n K 21 , K 22 . . . K 2 n K n 1 , K n 2 , , , K n n ] [ x 1 x 2 . . . x n ] x^TKx=
[x1,x2,...,xn][x1,x2,...,xn]
⎡⎣⎢K11,K12...K1nK21,K22...K2nKn1,Kn2,,,Knn⎤⎦⎥[K11,K12...K1nK21,K22...K2nKn1,Kn2,,,Knn]
⎡⎣⎢⎢⎢x1x2...xn⎤⎦⎥⎥⎥[x1x2...xn]
xTKx=[x1,x2,...,xn]⎣⎡K11,K12...K1nK21,K22...K2nKn1,Kn2,,,Knn⎦⎤⎣⎢⎢⎡x1x2...xn⎦⎥⎥⎤
= ∑ i = 1 n ∑ j = 1 n x i x j K i j =\sum_{i=1}^n\sum_{j=1}^nx_ix_jK_{ij}=i=1∑nj=1∑nxixjKij
有因为 K ( x i , x j ) = < ϕ ( x i ) , ϕ ( x j ) > K(x_i,x_j)=<\phi(x_i),\phi(x_j)>K(xi,xj)=<ϕ(xi),ϕ(xj)>
= ∑ i = 1 n ∑ j = 1 n x i x j < ϕ ( x i ) , ϕ ( x j ) > =\sum_{i=1}^n\sum_{j=1}^nx_ix_j<\phi(x_i),\phi(x_j)>=i=1∑nj=1∑nxixj<ϕ(xi),ϕ(xj)>
= ∑ i = 1 n ∑ j = 1 n x i x j ϕ ( x i ) T ϕ ( x j ) =\sum_{i=1}^n\sum_{j=1}^nx_ix_j\phi(x_i)^T\phi(x_j)=i=1∑nj=1∑nxixjϕ(xi)Tϕ(xj)
= ∑ i = 1 n x i ϕ ( x i ) T ∑ j = 1 n x j ϕ ( x j ) =\sum_{i=1}^nx_i\phi(x_i)^T\sum_{j=1}^nx_j\phi(x_j)=i=1∑nxiϕ(xi)Tj=1∑nxjϕ(xj)
= [ ∑ i = 1 n x i ϕ ( x i ) ] T ∑ j = 1 n x j ϕ ( x j ) =[\sum_{i=1}^nx_i\phi(x_i)]^T\sum_{j=1}^nx_j\phi(x_j)=[i=1∑nxiϕ(xi)]Tj=1∑nxjϕ(xj)
= ∣ ∣ ∑ i = 1 m x i ϕ ( x i ) ∣ ∣ 2 ≥ 0 =||\sum_{i=1}^mx_i\phi(x_i)||^2\geq0=∣∣i=1∑mxiϕ(xi)∣∣2≥0
证毕
四、SVM支持向量机中的核函数
你比如说我们之前将支持向量机的时候,我们目标优化函数为:
m i n − ∑ j = 1 m λ i + 1 2 ∑ i = 1 m ∑ j = 1 m λ i λ j y i y j ( x i T x j ) min-\sum_{j=1}^m\lambda_i+\frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m\lambda_i\lambda_jy_iy_j(x_i^Tx_j)min−j=1∑mλi+21i=1∑mj=1∑mλiλjyiyj(xiTxj)
可以看到优化函数中存在 x i , x j x_i,x_jxi,xj 的内积,所以我们就考虑使用核函数进行代替变成:
m i n − ∑ j = 1 m λ i + 1 2 ∑ i = 1 m ∑ j = 1 m λ i λ j y i y j K ( x i , x j ) min-\sum_{j=1}^m\lambda_i+\frac{1}{2}\sum_{i=1}^m\sum_{j=1}^m\lambda_i\lambda_jy_iy_jK(x_i,x_j)min−j=1∑mλi+21i=1∑mj=1∑mλiλjyiyjK(xi,xj)
那么它是怎么产生将数据升到高维的效果呢?
因为我们此时在低纬度不可分,之前说到数据一定可以找到一个高纬度空间将其变成可分数据,如果数据线性不可分,那么支持向量机之前的数学推导以及逻辑论证都是不成立的,但是该数据在高纬度线性可分,那么该算法在高纬度空间依然是成立的,但是此时我们目标函数中的 x i , x j x_i,x_jxi,xj 就不是原始的数据了,而是对应其线性可分那个空间中的数据,也就是此时式子中关于数据x的都是高维空间中的数据。
此时看原始目标函数中存在两个样本的内积,刚才说它是高维空间向量的内积,那么正好利用之前讲到的核函数,核函数就是高维空间的两个内积表达,所以我们只需要知道我们用的核函数是什么,然后将低维空间的 x i , x j x_i,x_jxi,xj 带入自然就可以获得对应高维空间中 x i , x j x_i,x_jxi,xj 的内积结果了。