支持向量机(SVM)本身是一个线性分类器,但通过使用“核技巧”,它可以高效地解决非线性问题。
核函数的核心思想是:将原始低维空间中的线性不可分数据,映射到高维特征空间,使其在这个高维空间中线性可分,而无需实际计算这个复杂的高维映射。
以下是SVM中最常用和经典的几种核函数,以及它们各自的应用场景。
1. 线性核
- 函数形式: ( K(x_i, x_j) = x_i \cdot x_j )
- 描述: 这是最简单的核函数,它不做任何非线性映射。它等价于没有使用核技巧的原始线性SVM。
- 应用场景:
- 特征数量非常多:当特征数量(维度)已经远远大于样本数量时,数据本身很可能在高维空间中就已经是线性可分的(这与“维度灾难”的另一面有关)。例如在文本分类、基因微阵列数据中,特征数(单词数、基因数)常常是万级甚至百万级,而样本数可能只有千级。
- 问题本身就是线性可分的:通过EDA或先验知识,确定数据近似线性可分。
- 作为性能基线:由于它简单、训练速度快,通常作为第一个尝试的模型,以对比更复杂核函数的性能提升。
- 优点: 训练速度快,参数少(主要调优正则化参数C),不易过拟合。
- 缺点: 无法处理复杂的非线性问题。
2. 多项式核
- 函数形式: ( K(x_i, x_j) = (\gamma (x_i \cdot x_j) + r)^d )
- 描述: 它可以实现全局性的、固定次数的非线性映射。其中
d是多项式的次数,γ、r是超参数。 - 应用场景:
- 理论上可以拟合任何数据,但现在实际应用中已经较少使用。
- 在一些特定的、具有明确多项式关系的问题中可能表现良好。
- 优点: 当
d较小时,模型可解释性相对较强。 - 缺点:
- 参数较多(
d,γ,r),调优复杂。 - 当
d很大时,计算复杂度会急剧上升,可能导致数值计算不稳定(如核矩阵元素值过大或过小)。 - 性能通常不如更灵活的径向基核。
- 参数较多(
3. 径向基函数核 / 高斯核
- 函数形式: ( K(x_i, x_j) = \exp(-\gamma ||x_i - x_j||^2) )
- 描述: 这是最常用、最强大的核函数。它将数据映射到无限维的特征空间。其值取决于两个样本点在原始空间中的欧氏距离。
γ是关键参数,它定义了单个训练样本的影响范围——γ越大,影响范围越小,决策边界越弯曲复杂。 - 应用场景:
- 没有关于数据的先验知识时:这是默认的首选。因为它非常灵活,能够拟合高度复杂和非线性的决策边界。
- 特征数量不多,样本数量也不巨大的情况:例如,经典的图像分类(在特征工程之后)、手写数字识别、生物信息学等领域。
- 数据呈现局部特性:即相似的点在类别上更可能相同。
- 优点:
- 非常强大和灵活,可以逼近任何复杂的非线性函数。
- 只有一个主要参数(
γ)需要仔细调优(当然还有正则化参数C)。
- 缺点:
- 如果
γ过大,容易过拟合(模型会去拟合每一个训练样本的噪声)。 - 如果
γ过小,容易欠拟合(模型会过于平滑,接近线性模型)。 - 相对于线性核,训练速度较慢,尤其是在大数据集上。
- 可解释性差,我们无法知道在高维空间中的具体映射形式。
- 如果
4. Sigmoid核
- 函数形式: ( K(x_i, x_j) = \tanh(\gamma (x_i \cdot x_j) + r) )
- 描述: 这个核函数来源于神经网络,SVM使用它时,相当于一个两层的感知机。它的行为在某些参数下类似于RBF核。
- 应用场景:
- 特定领域:如某些特定结构的神经网络替代。
- 使用场景有限:由于其有效性取决于参数(
γ,r)的取值,并且并非对所有参数都满足Mercer定理(即核函数必须对应某个特征空间的内积),所以在实践中不推荐作为首选。
- 优点: 在特定问题上可能有效。
- 缺点: 通用性不强,调参需谨慎,且不一定总能得到有效的核矩阵。
总结与选择指南
为了更直观,这里有一个简单的决策流程和总结表格:
| 核函数 | 适用场景 | 优点 | 缺点 | 关键参数 |
|---|---|---|---|---|
| 线性核 | 特征数多、样本数少;线性可分问题;作为基线模型 | 速度快,不易过拟合,可解释性强 | 无法处理非线性问题 | C |
| 多项式核 | 理论上通用,但现已少用 | 可解释性相对RBF好 | 参数多,数值不稳定,性能通常不如RBF | d, γ, r |
| RBF核(高斯核) | 默认首选;没有先验知识;复杂的非线性问题 | 非常强大和灵活 | 容易过拟合,速度慢,可解释性差 | C, γ |
| Sigmoid核 | 特定领域(如神经网络) | 在特定问题上有效 | 通用性差,可能无效 | γ, r |
如何选择?—— 一个实用的流程:
- 首先,尝试线性核:特别是当你的特征数量非常多(比如 > 10,000)或者你希望有一个快速、可解释的基线模型时。如果它的性能已经足够好,就没必要用更复杂的模型。
- 如果线性核性能不足,切换到RBF核:这是最常见的情况。RBF核的强大非线性能力可以解决绝大多数问题。你需要仔细地调优
C和γ参数(例如使用网格搜索)。 - 特殊情况:
- 如果你有领域知识,确信数据关系是某种特定形式,可以选择对应的核函数(但这很罕见)。
- 对于非常大的数据集(例如百万级样本),即使是线性SVM也可能很慢,这时使用线性核几乎是唯一的选择,或者需要考虑随机森林、梯度提升树等其他模型。
核心要点:从简单模型(线性核)开始,然后过渡到复杂模型(RBF核),并通过交叉验证来评估性能,避免不必要的过拟合。