核函数(Kernel Function)是机器学习和统计学中的一个重要概念,特别是在支持向量机(SVM)和其他基于核方法的算法中。核函数的主要作用是通过一个隐式的方式将数据映射到一个高维空间,从而使得在该高维空间中线性不可分的问题变得线性可分。
定义:
核函数是一个定义在输入空间中的函数,满足
,其中
是一个从输入空间映射到高维特征空间的映射,
表示高维空间中的内积。
作用:
核函数通过计算输入数据在高维空间中对应点的内积,而不需要显式进行映射。这种方法被称为“核技巧”(Kernel Trick)。
灵魂提问:是不是在看了上面的定义后感觉云里雾里的?没关系,现在让我们抛开一切无关的事情,花20分钟来认真领会一下,核函数的原理到底是什么。
核函数为什么会诞生?
首先看一张图,这张图揭示了核函数为何诞生,它出现解决了什么样的问题。
假设我们现在正在处理一个二分类问题,红蓝两类样本在原始空间 中的分布如左图所示。如果我要将两类样本分开,在这个例子中,我需要用一个
的椭圆方程作为划分线进行分割。
显然这样做是比较麻烦的,对于这个例子,我们最理想的划分方式是通过一条直线就将两类样本划分开来。
但这在原始空间中是不可实现的,那如果我们将原始空间中的所有样本点,通过一个映射关系
,从原始空间
中“送到”右边的映射空间
中,就可以找到一个“平面”将两类样本划分开。这个映射过程,用数学语言描述就是:
经过映射之后,中的每个样本的点的坐标就由
变为了
。于是刚刚在
空间中用于划分红蓝两类样本的椭圆方程
映射到
空间中后就变成了后面这个方程
。
现在我们令原始空间中红色类别中的任意一个样本点为,任意一个蓝色类别样本点为
。
于是在空间中,任意一个红色样本与任意一个蓝色样本取的内积就可以表示为:
这个时候你会发现,这不就是原空间中的内积的平方吗?于是可以再写成:
也就是说,如果想要算出高维度空间
中
,其实可以先算出原始空间
中
再平方。我们要找的核函数其实就是
。
因此,我们就可以求出在空间中两点的之间的距离:
相应的,我们也可以求出在空间中两向量的夹角:
同时,我们也可以求出在空间中的所有点相互内积组成的
矩阵,又称内积矩阵或核矩阵:
接下来,可以通过一个简单的例子来展示核函数在分类上的作用。
假设现在我们有训练集:
这个训练集属于d维空间,每个样本可能对应的标签是-1和1。这就是一个简单的二分类问题。
现在我们通过将原始空间
中的点送到映射空间
中。
于是训练集就变成了:
假设“+”标记点属于正类(y=1),“○”标记点属于负类(y=-1)。因此我们可以分别求出正负两类点的中心位置分别为:
(正类中心点)
(负类中心点)
知道了中心点,根据“三角形法则”就可以求出由负类中心点指向正类中心点的红色向量为:
有了就可以在其1/2的位置做一条垂线,那现在如果有一个新的样本
(图中绿色五角星)进来,我们该如何预测它的类别呢?
我们需要判断图中的角度大小即可。
如果是小于90度,则属于正类,即:
如果是大于90度,则属于负类,则:
最后将 算出来的值通过信号函数
处理之后就可以得到类别。
到这里,很容易知道,我们只要能算出就可以对未知样本进行分类。
于是:
将 和
带入上式
我们又嗅到了熟悉的味道,前面部分又可以用来计算,于是:
现在,我们只需要找到核函数就可以进行计算并进行分类。
于是又有以下的疑问:
1、是不是必须要知道? No!
2、我们是不是只需要就可以进行求解? Yes!
3、那么什么样的是符合要求的,具有什么性质? 有限半正定的(一会讲解)
4、给定一个映射,我们能不能找到一个相关的核函数
计算
空间中的内积? Yes!
5、给定一个核函数,我们能不能构建一个特征空间
? Yes!
什么是有限正半定函数?
首先我们先了解清楚什么是半正定矩阵:
一个对称矩阵被称为半定矩阵,如果对于所有非零向量
,都有:
,换句话说,任何向量与这个矩阵做双线性乘积的结果总是非负的。
然后我们来说什么什么样的函数有资格称为核函数,也就是上面说的一个函数的内积矩阵是半正定矩阵。
以下是常用的核函数:
本文主要参考了李政轩老师系列视频:https://www.youtube.com/watch?v=p4t6O9uRX-U&list=PLt0SBi1p7xrRKE2us8doqryRou6eDYEOy&index=1