【自学笔记】支持向量机(2)——核函数

news/2024/9/19 3:33:40 标签: 笔记, 支持向量机, 算法, 核函数

引入

  核函数的功能是将一组数据映射到更高维的特征空间,这样可以让在低维无法线性分类的数据能够在高维空间下被分类。
  可以证明,如果原始数据是有限的维度,那么一定存在一个高维特征空间使得样本线性可分。

  文章内容由《机器学习》相关内容,网络资源,GPT回答和个人理解组成。

回顾

支持向量机(1)
  在特征空间内划分超平面的模型可以表示为:

f ( x ) = w ⃗ T x ⃗ + b f(x)=\vec{w}^{T}\vec{x}+b f(x)=w Tx +b

  假如我们将特征向量 x x x以某种方式映射到了更高维的空间中,得到的新特征向量记作 ϕ ( x ⃗ ) \phi (\vec{x}) ϕ(x )。那新的模型可以表示为:

f ( x ) = w ⃗ T ϕ ( x ⃗ ) + b f(x)=\vec{w}^{T}\phi (\vec{x})+b f(x)=w Tϕ(x )+b

  于是我们可以改写支持向量机中的命题:

min ⁡ w ⃗ , b ∣ ∣ w ⃗ ∣ ∣ \min_{\vec{w}, b}||\vec{w}|| minw ,b∣∣w ∣∣

s.t. y i ( w ⃗ T ϕ ( x ⃗ i ) + b ) ≥ 1 , i = 1 , 2 , . . . , m y_{i}(\vec{w}^{T}\phi (\vec{x}_{i})+b) \ge 1, i=1,2,...,m yi(w Tϕ(x i)+b)1,i=1,2,...,m

  其对偶命题为:

    g ( α ⃗ ) = ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j ϕ ( x ⃗ i ) T ϕ ( x ⃗ j ) g(\vec{\alpha})=\sum_{i=1}^{m}\alpha _{i}-\frac{1}{2} \sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_{i}\alpha_{j}y_{i}y_{j}\phi (\vec{x}_{i})^{T}\phi (\vec{x}_{j}) g(α )=i=1mαi21i=1mj=1mαiαjyiyjϕ(x i)Tϕ(x j)
   
    max ⁡ α ⃗ g ( α ⃗ ) \max _{\vec{\alpha}}g(\vec{\alpha}) maxα g(α )

s . t . s.t. s.t. α i ≥ 0 \alpha_{i} \ge 0 αi0,   ( i = 1 , . . . , m ) (i=1,...,m) (i=1,...,m)

    ∑ i = 1 m α i y i = 0 \sum_{i=1}^{m}\alpha_{i}y_{i}=0 i=1mαiyi=0

核函数应用

   由于\phi (\vec{x})的维度可能很高,甚至可能无穷维,上式中的 ϕ ( x ⃗ i ) T ϕ ( x ⃗ j ) \phi (\vec{x}_{i})^{T}\phi (\vec{x}_{j}) ϕ(x i)Tϕ(x j)可能并不好计算。于是我们设想这样一个函数(这被称为核技巧):

κ ( x ⃗ i , x ⃗ j ) = < ϕ ( x ⃗ i ) , ϕ ( x ⃗ j ) > = ϕ ( x ⃗ i ) T ϕ ( x ⃗ j ) \kappa (\vec{x}_{i},\vec{x}_{j})=<\phi(\vec{x}_{i}), \phi(\vec{x}_{j})>=\phi (\vec{x}_{i})^{T}\phi (\vec{x}_{j}) κ(x i,x j)=<ϕ(x i),ϕ(x j)>=ϕ(x i)Tϕ(x j)

   这个函数的意义是我们直接研究 ϕ ( x ⃗ i ) \phi (\vec{x}_{i}) ϕ(x i) ϕ ( x ⃗ j ) \phi (\vec{x}_{j}) ϕ(x j)的内积,而不直接计算两者的具体值。于是问题转化为了:

    g ( α ⃗ ) = ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j κ ( x ⃗ i , x ⃗ j ) g(\vec{\alpha})=\sum_{i=1}^{m}\alpha _{i}-\frac{1}{2} \sum_{i=1}^{m}\sum_{j=1}^{m}\alpha_{i}\alpha_{j}y_{i}y_{j}\kappa (\vec{x}_{i},\vec{x}_{j}) g(α )=i=1mαi21i=1mj=1mαiαjyiyjκ(x i,x j)
   
    max ⁡ α ⃗ g ( α ⃗ ) \max _{\vec{\alpha}}g(\vec{\alpha}) maxα g(α )

