[机器学习]svm的核函数

85 阅读5分钟

支持向量机(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好参数多,数值不稳定,性能通常不如RBFd, γ, r
RBF核(高斯核)默认首选;没有先验知识;复杂的非线性问题非常强大和灵活容易过拟合,速度慢,可解释性差C, γ
Sigmoid核特定领域(如神经网络)在特定问题上有效通用性差,可能无效γ, r

如何选择?—— 一个实用的流程:

  1. 首先,尝试线性核:特别是当你的特征数量非常多(比如 > 10,000)或者你希望有一个快速、可解释的基线模型时。如果它的性能已经足够好,就没必要用更复杂的模型。
  2. 如果线性核性能不足,切换到RBF核:这是最常见的情况。RBF核的强大非线性能力可以解决绝大多数问题。你需要仔细地调优 Cγ 参数(例如使用网格搜索)。
  3. 特殊情况
    • 如果你有领域知识,确信数据关系是某种特定形式,可以选择对应的核函数(但这很罕见)。
    • 对于非常大的数据集(例如百万级样本),即使是线性SVM也可能很慢,这时使用线性核几乎是唯一的选择,或者需要考虑随机森林、梯度提升树等其他模型。

核心要点从简单模型(线性核)开始,然后过渡到复杂模型(RBF核),并通过交叉验证来评估性能,避免不必要的过拟合。