首页 > 其他分享 >【自学笔记】支持向量机(2)——核函数

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

时间:2024-09-17 10:23:47浏览次数:3  
标签:phi kappa 函数 mid 笔记 vec alpha 自学 向量

引入

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

  文章内容由《机器学习》相关内容,网络资源,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​αi​−21​∑i=1m​∑j=1m​αi​αj​yi​yj​ϕ(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 αi​≥0,   ( 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​αi​yi​=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​αi​−21​∑i=1m​∑j=1m​αi​αj​yi​yj​κ(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 αi​≥0,   ( 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​αi​yi​=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​αi​yi​ϕ(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​αi​yi​κ(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 iT​x 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 iT​x j​+c)d d ≥ 1 d \ge 1 d≥1为多项式的次数用于捕捉数据的非线性关系。
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 i​−x j​∣∣2​) σ > 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 i​−x 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 i​−x 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 iT​x 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 i​−x 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=1n​exp(−γ(xi,t​−xj,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σ21​sin2(Lπ​∣xi​−xj​∣)) σ > 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 i​−x j​∣∣2)一般在图像分割上经常被使用

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

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

  (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 )

总结

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

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

标签:phi,kappa,函数,mid,笔记,vec,alpha,自学,向量
From: https://blog.csdn.net/qq_40432278/article/details/142307296

相关文章

  • Faiss向量数据库
    安装Faiss:......
  • Linux实操笔记2 Ubuntu安装Nginx的不同方法
    今天来了解Ubuntu或者说Linux系统安装Nginx的几种办法。包括从Ubuntu的库安装到官方源码编译安装。一、Nginx是什么?以下是来自Nginx中文文档的内容。Nginx是一个高性能的Web和反向代理服务器,它具有有很多非常优越的特性:作为Web服务器:相比Apache,Nginx使用更少的......
  • C++学习笔记----7、使用类与对象获得高性能(一)---- 书写类(3)
    2.4、this指针    每个正常的成员函数调用都会隐含地传递一个指针给到对象,它就是被可能我的天this的隐藏参数。使用该指针访问数据成员或者调用成员函数,也可以将其传递给其他的成员函数或者函数。有时候它对消除有歧义的名字很有用。例如,可以给SpreadsheetCell类定义一个va......
  • C++学习笔记----7、使用类与对象获得高性能(一)---- 书写类(3)
    2.4、this指针    每个正常的成员函数调用都会隐含地传递一个指针给到对象,它就是被可能我的天this的隐藏参数。使用该指针访问数据成员或者调用成员函数,也可以将其传递给其他的成员函数或者函数。有时候它对消除有歧义的名字很有用。例如,可以给SpreadsheetCell类定义一个va......
  • 通过AI大模型现实小红书笔记克隆以及自动化发布
    文章目录前言一、实现思路二、实现步骤1.引入库2.自动登录3.生成笔记4.发布笔记三、界面演示总结前言对于文案小白来说,通过大模型可以轻松帮我们生成各种风格的文案,比如小红书风格的超萌文案。只需要简单几步操作,就能得到让你惊艳的结果。通过自动化的操作,还可以减......
  • Datawhale------Tiny-universe学习笔记——Qwen
    1.Qwen整体介绍    对于一个完全没接触过大模型的小白来说,猛一听这个名字首先会一懵:Qwen是啥。这里首先解答一下这个问题。下面是官网给出介绍:Qwen是阿里巴巴集团Qwen团队研发的大语言模型和大型多模态模型系列。其实随着大模型领域的发展,这类产品已经有很多了例如:由......
  • JUC学习笔记(一)
    文章目录一、进程与线程1.1进程与线程1)进程2)线程3)二者对比1.2并行与并发注意二、Java线程2.1创建和运行线程1)直接使用Thread2)使用Runnable配合Thread3)FutureTask配合Thread2.2查看进程线程的方法1)windows2)linux3)java2.3原理之线程运行栈与栈帧线程上下......
  • 聪明办法学Python丨202409TASK1学习笔记
        踏入Python编程的世界之初,我便深刻地体会到了这门语言的独特魅力。Python凭借其简洁明了的语法与强大的功能性,迅速吸引了我的注意。相较于C语言等编译型语言,Python的语法更加接近自然语言,这使得即使是初次接触编程的人也能快速上手。Python的设计理念强调代码的可......
  • Day20笔记-面向对象&类和对象&类中的属性和函数&构造和析构函数
    一、面向对象基础1.概念1.1面向对象的设计思想面向对象是基于万物皆对象这个哲学观点,在Python中,一切皆对象举例说明:​案例一:我想要吃大盘鸡​面向过程面向对象​1.自己去买菜1.委托一个会砍价的人帮忙去买菜​2.自己择菜2.委托一个临时工帮忙择菜​3.自己......
  • Day21笔记-封装&继承
    复习面向对象基础语法#定义类classPerson():  #类属性  num=10  #限制对象属性的动态绑定  __slots__=('name','age','hobby')  #定义实例属性  def__init__(self,name,age,hobby):    self.name=name    self......