学习笔记二十五:支持向量机-核函数

1. 基本概念

1.1 为什么需要核函数

在实际任务中,训练样本往往在原始样本空间中线性不可分。例如经典的异或问题,在二维空间中无法用一条直线将两类样本分开。

解决方案:将样本从原始空间映射到更高维的特征空间,使得样本在特征空间中线性可分。

核心思想

  • 在低维空间中非线性可分的数据,映射到高维空间后可能变得线性可分
  • 如果原始空间是有限维的,总能找到一个高维特征空间使样本线性可分

1.2 核函数的定义

问题 :在特征空间中求解SVM需要计算映射后样本的内积 ϕ ( x i ) T ϕ ( x j ) \phi(x_i)^T \phi(x_j) ϕ(xi)Tϕ(xj)。当特征空间维数很高甚至无穷维时,直接计算非常困难。

核函数的作用

核函数 κ ( x i , x j ) \kappa(x_i, x_j) κ(xi,xj) 是一个函数,使得:

κ ( x i , x j ) = ϕ ( x i ) T ϕ ( x j ) \kappa(x_i, x_j) = \phi(x_i)^T \phi(x_j) κ(xi,xj)=ϕ(xi)Tϕ(xj)

即:样本在特征空间的内积等于它们在原始样本空间中通过核函数计算的结果。

核技巧(Kernel Trick)

有了核函数,我们就不必直接计算高维甚至无穷维特征空间中的内积,只需在原始空间中计算核函数的值即可。

1.3 核函数的优势

  1. 计算效率:避免在高维特征空间中直接计算,大大降低计算复杂度
  2. 隐式映射 :不需要知道映射函数 ϕ ( ⋅ ) \phi(\cdot) ϕ(⋅) 的具体形式,只需选择合适的核函数
  3. 灵活性:可以处理非线性问题,同时保持线性分类器的计算效率

2. 核函数方法

2.1 核函数的判定条件

定理 :一个对称函数 κ ( ⋅ , ⋅ ) \kappa(\cdot, \cdot) κ(⋅,⋅) 是核函数,当且仅当对于任意数据,其对应的核矩阵(kernel matrix)总是半正定的。

核矩阵:由所有样本对的核函数值组成的矩阵。

意义

  • 只要核矩阵半正定,就能作为核函数使用
  • 任何一个核函数都隐式地定义了一个称为再生核希尔伯特空间(RKHS)的特征空间

2.2 常用核函数

1. 线性核(Linear Kernel)

κ ( x i , x j ) = x i T x j \kappa(x_i, x_j) = x_i^T x_j κ(xi,xj)=xiTxj

  • 特点:相当于不使用核函数,直接在原始空间进行分类
  • 适用场景:数据本身线性可分或近似线性可分

2. 多项式核(Polynomial Kernel)

κ ( x i , x j ) = ( x i T x j ) d \kappa(x_i, x_j) = (x_i^T x_j)^d κ(xi,xj)=(xiTxj)d

  • 参数 : d ≥ 1 d \ge 1 d≥1 为多项式的次数
  • 特点:适合处理非线性问题,次数越高,模型越复杂
  • 适用场景:需要非线性分类但数据分布相对简单

3. 高斯核(Gaussian Kernel,RBF核)

κ ( x i , x j ) = exp ⁡ ( − ∣ ∣ x i − x j ∣ ∣ 2 2 σ 2 ) \kappa(x_i, x_j) = \exp\left(-\frac{||x_i - x_j||^2}{2\sigma^2}\right) κ(xi,xj)=exp(−2σ2∣∣xi−xj∣∣2)

  • 参数 : σ > 0 \sigma > 0 σ>0 为高斯核的带宽
  • 特点:将样本映射到无穷维特征空间,具有很强的非线性拟合能力
  • 适用场景:数据分布复杂,需要强非线性分类能力
  • 注意 : σ \sigma σ 的选择很重要,过小容易过拟合,过大容易欠拟合

4. 拉普拉斯核(Laplacian Kernel)

κ ( x i , x j ) = exp ⁡ ( − ∣ ∣ x i − x j ∣ ∣ σ ) \kappa(x_i, x_j) = \exp\left(-\frac{||x_i - x_j||}{\sigma}\right) κ(xi,xj)=exp(−σ∣∣xi−xj∣∣)

  • 参数 : σ > 0 \sigma > 0 σ>0
  • 特点:与高斯核类似,但使用L1距离而非L2距离
  • 适用场景:对异常值更鲁棒的情况

5. Sigmoid核

