SVM的核函数详解

article/2025/8/18 3:47:16

文章目录

1、核函数背景

本文为核函数进阶教程,希望看文章之前最好对核函数有一些最基本的了解,不然有些地方可能会看不太懂。
我们来看一下我们面临的一个实际问题
在这里插入图片描述
如图所示,要在二维空间中找一个超平面(此时是一条直线)奖两个类别划分开,是不太可能的事情。这个时候我们就需要核函数帮助我们进行升维操作,再更高维的空间中寻找超平面将两个类别进行划分。
我们假设存在一个维度转换函数 ϕ ( x ) \phi(x) ϕ(x),可以将二维空间映射到三维空间。在二维空间中, X = ( x 1 , x 2 ) X=(x_{1},x_{2}) X=(x1,x2),映射到三维空间后, ϕ ( x ) = ( x 1 , x 2 , x 1 2 − x 2 2 ) \phi(x)=(x_{1},x_{2},x_{1}^{2}-x_{2}^{2}) ϕ(x)=(x1,x2,x12x22),这个时候,在二维空间中的四个点坐标分别维 ( 0 , 0 ) , ( 0 , 1 ) , ( 1 , 0 ) , ( 1 , 1 ) (0,0),(0,1),(1,0),(1,1) (0,0),(0,1),(1,0),(1,1),映射到三维空间后,点坐标对应为 ( 0 , 0 , 0 ) , ( 0 , 1 , 1 ) , ( 1 , 0 , 1 ) , ( 1 , 1 , 0 ) (0,0,0),(0,1,1),(1,0,1),(1,1,0) (0,0,0),(0,1,1),(1,0,1),(1,1,0)。如下图所示:
在这里插入图片描述
这个时候,我们很容易在三维空间找到一个平面将两个类别进行划分。这里存在一个核技巧,我们不用去过分关注 ϕ ( x ) \phi(x) ϕ(x)具体是什么形式,因为很复杂,我们只需要关注 < ϕ ( x ) , ϕ ( z ) <\phi (x),\phi(z) <ϕ(x),ϕ(z)即可。为什么呢,具体涉及到求解SVM过程中我们只需要知道 < ϕ ( x ) , ϕ ( z ) <\phi (x),\phi(z) <ϕ(x),ϕ(z)就可以求解出超平面,而不需要具体知道 ϕ ( x ) \phi(x) ϕ(x)的具体情况。
另外,我们通常所使用的核函数一般都是正定核函数。

核函数正式定义

定义1:如果存在一个函数K,对应输入为 X × X , X ∈ R X \times X,X \in R X×X,XR,对于任意 ∀ x , z ∈ X \forall x,z \in X x,zX,存在 ∃ ϕ : X → Z \exists \phi:X \rightarrow Z ϕ:XZ(将输入空间映射到更高维的空间Z),并且满足于条件 s . t . k ( x , z ) = < ϕ ( x ) , ϕ ( z ) > s.t. \;k(x,z)=<\phi (x),\phi(z)> s.t.k(x,z)=<ϕ(x),ϕ(z)>,则称 k ( x , z ) k(x,z) k(x,z)为正定核函数。
定义2:如果存在一个函数K,对应输入为 X × X , X ∈ R X \times X,X \in R X×X,XR,对于任意 ∀ x , z ∈ X \forall x,z \in X x,zX,存在 ∃ ϕ : X → Z \exists \phi:X \rightarrow Z ϕ:XZ(将输入空间映射到更高维的空间Z),k(x,z)满足①对称性,即 k ( x , z ) = k ( z , x ) k(x,z)=k(z,x) k(x,z)=k(z,x),②正定性,矩阵
[ k ( x 1 , x 1 ) k ( x 1 , x 2 ) . . . k ( x 1 , x m ) k ( x 2 , x 1 ) k ( x 2 , x 2 ) . . . k ( x 2 , x m ) k ( x m , x 1 ) k ( x m , x 2 ) . . . k ( x m , x m ) ] \begin{bmatrix} k(x_{1},x_{1}) & k(x_{1},x_{2})&...& k(x_{1},x_{m})\\ k(x_{2},x_{1})& k(x_{2},x_{2})& ... & k(x_{2},x_{m})\\ k(x_{m},x_{1})& k(x_{m},x_{2})& ... & k(x_{m},x_{m}) \\ \end{bmatrix} k(x1,x1)k(x2,x1)k(xm,x1)k(x1,x2)k(x2,x2)k(xm,x2).........k(x1,xm)k(x2,xm)k(xm,xm)
为半正定矩阵,则称 k ( x , z ) k(x,z) k(x,z)为正定核函数。这里太理论了,大概了解一下就好。