s . t . s.t. s.t. α i ≥ 0 \alpha_{i} \ge 0 αi0,   ( i = 1 , . . . , m ) (i=1,...,m) (i=1,...,m)

    ∑ i = 1 m α i y i = 0 \sum_{i=1}^{m}\alpha_{i}y_{i}=0 i=1mαiyi=0

   对于不同的 ϕ ( ⋅ ) \phi(\cdot ) ϕ(),显然对应着不同的 κ ( ⋅ , ⋅ ) \kappa (\cdot,\cdot) κ(,),选定合适的 ϕ ( ⋅ ) \phi(\cdot ) ϕ()后可以提前求出 κ ( ⋅ , ⋅ ) \kappa (\cdot,\cdot) κ(,),就可以减少计算量。
   基于上述求解后得到:

f ( x ) = w ⃗ T ϕ ( x ⃗ ) + b f(x)=\vec{w}^{T}\phi (\vec{x})+b f(x)=w Tϕ(x )+b
    = ∑ i = 1 m α i y i ϕ ( x ⃗ i ) T ϕ ( x ⃗ ) + b =\sum_{i=1}^{m}\alpha _{i}y_{i}\phi(\vec{x}_{i})^{T}\phi(\vec{x}) + b =i=1mαiyiϕ(x i)Tϕ(x )+b
    = ∑ i = 1 m α i y i κ ( x ⃗ , x ⃗ i ) =\sum_{i=1}^{m}\alpha _{i}y_{i}\kappa (\vec{x},\vec{x}_{i}) =i=1mαiyiκ(x ,x i)

这里 x ⃗ \vec{x} x 是测试数据点, x i x_{i} xi为每一个训练数据点

   上式显示出模型最优解可以通过训练样本的核函数展开,被称为支持向量展式

寻找核函数

  接下来就是确定一个合适的核函数。合适的核函数是否一定存在呢?什么样的函数适合作核函数呢?我们有以下定理:
在这里插入图片描述

  对称性很好理解,而半正定性则有以下原因:
在这里插入图片描述
  概括以下就是保持原有问题的凸性不变,维持束缚条件,保证参数的合理性和收敛性。(个人理解)

  需要注意的是,在不知道特征映射的形式时,我们是无法知道什么样的核函数是合适的。如果核函数选择不当,将会成为影响模型性能的最大变数。

  常用的核函数有:

名称表达式参数用途&补充
Linear Kernel(线性核函数 κ ( x ⃗ i , x ⃗ j ) = x ⃗ i T x ⃗ j \kappa (\vec{x}_{i},\vec{x}_{j})=\vec{x}_{i}^{T}\vec{x}_{j} κ(x i,x j)=x iTx j不进行任何映射,适用于线性可分的数据。
Polynomial Kernel(多项式核) κ ( x ⃗ i , x ⃗ j ) = ( x ⃗ i T x ⃗ j + c ) d \kappa (\vec{x}_{i},\vec{x}_{j})=(\vec{x}_{i}^{T}\vec{x}_{j}+c)^{d} κ(x i,x j)=(x iTx j+c)d d ≥ 1 d \ge 1 d1为多项式的次数用于捕捉数据的非线性关系。
Gaussian Kernel(高斯核) κ ( x ⃗ i , x ⃗ j ) = e x p ( − ∣ ∣ x ⃗ i − x ⃗ j ∣ ∣ 2 2 σ 2 ) \kappa (\vec{x}_{i},\vec{x}_{j})=exp(-\frac{\mid \mid \vec{x}_{i}-\vec{x}_{j}\mid \mid ^{2}}{2\sigma ^{2}} ) κ(x i,x j)=exp(2σ2∣∣x ix j2) σ > 0 \sigma > 0 σ>0为高斯核的带宽控制数据点的局部影响。非常强大的非线性核函数,常用于复杂的分类和回归任务。
Laplacian Kernel(拉普拉斯核) κ ( x ⃗ i , x ⃗ j ) = e x p ( − ∣ ∣ x ⃗ i − x ⃗ j ∣ ∣ σ ) \kappa (\vec{x}_{i},\vec{x}_{j})=exp(-\frac{\mid \mid \vec{x}_{i}-\vec{x}_{j}\mid \mid }{\sigma} ) κ(x i,x j)=exp(σ∣∣x ix j∣∣) σ > 0 \sigma > 0 σ>0拉普拉斯核完全等价于指数核,唯一的区别在于前者对参数的敏感性降低,也是一种径向基核函数
Exponential Kernel(指数核) κ ( x ⃗ i , x ⃗ j ) = e x p ( − ∣ ∣ x ⃗ i − x ⃗ j ∣ ∣ 2 σ 2 ) \kappa (\vec{x}_{i},\vec{x}_{j})=exp(-\frac{\mid \mid \vec{x}_{i}-\vec{x}_{j}\mid \mid }{2\sigma^{2}} ) κ(x i,x j)=exp(2σ2∣∣x ix j∣∣) σ > 0 \sigma > 0 σ>0指数核函数就是高斯核函数的变种,它仅仅是将向量之间的L2距离调整为L1距离,这样改动会对参数的依赖性降低,但是适用范围相对狭窄。
Sigmoid Kernel(Sigmoid 核) κ ( x ⃗ i , x ⃗ j ) = t a n h ( β x ⃗ i T x ⃗ j + θ ) \kappa (\vec{x}_{i},\vec{x}_{j})=tanh(\beta\vec{x}_{i}^{T}\vec{x}_{j}+\theta) κ(x i,x j)=tanh(βx iTx j+θ) β > 0 \beta>0 β>0 θ < 0 \theta<0 θ<0这个核函数试图模仿神经网络中的Sigmoid激活函数,但在某些情况下可能不会产生半正定核矩阵。
Laplace核 κ ( x ⃗ i , x ⃗ j ) = e x p ( − γ ∣ ∣ x ⃗ i − x ⃗ j ∣ ∣ ) \kappa (\vec{x}_{i},\vec{x}_{j})=exp(-\gamma\mid\mid\vec{x}_{i}-\vec{x}_{j}\mid\mid) κ(x i,x j)=exp(γ∣∣x ix j∣∣)与高斯核类似,但使用Laplace分布而非高斯分布。
ANOVA Kernel(方差分析内核) κ ( x ⃗ i , x ⃗ j ) = ∏ t = 1 n e x p ( − γ ( x i , t − x j , t ) 2 ) \kappa (\vec{x}_{i},\vec{x}_{j})=\prod_{t=1}^{n}exp(-\gamma(x_{i,t}-x_{j,t})^{2}) κ(x i,x j)=t=1nexp(γ(xi,txj,t)2)主要用于分析方差(ANOVA)问题
Wave Kernel(波形核) κ ( x ⃗ i , x ⃗ j ) = e x p ( − 1 2 σ 2 s i n 2 ( π L ∣ x i − x j ∣ ) ) \kappa (\vec{x}_{i},\vec{x}_{j})=exp(-\frac{1}{2\sigma ^{2}}sin^{2}(\frac{\pi }{L}\mid x_{i}-x_{j}\mid)) κ(x i,x j)=exp(2σ21sin2(Lπxixj)) σ > 0 \sigma >0 σ>0控制相似性衰减的速度, L L L
L 是周期长度适用于语音处理场景
Log Kernel(对数核) κ ( x ⃗ i , x ⃗ j ) = l o g ( 1 + γ ∣ ∣ x ⃗ i − x ⃗ j ∣ ∣ 2 ) \kappa (\vec{x}_{i},\vec{x}_{j})=log(1+\gamma\mid\mid\vec{x}_{i}-\vec{x}_{j}\mid\mid^{2}) κ(x i,x j)=log(1+γ∣∣x ix j2)一般在图像分割上经常被使用

  一般根据经验,文本数据通常用线性核,情况不明时可以采用高斯核。

  我们还可以通过变形与组合已有核函数的方式来创造新的核函数,如:

  (1)若 κ 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

  (2)若 κ 1 \kappa_{1} κ1 κ 2 \kappa_{2} κ2核函数,则核函数直积也为核函数

κ 1 ⊗ κ 2 ( x ⃗ , z ⃗ ) = κ 1 ( x ⃗ , z ⃗ ) κ 2 ( x ⃗ , z ⃗ ) \kappa_{1}\otimes \kappa_{2}(\vec{x},\vec{z})=\kappa_{1}(\vec{x},\vec{z})\kappa_{2}(\vec{x},\vec{z}) κ1κ2(x ,z )=κ1(x ,z )κ2(x ,z )

  (3)若 κ 1 \kappa_{1} κ1核函数,则对任意函数 g ( x ⃗ ) g(\vec{x}) g(x ),如下定义的 κ \kappa κ也是核函数

κ ( x ⃗ , z ⃗ ) = g ( x ⃗ ) κ 1 ( x ⃗ , z ⃗ ) g ( z ⃗ ) \kappa(\vec{x},\vec{z})=g(\vec{x})\kappa_{1}(\vec{x},\vec{z})g(\vec{z}) κ(x ,z )=g(x )κ1(x ,z )g(z )

总结

  核函数的使用使得机器学习算法能够在复杂的特征空间中进行操作,而无需显式地计算该空间中的特征值,从而避免了“维度灾难”。核方法允许算法在高维空间中工作,同时保留了数据的原始维度,这在处理大量数据和高维数据集时非常有用。

  在实际应用中,选择合适的核函数对于模型的性能至关重要,这通常取决于问题的特性以及数据的分布和结构。


http://www.niftyadmin.cn/n/5664909.html

相关文章

深度学习-点击率预估-研究论文2024-09-14速读

深度学习-点击率预估-研究论文2024-09-14速读 1. Deep Target Session Interest Network for Click-Through Rate Prediction H Zhong, J Ma, X Duan, S Gu, J Yao - 2024 International Joint Conference on Neural Networks, 2024 深度目标会话兴趣网络用于点击率预测 摘…

JAVA基础:正则表达式,String的intern方法,StringBuilder可变字符串特点与应用,+连接字符串特点

1 String中的常用方法2 1.1 split方法 将字符串按照指定的内容进行分割&#xff0c;将分割成的每一个子部分组成一个数组 分割内容不会出现在数组中 实际上该方法不是按照指定的简单的符号进行分割的&#xff0c;而是按照正则表达式进行分割 1.2 正则表达式 用简单的符号组合…

linux-系统管理与监控-设备管理

Linux 系统管理与监控&#xff1a;设备管理 在 Linux 系统中&#xff0c;设备管理是操作系统管理硬件资源的重要部分。通过设备管理&#xff0c;系统能够与计算机的硬件组件&#xff08;如存储设备、网络接口、输入输出设备等&#xff09;进行交互&#xff0c;并提供一个抽象的…

企业架构如何推动组织中成功的数字化转型

在当今的数字世界中&#xff0c;成功数字化转型的需求比以往任何时候都更加重要。公司越来越多地参与数字化转型&#xff0c;以保持相关性和竞争力。然而&#xff0c;数字化转型不仅仅是技术更新。它需要一种战略方法来整合业务流程、模型和目标。这就是企业架构发挥作用的地方…

基于open-gpu-kernel-modules的p2p vram映射bar1提高通信效率

背景 bar1 Base Address Register 1 用于内存映射的寄存器&#xff0c;定义了设备的内存映射区域&#xff0c;BAR1专门分配给gpu的一部分内存区域&#xff0c;允许cpu通过pcie总线直接访问显存VRAM中的数据。但bar1的大小是有限的&#xff0c;在常规的4090上&#xff0c;bar1只…

dcmtk的自动输入数据纠错模式对DICOMDIR读取的影响

软件版本 dcmtk 3.6.7 自动纠错的全局变量 输入数据的自动纠错是一个全局变量&#xff0c;定义在dcmtk/dcmdata/dcobject.h中&#xff0c;如下所示&#xff1a; /** This flags defines whether automatic correction should be applied to input* data (e.g.\ stripping …

【C语言】带你手把手拿捏指针(3)(含转移表)

文章目录 一、字符指针变量二、数组指针变量1.数组指针变量是什么2.数组指针变量的初始化 三、二维数组传参的本质四、函数指针变量1. 函数指针变量的创建2.函数指针的使用3.案例解析&#xff1a; 五、typedof关键字六、函数指针数组和转移表1.函数指针数组2.转移表 一、字符指…

TypeScript 枚举

枚举: 使用枚举我们可以定义一些带名字的常量。 使用枚举可以清晰地表达意图或创建一组有区别的用例。 TypeScript支持数字的和基于字符串的枚举。 例子&#xff1a; function a(sex: string) {console.log(张三的性别是:${sex});} a(男); a(狗); 用枚举&#xff1a; 1.en…