κ ( x i , x j ) = tanh ⁡ ( β x i T x j + θ ) \kappa(x_i, x_j) = \tanh(\beta x_i^T x_j + \theta) κ(xi,xj)=tanh(βxiTxj+θ)

  • 参数 : β > 0 , θ < 0 \beta > 0, \theta < 0 β>0,θ<0
  • 特点:在某些条件下等价于多层感知机
  • 适用场景:需要神经网络式非线性映射的情况

2.3 核函数的组合

核函数可以通过函数组合得到新的核函数:

  • 线性组合 :若 κ 1 \kappa_1 κ1 和 κ 2 \kappa_2 κ2 为核函数,则对于任意正数 γ 1 , γ 2 \gamma_1, \gamma_2 γ1,γ2,其线性组合 γ 1 κ 1 + γ 2 κ 2 \gamma_1 \kappa_1 + \gamma_2 \kappa_2 γ1κ1+γ2κ2 也是核函数
  • 直积 :若 κ 1 \kappa_1 κ1 和 κ 2 \kappa_2 κ2 为核函数,则其直积 κ 1 ⊗ κ 2 ( x , z ) = κ 1 ( x , z ) κ 2 ( x , z ) \kappa_1 \otimes \kappa_2(x, z) = \kappa_1(x, z)\kappa_2(x, z) κ1⊗κ2(x,z)=κ1(x,z)κ2(x,z) 也是核函数
  • 缩放 :若 κ 1 \kappa_1 κ1 为核函数,则对于任意函数 g ( x ) g(x) g(x), κ ( x , z ) = g ( x ) κ 1 ( x , z ) g ( z ) \kappa(x, z) = g(x)\kappa_1(x, z)g(z) κ(x,z)=g(x)κ1(x,z)g(z) 也是核函数

3. 核函数选择

3.1 核函数选择的重要性

关键问题

  • 在不知道特征映射形式时,我们并不知道什么样的核函数是合适的
  • 核函数仅隐式地定义特征空间
  • 核函数选择成为支持向量机的最大变数

影响

  • 若核函数选择不合适,意味着将样本映射到了不合适的特征空间
  • 很可能导致性能不佳

3.2 核函数选择策略

1. 根据数据特点选择

  • 线性可分或近似线性可分:使用线性核
  • 数据分布复杂:使用高斯核
  • 需要中等复杂度:使用多项式核

2. 根据问题规模选择

  • 样本量大:优先考虑线性核(计算效率高)
  • 样本量小:可以使用复杂核函数(如高斯核)

3. 参数调优

  • 高斯核的 σ \sigma σ:需要通过交叉验证等方法调优
  • 多项式核的 d d d:需要平衡模型复杂度和拟合能力

4. 实际应用建议

  • 通常从高斯核开始尝试(适用面广)
  • 如果效果不好,再尝试其他核函数
  • 可以通过核函数组合来构造更复杂的核函数

4. 总结

核函数的核心价值

  1. 解决非线性问题:通过将数据映射到高维特征空间,使非线性问题转化为线性问题
  2. 计算效率:避免在高维空间中直接计算,通过核技巧在原始空间中计算
  3. 灵活性:不需要知道映射函数的具体形式,只需选择合适的核函数

常用核函数的特点

  • 线性核:简单高效,适合线性可分数据
  • 多项式核:中等复杂度,适合中等非线性问题
  • 高斯核:强非线性能力,适合复杂数据分布,但需要仔细调参
  • 拉普拉斯核:对异常值更鲁棒
  • Sigmoid核:具有神经网络特性

核函数选择的挑战

  • 核函数选择是SVM的最大变数
  • 需要根据数据特点、问题规模和实际效果来选择
  • 参数调优对性能影响很大,需要通过实验确定

实际应用

  • 核函数使SVM能够处理复杂的非线性分类问题
  • 在实际应用中,高斯核(RBF核)是最常用的选择
  • 核函数的选择和参数调优是SVM应用中的关键步骤
相关推荐
SadSunset1 小时前
(13)复杂查询
java·笔记·架构·mybatis
浩瀚地学1 小时前
【Java】ArrayList
java·开发语言·经验分享·笔记
LeonIter1 小时前
《以日为鉴》读书随笔
笔记
Genevieve_xiao1 小时前
【数据结构与算法】【xjtuse】面向考纲学习(下)
java·数据结构·学习·算法
mpHH2 小时前
ivorysql 源码分析-双port兼容
数据库·学习·postgresql
北杳同学2 小时前
前端一些用得上的有意思网站
前端·javascript·vue.js·学习
小帅学编程2 小时前
JVM学习记录
jvm·学习
xian_wwq2 小时前
【学习笔记】威胁情报
网络·笔记·学习
小糊涂加油2 小时前
TypeScript学习笔记
笔记·学习