核函数基础:从线性到非线性的魔法桥梁

说实话,我刚接触机器学习那会儿,对核函数也是一头雾水。明明数据在原始空间里纠缠得跟乱麻似的,怎么映射到高维空间就突然能分开了?这背后到底藏着什么玄机?今天咱们就把这事儿彻底聊透。

什么是核函数?

先给个最直白的定义:核函数是一个双输入函数,它计算的是两个样本在高维空间中的内积,但不需要显式地进行高维映射。

用数学语言表达就是:

K(x, y) = ⟨φ(x), φ(y)⟩

其中 φ 是映射函数,把原始数据从低维空间映射到高维特征空间。⟨·,·⟩ 表示内积运算。

嗯,这里要注意:我们根本不需要知道 φ 长什么样。只要核函数 K 满足 Mercer 条件(对称且半正定),它就对应着某个高维空间中的内积。

核心洞察:核函数让我们「假装」在高维空间里计算,实际上所有运算都在原始低维空间完成。这就是核技巧的精髓——计算复杂度不随映射空间的维度增长。

核函数在机器学习中的角色

我个人习惯把核函数比作「翻译官」。它把原始空间中无法用线性模型解决的问题,翻译成高维空间中线性可分的问题。你想想看,这多像我们人类学习新知识的过程——遇到复杂问题,先换个角度思考,问题就变简单了。

核函数主要出现在以下几类模型中:

  • 支持向量机(SVM):最经典的核方法应用。我在项目中遇到过用线性SVM死活分不开的数据,换成RBF核后准确率直接从65%飙到92%。
  • 核岭回归(Kernel Ridge Regression):把线性回归扩展到非线性场景。
  • 核主成分分析(Kernel PCA):非线性降维的利器。
  • 高斯过程(Gaussian Process):核函数直接定义了模型的先验分布。

说白了,只要你的算法只依赖于样本之间的内积运算,就可以用核函数把它「核化」。这个思路在工业界非常实用。

核技巧的核心思想

核技巧的核心就一句话:用低维计算,换高维效果。

为什么能做到?因为很多机器学习算法(比如SVM)在求解过程中,数据只以内积的形式出现。我们不需要知道 φ(x) 的具体值,只需要知道 φ(x) 和 φ(y) 的内积结果。

来看个具体例子。假设原始数据是二维的:

x = (x₁, x₂), y = (y₁, y₂)

我们想用二次多项式映射到五维空间:

φ(x) = (x₁², x₂², √2·x₁·x₂, √2·x₁, √2·x₂, 1)

直接计算 φ(x)·φ(y) 需要做 5 次乘法和 4 次加法。但如果我们用多项式核:

K(x, y) = (x·y + 1)²

展开看看:

K(x, y) = (x₁y₁ + x₂y₂ + 1)²
        = x₁²y₁² + x₂²y₂² + 2x₁x₂y₁y₂ + 2x₁y₁ + 2x₂y₂ + 1

发现没有?结果和 φ(x)·φ(y) 一模一样!但计算量只有 2 次乘法和 1 次加法。当维度更高时,这种优势会被指数级放大。

避坑指南:我曾经在选核函数时踩过坑。有一次用多项式核,阶数设到 5,结果模型过拟合得一塌糊涂。后来才明白,核函数的选择本身就是一种正则化——高阶多项式核的 VC 维很高,小数据集慎用。

常见核函数一览

核函数名称 公式 特点 适用场景
线性核 K(x,y) = x·y 等价于原始空间,无映射 数据本身线性可分
多项式核 K(x,y) = (x·y + c)ᵈ 全局性,d 控制复杂度 特征之间存在交互作用
RBF核(高斯核) K(x,y) = exp(-γ||x-y||²) 局部性,γ 控制影响半径 最常用,默认首选
Sigmoid核 K(x,y) = tanh(αx·y + c) 类似神经网络激活函数 某些特定场景
拉普拉斯核 K(x,y) = exp(-σ||x-y||) 比RBF更稀疏 特征维度极高时

我个人最常用的是 RBF 核。为什么?因为它只有一个超参数 γ,调参相对简单。而且从理论上讲,RBF 核对应的特征空间是无限维的,理论上可以拟合任意复杂的决策边界。