2、高斯核函数

高斯核函数的定义为
k ( x i , x j ) = e x p ( ∣ ∣ x i − x j ∣ ∣ 2 2 σ 2 ) = e x p ( − γ ∣ ∣ x i − x j ∣ ∣ 2 ) k(x_{i},x_{j})=exp(\frac{||x_{i}-x_{j}||^{2}}{2\sigma^{2}})=exp(-\gamma||x_{i}-x_{j}||^{2}) k(xi,xj)=exp(2σ2∣∣xixj2)=exp(γ∣∣xixj2)
我们首先思考一个问题,高斯核函数将原始的特征空间提升了多少的维度
答案是无论原始的特征空间维度为多少,经过高斯核函数变换之后,特征空间都对应到了无穷维
为什么是无穷维呢?
我们将高斯核函数进行展开,得到
k ( x 1 , x 2 ) = e x p ( x 1 2 + x 2 2 − 2 x 1 x 2 2 σ 2 ) = e x p ( x 1 2 2 σ 2 ) × e x p ( x 2 2 2 σ 2 ) × e x p ( x 1 x 2 σ 2 ) k(x_{1},x_{2})=exp(\frac{ x_{1}^{2}+x_{2}^{2}-2x_{1}x_{2} }{ 2\sigma^{2} })=exp(\frac{x_{1}^{2}}{2\sigma^{2}})\times exp(\frac{x_{2}^{2}}{2\sigma^{2}})\times exp(\frac{x_{1}x_{2}}{\sigma^{2}}) k(x1,x2)=exp(2σ2x12+x222x1x2)=exp(2σ2x12)×exp(2σ2x22)×exp(σ2x1x2)
上式的三项中,我们知道,如果仅存在前面两项,则并没有进行升维操作,我们将前两项忽略,重点关注第三项。
根据泰勒展开式
e x = 1 + x 1 ! + x 2 2 ! + . . . e^{x}=1+\frac{x}{1!}+\frac{x^{2}}{2!}+... ex=1+1!x+2!x2+...
将第三项展开得到
1 + x 1 σ x 2 σ + . . . + ( x 1 n ) n ( n ! ) ( x 2 n ) n ( n ! ) 1+\frac{x_{1}}{\sigma}\frac{x_{2}}{\sigma}+...+\frac{ (\frac{x_{1}}{n})^{n} }{ \sqrt(n!) }\frac{ (\frac{x_{2}}{n})^{n} }{ \sqrt(n!) } 1+σx1σx2+...+( n!)(nx1)n( n!)(nx2)n
第三项可以展开写成两个向量相乘的形式
[ 1 , x 1 σ , . . . ] [ 1 , x 2 σ , . . . ] T [1 , \frac{x_{1}}{\sigma},...][1 , \frac{x_{2}}{\sigma},...]^{T} [1,σx1,...][1,σx2,...]T
因此,我们知道高斯核函数将原始特征空间上升到无穷维。

2.2 参数带宽 σ \sigma σ的影响

假设我们将两个点x1,x2映射到无穷空间中,得到 ϕ ( x 1 ) , ϕ ( x 2 ) \phi(x_{1}),\phi(x_{2}) ϕ(x1),ϕ(x2),在高维空间中两个点之间的欧式距离为
d = ∣ ∣ ϕ ( x 1 ) − ϕ ( x 2 ) ∣ ∣ 2 = ϕ ( x 1 ) 2 + ϕ ( x 2 2 ) − 2 ϕ ( x 1 ) ϕ ( x 2 ) d=||\phi(x_{1})-\phi(x_{2})||^{2}=\phi(x_{1})^{2}+\phi(x_{2}^{2})-2\phi(x_{1})\phi(x_{2}) d=∣∣ϕ(x1)ϕ(x2)2=ϕ(x1)2+ϕ(x22)2ϕ(x1)ϕ(x2)
根据核函数的定义,我们知道
ϕ ( x 1 , x 1 ) = e x p ( 0 ) = ϕ ( x 2 , x 2 ) \phi(x_{1},x_{1})=exp(0)=\phi(x_{2},x_{2}) ϕ(x1,x1)=exp(0)=ϕ(x2,x2)
这样,我们将距离化简为
d = 2 − 2 × e x p ( − ∣ ∣ x 1 − x 2 ∣ ∣ 2 2 σ 2 ) d=2-2\times exp(-\frac{||x_{1}-x_{2}||^{2}}{2\sigma^{2}}) d=22×exp(2σ2∣∣x1x22)
σ 为无穷时, d → 0 \sigma为无穷时,d \rightarrow0 σ为无穷时,d0,在高维空间中对样本点的区分程度下降,容易造成欠拟合。
σ 为 o 时, d → 2 \sigma为o时,d \rightarrow2 σo时,d2,在高维空间中对样本点的区分度最高,容易造成过拟合。

