核函数基础:从线性到非线性的魔法桥梁
说实话,我刚接触机器学习那会儿,对核函数也是一头雾水。明明数据在原始空间里纠缠得跟乱麻似的,怎么映射到高维空间就突然能分开了?这背后到底藏着什么玄机?今天咱们就把这事儿彻底聊透。
什么是核函数?
先给个最直白的定义:核函数是一个双输入函数,它计算的是两个样本在高维空间中的内积,但不需要显式地进行高维映射。
用数学语言表达就是:
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)) 仍是核函数
这些性质让我们可以组合出各种复杂的核函数。我在做多模态数据融合时,就经常把文本核和图像核加权组合,效果比单一核好很多。
核技巧的直观理解
为了让你更直观地理解核技巧,我画了一张图:
这张图展示了核技巧的核心逻辑:左侧原始空间中,红色和蓝色点纠缠在一起,无法用一条直线分开。通过映射 φ 进入右侧的高维特征空间后,数据变得线性可分。而核函数 K(x,y) 让我们在原始空间里就能计算出高维空间的内积结果。
核函数的选择策略
在实际项目中,怎么选核函数?我总结了一套经验法则:
- 先试线性核:如果数据维度很高(比如文本分类,特征上万维),线性核往往就够用了。我在做垃圾邮件过滤时,用线性SVM效果就很好。
- 默认用RBF:如果数据量不大(几千条),特征维度也不高,RBF核是最稳妥的选择。它只有一个参数 γ,调参成本低。
- 考虑多项式核:当你知道特征之间存在明确的交互关系时,多项式核可能更合适。但阶数 d 不要超过 3,否则数值稳定性会出问题。
- 自定义核函数:如果领域知识很丰富,可以自己构造核函数。我曾经在蛋白质序列分类中,基于序列相似度自定义了一个核函数,效果比通用核好 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²) 的存储问题是实际应用中的主要瓶颈