注意:RBF 核的 γ 参数非常敏感。γ 太大,模型只关注局部,容易过拟合;γ 太小,模型过于平滑,欠拟合。我一般先用网格搜索在 [0.001, 0.01, 0.1, 1, 10] 这个范围扫一遍。

核函数的数学条件

不是随便一个函数都能当核函数。它必须满足 Mercer 条件:对于任意有限个样本点,核矩阵 K 必须是半正定的。

核矩阵的定义:

K_ij = K(x_i, x_j)

半正定意味着所有特征值 ≥ 0。这个条件保证了我们可以在某个高维空间中找到对应的映射 φ。

你可能会问:怎么判断一个函数是不是核函数?

有几个实用技巧:

  • 核函数的和:两个核函数的和仍是核函数
  • 核函数的积:两个核函数的积仍是核函数
  • 核函数的正数倍:c·K(x,y) 仍是核函数(c > 0)
  • 指数运算:exp(K(x,y)) 仍是核函数

这些性质让我们可以组合出各种复杂的核函数。我在做多模态数据融合时,就经常把文本核和图像核加权组合,效果比单一核好很多。

核技巧的直观理解

为了让你更直观地理解核技巧,我画了一张图:

原始空间(低维) 数据线性不可分 φ(x) 特征空间(高维) 线性可分! 核函数 K(x,y) = ⟨φ(x), φ(y)⟩ 无需显式计算 φ(x),直接在低维计算内积

这张图展示了核技巧的核心逻辑:左侧原始空间中,红色和蓝色点纠缠在一起,无法用一条直线分开。通过映射 φ 进入右侧的高维特征空间后,数据变得线性可分。而核函数 K(x,y) 让我们在原始空间里就能计算出高维空间的内积结果。

核函数的选择策略

在实际项目中,怎么选核函数?我总结了一套经验法则:

  1. 先试线性核:如果数据维度很高(比如文本分类,特征上万维),线性核往往就够用了。我在做垃圾邮件过滤时,用线性SVM效果就很好。
  2. 默认用RBF:如果数据量不大(几千条),特征维度也不高,RBF核是最稳妥的选择。它只有一个参数 γ,调参成本低。
  3. 考虑多项式核:当你知道特征之间存在明确的交互关系时,多项式核可能更合适。但阶数 d 不要超过 3,否则数值稳定性会出问题。
  4. 自定义核函数:如果领域知识很丰富,可以自己构造核函数。我曾经在蛋白质序列分类中,基于序列相似度自定义了一个核函数,效果比通用核好 15%。

实用技巧:如果你不确定选哪个核,可以试试核对齐(Kernel Alignment)——计算不同核矩阵与理想核矩阵(比如标签矩阵)的相似度,选对齐度最高的那个。这个方法我在做模型选型时经常用,比盲目试参靠谱得多。

核函数的计算复杂度

核函数虽然避免了高维映射的计算,但它也有代价——核矩阵的规模是 O(n²),其中 n 是样本数。当 n 达到百万级别时,存储核矩阵就需要几个 TB 的内存。

怎么解决?

  • Nyström 近似:随机采样 m 个样本(m ≪ n),用这 m 个样本的核矩阵来近似完整核矩阵。我试过 m = 1000 时,分类准确率只下降 1%,但计算时间从 3 小时降到 2 分钟。
  • 随机傅里叶特征:对于平移不变核(如 RBF),可以用随机傅里叶特征显式地构造一个低维近似映射。这个方法在深度学习时代特别实用。
  • 分块计算:把数据分成多个块,逐块计算核矩阵,最后合并结果。适合分布式系统。

嗯,关于核函数的基础知识,今天就聊到这儿。记住一句话:核函数不是魔法,它只是巧妙地利用了数学中的内积性质,让我们用低维的计算量,获得了高维的表达能力。这个思想在机器学习中无处不在,理解透了,后面学核优化就轻松多了。

本章要点回顾:

  • 核函数 = 高维空间内积的低维计算
  • 核技巧的核心:避免显式高维映射
  • 常见核函数:线性、多项式、RBF、Sigmoid
  • 核函数必须满足 Mercer 条件(半正定)
  • 核矩阵 O(n²) 的存储问题是实际应用中的主要瓶颈

可可精品资料库