核函数(Kernel Function)是机器学习中的一个重要概念,尤其在支持向量机(SVM)、核K均值、核主成分分析(Kernel PCA)等核方法(Kernel Methods)中被广泛应用。核函数的核心作用是帮助处理复杂的非线性数据问题,通过隐式映射将原始特征空间中的数据点映射到一个高维甚至无穷维的空间,在这个空间中非线性问题变得线性可分,从而便于应用传统的机器学习算法进行处理。
1. 核函数的定义
核函数是一个定义在两个数据点之间的函数,表示两个数据点在某个高维空间中的相似性。它可以在原始空间中直接计算,而不需要显式地进行映射,这种隐式计算方式被称为核技巧(Kernel Trick)。
数学上,核函数是如下形式的函数:
其中:
是原始空间中的两个数据点。
是将数据点从原始空间映射到高维空间的映射函数。
表示两个映射后的数据点在高维空间中的内积。
通过核函数 ,我们可以在不显式计算映射
的情况下,直接获得在高维空间中两个数据点之间的内积。这大大降低了计算开销,尤其在高维空间中,显式计算这些映射会非常耗时甚至不可行。
补充说明:
内积是用来度量两个向量之间的相似性的重要工具。在高维空间中,内积值越大,代表两个向量越“接近”,它们的方向越相似,也就是说这两个数据点的相似性越高。对于分类或聚类任务来说,相似性是判断数据点是否属于同一类别、如何分配聚类等任务的基础信息。
在原始特征空间中,有些数据点之间的相似性关系并不是很明显,特别是当这些数据存在非线性关系时。通过核方法将数据点映射到一个更高的特征空间后,我们希望在这个高维空间中数据点的相似性能够更清楚地表达出来。内积是计算这种相似性的重要工具。
核函数与内积的关系:核函数提供了一种计算高维空间中内积的方式,而无需显式地进行高维映射,节省了大量的计算资源,同时可以处理无限维的情况,例如高斯核。
2、举例说明:显示映射到高维空间和使用核函数区别
假设我们有如下两个二维数据点:
-
x1=(1,2) x2=(2,3)
我们想要将这些点从原始空间映射到一个高维空间,以便在高维空间中更好地处理它们的分类或聚类问题。
2.1 显式映射到高维空间
首先考虑一种方式,通过一个显式的非线性映射函数将这些数据点从二维空间映射到三维空间:
映射函数
我们定义一个映射函数 如下:
该映射函数将二维数据点映射到三维空间,第三个维度是两个原始特征的平方和。
映射后的数据点
对于数据点 x1=(1,2)
对于数据点 x2=(2,3)
计算映射后点的内积
在三维空间中,我们可以计算这两个数据点的内积:
显式映射的做法需要我们首先将数据点通过映射函数转换到高维空间,然后再计算它们在高维空间中的内积。随着维度的增加,映射和内积计算的成本会变得非常高昂。
2.2 使用核函数(Kernel Trick)
为了避免高维映射和计算的复杂性,核方法引入了核函数,这种函数可以在原始特征空间中直接计算出高维空间中的内积,而不需要显式地进行高维映射。
核函数的选择
在本例中,我们选择一个多项式核函数,其形式为:
这里 是两个向量的点积,表示在原始二维空间中两个数据点的相似性。我们还增加了一个常数项 1并将结果平方,形成一个二次核函数。
在原始空间中计算内积
现在我们使用核函数计算数据点 x1和 x2在高维空间中的相似性:
首先,计算它们在原始空间中的点积:
x1⋅x2=1×2+2×3=2+6=8
接着使用核函数来计算它们的相似性:
比较
通过使用核函数 ,我们直接在原始二维空间中计算出了数据点在高维空间中的内积结果(即相似性),值为 81。这相当于在高维空间中隐式地完成了映射和内积运算。
2.3 区别总结
-
显式映射:首先将数据点通过映射函数转换到高维空间,然后在高维空间中计算数据点的相似性(例如内积)。这个过程需要明确知道高维映射结果,并且随着维度增加,计算的复杂性会显著增加。
在我们的例子中,通过显式映射将数据点从二维映射到三维,再计算内积的结果是 73。显式映射需要我们知道每个数据点在高维空间中的表示。
-
使用核函数(Kernel Trick):直接在原始空间中使用核函数计算出高维空间中的内积,而无需显式进行映射。通过核函数的使用,我们可以高效地获得相似性度量,避免高维映射的计算开销。
在我们的例子中,通过使用核函数
,我们直接得到了相似性值为 81,而不需要真正计算每个点在三维空间中的映射。
3、常见的核函数
3.1 线性核(Linear Kernel)
线性核是最简单的核函数,用于直接度量两个向量的点积。它适用于线性可分的数据集,常用于不需要非线性映射的场景。
-
定义:
其中
是两个数据点的向量。
-
用途:在线性支持向量机(SVM)中,用线性核可以直接找到超平面进行分类。它对于特征数量远多于样本数量的情况非常有效,例如文本分类问题。
3.2 多项式核(Polynomial Kernel)
多项式核函数用于将原始特征空间中的数据映射到一个高次特征空间,能够捕捉特征之间的多项式关系。
-
定义:
其中 c是一个常数,控制偏移,d是多项式的次数。较高的 d值会增加模型的复杂性。
-
用途:适用于数据中具有多项式关系的场景,可以增强模型的非线性表达能力。适用于那些存在复杂的非线性边界,但可以用高阶多项式进行有效近似的数据。
3.3 高斯核(RBF 核,Radial Basis Function Kernel)
高斯核,也叫做径向基核(RBF Kernel),是一种常用的核函数,可以将数据映射到无穷维的特征空间,适用于数据之间的复杂非线性关系。
-
定义:
其中
表示两个数据点之间的欧氏距离,
控制核函数的宽度。
-
用途:高斯核能够很好地处理非线性边界,是非线性支持向量机中最常用的核函数之一。它适用于几乎所有情况下的数据,尤其适合复杂的数据集,能够通过高维映射将非线性问题变为线性。
3.4 Sigmoid 核(Sigmoid Kernel)
Sigmoid 核函数源自神经网络中的激活函数(tanh),它模仿了人工神经元的输出,具有非线性特性。
-
定义:
其中
和 c 是可调参数。
-
用途:由于它与神经网络中激活函数的形式类似,有时也被用来模拟神经网络的行为。尽管在 SVM 中不如高斯核和多项式核流行,但它在一些特殊的情况下仍然可以表现出良好的效果。
3.5 拉普拉斯核(Laplacian Kernel)
拉普拉斯核与高斯核类似,但它的相似性度量基于绝对距离而不是平方距离。
-
定义:
-
用途:拉普拉斯核也常用于处理非线性数据。它与高斯核的效果类似,但在某些情况下对离群点更为稳健。
核函数的选择
- 线性核:适用于线性可分数据,或当特征数量远多于样本数量时(例如文本分类)。
- 多项式核:适合具有多项式关系的特征数据,适合处理非线性边界,但可能过拟合高次项。
- 高斯核(RBF核):适用于大多数非线性问题,是支持向量机中最常用的核函数之一。
- Sigmoid 核:在某些情况下与神经网络类似,效果好坏取决于数据的特性,较少使用。
- 拉普拉斯核:与高斯核类似,适合处理非线性问题,但对离群点更为稳健。