2.3高斯核函数的实际意义

高斯核函数实际反应了特征空间中两个点之间的相似性大小。当 σ \sigma σ确定时,两点之间的距离越大,相似度趋近于0,两点之间的距离越小,相似度趋近于1.

2、多项式核函数

多项式核函数为
k ( x i , x j ) = ( c + x i T x j ) d k(x_{i},x_{j})=(c+x_{i}^{T}x_{j})^{d} k(xi,xj)=(c+xiTxj)d
我们来看一个例子,假设存在一个维度转换函数 ϕ ( x ) \phi(x) ϕ(x),原始向量为 x = ( x 1 , x 2 ) x=(x_{1},x_{2}) x=(x1,x2),转换后得到 ϕ ( x ) = ( 1 , 2 x 1 , 2 x 2 , x 1 2 , x 2 2 , 2 x 1 x 2 ) \phi(x)=(1,\sqrt{2}x_{1},\sqrt{2}x_{2},x_{1}^{2},x_{2}^{2},\sqrt{2}x_{1}x_{2}) ϕ(x)=(1,2 x1,2 x2,x12,x22,2 x1x2)
求内积得到
< ϕ ( x i ) , ϕ ( x j ) > = ( 1 , 2 x i 1 , 2 x i 2 , x i 1 2 , x i 2 2 , 2 x i 1 x i 2 ) ⋅ ( 1 , 2 x j 1 , 2 x j 2 , x j 1 2 , x j 2 2 , 2 x j 1 x j 2 ) = 1 + 2 x i 1 x j 1 + 2 x i 2 x j 2 + x i 1 2 x j 1 2 + x i 2 2 x j 2 2 + 2 x i 1 x j 1 x i 2 x j 2 = ( 1 + x i 1 x j 1 + x i 2 x j 2 ) 2 <\phi(x_{i}),\phi(x_{j})>=(1,\sqrt{2}x_{i1},\sqrt{2}x_{i2},x_{i1}^{2},x_{i2}^{2},\sqrt{2}x_{i1}x_{i2}) \cdot (1,\sqrt{2}x_{j1},\sqrt{2}x_{j2},x_{j1}^{2},x_{j2}^{2},\sqrt{2}x_{j1}x_{j2})=\\1+2x_{i1}x_{j1}+2x_{i2}x_{j2}+x_{i1}^{2}x_{j1}^{2}+x_{i2}^{2}x_{j2}^{2}+2x_{i1}x_{j1}x_{i2}x_{j2}\\=(1+x_{i1}x_{j1}+x_{i2}x_{j2})^{2} <ϕ(xi),ϕ(xj)>=(1,2 xi1,2 xi2,xi12,xi22,2 xi1xi2)(1,2 xj1,2 xj2,xj12,xj22,2 xj1xj2)=1+2xi1xj1+2xi2xj2+xi12xj12+xi22xj22+2xi1xj1xi2xj2=(1+xi1xj1+xi2xj2)2
从这个例子我们再次深入体会了什么是核技巧,kernel trick。直接去求解 ϕ ( x ) \phi(x) ϕ(x)是非常艰难的,但是求解 < ϕ ( x i , ϕ ( x j ) > <\phi(x_{i},\phi(x_{j})> <ϕ(xi,ϕ(xj)>却是十分方便的。
当参数c和d确定时,新维度数也就确定了。例如上面的例子中,新维度数是6维。
假如设定参数c为0,那么
K ( x i , x j ) = ( x i ⋅ x j ) 2 = ( x i 1 x j 1 + x i 2 x j 2 ) 2 = x i 1 2 x j 1 2 + x i 2 2 x j 2 2 + 2 x i 1 x j 1 x i 2 x j 2 K(x_{i},x_{j})=(x_{i} \cdot x_{j})^{2}=(x_{i1}x_{j1}+x_{i2}x_{j2})^{2}=x_{i1}^{2}x_{j1}^{2}+x_{i2}^{2}x_{j2}^{2}+2x_{i1}x_{j1}x_{i2}x_{j2} K(xi,xj)=(xixj)2=(xi1xj1+xi2xj2)2=xi12xj12+xi22xj22+2xi1xj1xi2xj2
这个时候,维度转换函数为
ϕ ( x ) = ( x 1 2 , x 2 2 , 2 x 1 x 2 ) \phi(x)=(x_{1}^{2},x_{2}^{2},\sqrt{2}x_{1}x_{2}) ϕ(x)=(x12,x22,2 x1x2)
这个时候,新维度数就变成了3维。
如何确定新特征空间的维度数呢?
k ( x i , x j ) = ( c + x i T x j ) d k(x_{i},x_{j})=(c+x_{i}^{T}x_{j})^{d} k(xi,xj)=(c+xiTxj)d进行展开,展开后有几项,新特征空间的维度数量便有多少。
这里的参数c对高维空间的影响是什么?
有c的存在,高维空间中还保留了原始低维空间中的维度,例如 2 x 1 \sqrt{2}x_{1} 2 x1等。使得结果同时具有高低此项,维度更为丰富。而c=0时,高维空间中的低次项没有了,全是高次项。

4、参考资料

1、【数之道26】SVM支持向量机-核技巧Kernel Trick详解(多项式核函数,无限维度高斯核函数)
2、机器学习 svm 高斯核函数
3、机器学习–核方法(Kernel Method)


http://chatgpt.dhexx.cn/article/69ToWTf0.shtml

相关文章

常见核函数

这篇博文开始的例子就很好地揭示了核函数的简单原理&#xff0c;写得很好&#xff01; 原地址&#xff1a;https://blog.csdn.net/zkq_1986/article/details/52448238 1 核函数K&#xff08;kernel function&#xff09;定义 核函数K&#xff08;kernel function&#xff09;就…

CUDA核函数

核函数是指在GPU端运行的代码&#xff0c;核函数内部主要干了什么&#xff1f;简而言之&#xff0c;就是规定GPU的各个线程访问哪个数据并执行什么计算。 文章目录 一、CUDA规范二、核函数内部线程的使用2.1 如何启动核函数 一、CUDA规范 编写核函数必须遵循CUDA规范&#xff…

SVM与核函数

文章目录 核技巧与SVM核函数本质线性可分的SVM与硬间隔最大化SVM对偶算法核技巧高斯核多种不同的核函数比较soft margin 问题核函数 核函数 核技巧与SVM SVM原本是用来解决二分类的分类模型 它和感知机不同的一点是它取到的分类器是在特征空间上的最大间隔的分类器 而为了解决…

核函数(核技巧)

核技巧Kernel trick 背景及含义&#xff1a; 对于 原始样本空间内或许不存在能正确划分两类样本的超平面 问题&#xff0c;考虑 将样本从原始空间映射到一个更高维的特征空间&#xff0c;使得样本在这个特征空间内线性可分。 令 ϕ ( x ) \phi(x) ϕ(x)表示将x映射后的特征向量…

了解核函数

1、核函数定义&#xff1a; 核函数包括线性核函数、多项式核函数、高斯核函数等&#xff0c;其中高斯核函数最常用&#xff0c;可以将数据映射到无穷维&#xff0c;也叫做径向基函数&#xff08;Radial Basis Function 简称 RBF&#xff09;&#xff0c;是某种沿径向对称的标量…

核函数

对于优化问题&#xff1a; 的求解需要计算这个内积&#xff0c;而如果输入样本线性不可分的话&#xff0c;我们采取的方法是通过函数映射将输入样本映射到另外一个高维空间并使其线性可分。 以库克定律为例(http://zh.wikipedia.org/zh-cn/%E9%9D%99%E7%94%B5%E5%8A%9B)&#x…

什么是核函数?如何理解?

个人理解&#xff0c;核函数的功能就是从低维度的空间向高维度空间转换的函数&#xff0c; 因为在低维空间不可以线性分类的问题到高维度空间就可以线性分类的。 其求法为 低维空间的点映射到高维空间的点后&#xff0c;两个点的内积 就是核函数。 ~~~~~~~~~~~~~~~~~~~~~~~~…

你知道什么是核函数吗

目录 一、常用核函数&#xff1a;二、核函数特点&#xff1a;三、选择核函数的方法&#xff1a;四、核函数方法实施步骤&#xff1a;五、核函数在模式识别中的应用&#xff1a;六、核函数方法原理&#xff1a; 核函数K&#xff08;kernel function&#xff09;就是指K(x, y) &…

kernel核函数是什么、用来干什么 及其详细推导

在说核函数之前,我们先说说映射及其作用. 如果在当前空间对数据类别不好使用线性函数进行划分&#xff0c;则通过一个函数φ( x)将数据点从当前空间映射到另一空间去&#xff08;映射后的空间叫特征空间&#xff0c;通常是更高维的空间&#xff0c;当然不是绝对&#xff09;以方…

核函数(Kernel function)(举例说明,通俗易懂)

已知有一组向量&#xff0c;可用线性函数去探索其是否具有线性关系&#xff0c;若数据之间是非线性呢&#xff1f; 非线性数据是指只有利用非线性模型才能更好的预测。但非线性问题往往不好求解&#xff0c;所以希望用解线性分类问题的方法解决这个问题。所采取的方法是进行一…

Linux笔记(5):库文件

1、库文件 库是一组预先编译好的方法的集合。 Linux系统存储的库的位置一般在/lib和/usr/lib。库的头文件一般被存储在/usr/include下货其子目录下。 库有两种&#xff1a; &#xff08;1&#xff09;静态库&#xff0c;命令规则&#xff1a;libxxx.a &#xff08;2&#…

vs2019添加库文件

vs2019添加库文件 环境&#xff1a;windows10&#xff0c;64位&#xff0c;vs2019 vs安装路径&#xff1a;D:\visual_studio 需要的材料&#xff1a;头文件&#xff0c;编译好的库文件 方法一 以GLFW为例&#xff0c;找到IDE或者编译器的**/lib和/include文件夹&#xff0…

【Linux基础】静态库和共享库(如何自定义库文件?)

文章目录 前言一、库文件的基本知识1.库文件分类2.库文件命名 二、如何自定义静态库?1.静态库简介2.具体流程&#xff08;详细步骤&#xff09;3.静态库缺点 三、如何自定义共享库?1.共享库简介2.具体流程&#xff08;详细步骤&#xff09;3.共享库优点 四、静态库与共享库区…

Linux 系统上的库文件生成与使用

1.库文件 库是一组预先编译好的方法的集合。Linux系统存储的库的位置一般在&#xff1a;/lib 和 /usr/lib。 在 64 位的系统上有些库也可能被存储在/usr/lib64 下。库的头文件一般会被存储在 /usr/include 下或其子目录下。 库有两种&#xff0c;一种是静态库&#xff0c;其…

库文件、静态库(lib)与动态库(dll)的生成与使用

静态库 程序编译一般需经预处理、编译、汇编和链接几个步骤。在应用中&#xff0c;有一些公共代码是需要反复使用&#xff0c;就把这些代码编译为“库”文件&#xff1b;在链接步骤中&#xff0c;连接器将从库文件取得所需的代码&#xff0c;复制到生成的可执行文件中。这种库…

库文件的生成和使用

一、库文件 库是一组预先编译好的函数方法的集合 Linux上库文件的存放位置: /lib和/usr/lib 库分为两种:静态库和共享库 Linux上静态库标识&#xff08;libxxx.a&#xff09;,共享库&#xff08;libxxx.so&#xff09; Windows上静态库标识&#xff08;.lib&#xff09;&a…

3、库文件

1、什么式库文件&#xff1a; 库文件是预先编译好的方法的集合。&#xff08;相当于一大堆的可执行文件&#xff09; 存放头文件的标准目录&#xff1a;/usr/include 存放库文件的标准目录&#xff1a;/usr/lib 比如: printf函数的实现在库文件中 libcs.so 声明在/usr/inc…

库文件:静态库与动态库的生成和使用

0.引言 当进行C语言的编写时&#xff0c;想要查看标准库的某个函数是怎样实现的&#xff0c;比如 stdio.h 里的 printf 函数&#xff0c;跳转后只能看见函数声明&#xff0c;而无法跳转到函数的定义处&#xff0c;为什么无法查看函数的定义&#xff0c;这就涉及到库文件使用。…

【C++】静态库和动态库文件的生成和使用

前言 文章目录 前言库文件静态库的生成hello.hhello.cmain.c 动态库的生成GCC命令相同时&#xff0c;会先执行.a文件&#xff0c;还是会先执行.so文件&#xff1f;静态库与动态库的区别使用静态库的使用动态库的使用 总结 本文主要讲解了静态库和动态库的生成&#xff0c;以及.…

标准库文件

工艺库有db文件和lib文件&#xff0c;db是打不开的&#xff0c;lib是打得开的。 以反向器为例&#xff0c;时序弧上的延迟由两个因素影响&#xff0c;负载越大&#xff0c;延迟越大&#xff1b;输入转换时间越大&#xff0c;延迟越大。 随着工艺更加先进&#xff0c;线性模…