【机器学习】SVM核方法

article/2025/9/25 18:40:15

https://blog.csdn.net/qq_32742009/article/details/81430534

 

Kernel Trick

在 SVM 中引入核方法便可使得 SVM 变为非线性分类器,给定非线性可分数据集 \left \{ (x_i,y_i)\right\}_{i=1}^N,如下图所示,此时找不到一个分类平面来将数据分开,核方法可以将数据投影到新空间,使得投影后的数据线性可分,下图给出一个 \mathbb{R}^2\rightarrow \mathbb{R}^2 的映射,原空间为 x=(x^{(1)},x^{(2)}) ,新空间为 z = \phi(x) = \left \{ (x^{(1)})^2,(x^{(2)})^2\right \} ,根据图可以看出映射后样本点的变化,此时样本便为线性可分的了,直接用 w_1 \cdot z^{(1)} +w_2 \cdot z^{(2)} +b= 0 分类即可。

1

上图是一个 \mathbb{R}^2\rightarrow \mathbb{R}^2 的映射,但一般情况下,特征空间的选取往往是很高维度的 \mathbb{R}^2\rightarrow \mathbb{R}^n ,如下为一个 \mathbb{R}^2\rightarrow \mathbb{R}^3 的映射:

1

核函数

下面给核函数一个正式定义,设 \chi 为输入空间,\omega 为特征空间,如果存在一个 \chi 到 \omega 的映射  \phi(x):\chi \rightarrow \omega ,对所有的 x,z \in \chi,函数 K(x,z) 满足 K(x,z) = \phi(x)\cdot\phi(z) ,则称 \phi(x) 为输入空间到特征空间的映射函数,K(x,z) 为核函数。

核函数常用的技巧是不计算映射函数 \phi(x) ,因为特征空间 \omega 通常是高维的,甚至无穷维,所以 \phi(x) 计算并不容易,而计算核函数 K(x,z) 却相对简单。映射 \phi(x) 取法多种多样,可以取不同的特征空间,即使在同一特征空间也可以取不同的映射。映射后的样本一般是线性可分带有异常值的,这时考虑 SVM 的优化目标:

在实际优化中还需加上KKT条件

由于在输入空间计算的是 x_i ,x_j 的内积,所以经过映射后分别为 \phi(x_i) 与 \phi(x_j) ,现在只需修改目标函数为  \phi(x_i) 与 \phi(x_j) 的内积即可,又由于 \phi(x_i) \cdot \phi(x_j) = K(x_i,x_j)  ,所以不需要定义映射函数 \phi(x) ,只需要定义核函数便可得到高维空间中内积的结果,而这便是 Kernel Trick。所以线性不可分的数据集的优化目标变为:

也就是说给定核函数 K(x,z) ,即可用求解线性 SVM 的方法来求解非线性问题,核技巧的好处在于不需要显式的定义特征空间与映射函数,只需要选择一个合适的核函数即可。综上核函数是用来免去显式计算高维变换的,直接用低维度的参数带入核函数来等价计算高维度的向量的内积

核函数的基本作用就是接受两个低维空间里的向量,能够计算出经过某个变换后在高维空间里的向量内积值。

不用去寻找高维空间的映射函数\phi(x),直接选定一个合适的核函数就好了(如高斯核就像是一个距离度量。)


插几句大白话,按照正常的思路来做,就是先计算出x_1x_2映射到高维之后的\phi (x_1),\phi (x_2),然后计算\phi (x_1)\phi (x_2)的内积,假设\phi (x)=x^2这个是多项适核。注意一下,这里x不是一个变量而是一个向量x=(x_1,x_2,\cdots ,x_N),那么计算\phi (x_1)需要N^2次乘法,同理计算\phi (x_2)也需要N^2次乘法,然后计算\phi (x_1)\phi (x_2)的乘机又需要N^2的乘法。

像这个例子一样。一方面乘法计算次数很多,计算代价很高。另一方面根本无法计算,例如高斯核,高斯核函数将样本映射成无穷维,无穷维的空间是无法单独计算\phi (x)的。

那我们如果使用核函数,以多项式核为例。



直接计算x点乘y,只需要3次乘法,然后一个平方的乘法,共4次乘法。
计算代价就降低了很多,可以传入低维的特征更高效的去计算出与不用高斯核一样的结果,不用高斯核就需要先映射到高维空间,然后两个高维特征再相乘。

核函数那么好用,当然也有自身局限。一方面在于它难以构造,另一方面在于选择一个合适的核函数也是较为困难的一件事情,需要调参不少时间。


核函数的选择

什么样的函数 K(x,z) 可以作为一个有效核函数呢?答案是只要满足 Mercer 定理 即可,即如果函数 K(x,z) 是 \mathbb{R}^n \times \mathbb{R}^n \rightarrow \mathbb{R}上的映射( 也就是两个 n 维向量映射到实数域 )。那么如果 K(x,z) 是一个有效核函数(也称为Mercer核函数),那么当且仅当其训练样本 \left \{x_1,x_2\cdots ,x_N \right \} 相应的核函数矩阵是对称半正定的,这里先解释一下正定矩阵

对于 N 个训练样本,每一个样本 x_i 对应一个训练样例。那么,我们可以将任意两个 x_i 和 x_j 带入核函数中,计算 K_{ij} = K(x_i,x_j) 。这样可以把 K_{ij} 表示为一个 m \times m 的 Gram 矩阵,只要 Gram 矩阵为对称半正定的(半正定就是大于等于0),则 K(x,z) 即为一个有效的核函数,Gram 矩阵如下:

显然对于自己定义的核函数判定是否为正定核不太容易,所以在工业生产中一般使用一些常用的核函数,下面给出几个:

1)线性核:线性核其实就是不采用非线性分类器,认为样本是线性可分的;

2)多项式核:该核函数对应的是一个 p 次多项式的分类器,这时需要额外调节的参数为 c ,p ; 

多项式核函数可以实现将低维的输入空间映射到高纬的特征空间,但是多项式核函数的参数多,当多项式的阶数比较高的时候,核矩阵的元素值将趋于无穷大或者无穷小,计算复杂度会大到无法计算。

3)高斯核(RBF核函数):或者叫做径向基核,该核函数甚至可以将特征空间映射为无穷维,这时需要额外调节的参数为 \delta ;

高斯径向基函数是一种局部性强的核函数,其可以将一个样本映射到一个更高维的空间内,该核函数是应用最广的一个,无论大样本还是小样本都有比较好的性能,而且其相对于多项式核函数参数要少,因此大多数情况下在不知道用什么核函数的时候,优先使用高斯核函数。

如果 \delta 选得很大的话,高次特征上的权重实际上衰减得非常快,所以实际上(数值上近似一下)相当于一个低维的子空间;反过来,如果 \delta 选得很小,则可以将任意的数据映射为线性可分,当然,这并不一定是好事,因为随之而来的可能是非常严重的过拟合问题。总的来说,通过调控参数 \delta ,高斯核实际上具有相当高的灵活性,也是使用最广泛的核函数之一。

\delta越大,山顶就越尖,就越容易被线性可分,但容易过拟合。

4)sigmoid核函数:Sigmoid核函数来源于神经网络,被广泛用于深度学习和机器学习中。采用sigmoid核函数,支持向量机实现的就是一种多层神经网络。

支持向量机的理论基础决定了它最终求得的是全局最优值而不是局部最小值,也保证了它对于未知样本的良好泛化能力而不会出现过学习现象。

Algorithm 1.4

综上,给出非线性可分支持向量机的学习算法1.4

参考文章:

SVM核函数

核函数实例


http://chatgpt.dhexx.cn/article/ZhWXGd5g.shtml

相关文章

核函数与核方法整理

一些之前提到过的知识, 对核函数相关进行详细梳理和串联. 根据胡老师建议的重点, 学习了一下: 核函数公式,作用,选择, 调参, 如何简化运算 目录 SVM回顾 严格线性可分问题 近似线性可分 核函数 什么是核函数 如何使用核函数 为什么要用核函数 …

核方法也称为核技巧(Kernel method)

简介 核函数是干嘛的? 核方法的好处#套用ice110956的说法 1. 在线性与非线性间架起一座桥梁,低维空间里面数据特征是非线性的,没法儿用线性方法解决,当数据特征映射到高维的时候,可以用线性方法解决。 2. 通…

Kernel Method核方法—应用与理解

前一篇主要梳理了几个基本概念以及相关关系,这一篇主要针对核方法的应用进行讨论,并理解核方法的思想,了解为什么要引入核方法。 核方法在机器学习中是一种灵活的技术,主要归结为两个方面: 非线性问题转换为高维线性…

核方法学习

20201101 - 0. 引言 核方法(kernel methods,核函数、核技巧)是一种能够将在原始数据空间中的非线性数据转化到高维线性可分的方法。而最开始学习机器学习的时候,也是在SVM中接触到的。不过在那个时候之后,就很少从理…

核方法(kernel Method)

核方法 核方法定义 一种能够将在原始数据空间中的非线性数据映射到高维线性可分的方法。 核方法的用处 1、低维数据非线性,当其映射到高维空间(feature space)时,可以用线性方法对数据进行处理。 2、线性学习器相对于非线性学…

核方法概述----正定核以及核技巧(Gram矩阵推导正定核)

在再谈SVM(hard-margin和soft-margin详细推导、KKT条件、核技巧)中我们大致谈到了核函数以及为什么要用核函数,今天在这里更加详细的介绍一下。 核方法 1.核函数概述2.正定核2.1定义2.2证明 3.核技巧4.常见的核函数 1.核函数概述 从前面的学…

nginx编译器安装以及编译

一:nginx编译器安装 1:nginx编译器下载安装 http://nginx.org/download/nginx-1.23.1.tar.gz ----下载网址(nginx-1.23.1.tar.gz-示例版本) 2:将tar -zxvf nginx-1.23.1.tar.gz传入home目录下 mkdir /home/nginxchm…

mac编译安装Nginx

一、安装wget 使用homebrew安装wget brew install wget安装wget时报错 tar: Error opening archive: Failed to open /Users/xxx/Library/Caches/… 发现是install libunistring的时候失败报错; 单独安装此依赖; 安装成功,再继续安装wget&#xff1…

宝塔自定义html,宝塔面板Nginx编译安装添加自定义模块PageSpeed

我们在安装好宝塔的时候,首先要安装的都是nginx,PHP这些lnmp组合。估计很多童鞋选择的极速安装。确实,极速安装和编译安装在使用中,区别不大。但是,如果你想后期添加模块,极速安装就无法做到了,…

Linux中编译安装NGINX

1.去官网下载文件 nginx官网 nginx: downloadhttp://nginx.org/en/download.html?spma2c6h.12873639.0.0.222cda00jLs6QI 2.解决nginx安装中的各种依赖 GCC编译器:yum install gcc gcc-c正则表达式PCRE库:yum install -y pcre pcre-develzlib压缩库:yum install -y zlib z…

Centos7 编译安装Nginx

文章目录 前言一、编译安装nginx二、编译安装过程1.操作系统的选择,centos71.1关闭防火墙、selinux 2.安装编译开发环境2.1安装nginx所需的一些第三方系统库的支持 3.编译安装nginx3.1下载nginx源代码3.2解压缩nginx包,并进入该目录3.3开始编译安装3.4查…

Ubuntu 编译安装Nginx

文章目录 1. apt安装2. 编译安装2.1 启动Nginx 3. 防火墙问题 1. apt安装 # 默认版本安装 apt-get update apt-get install nginx# 选择版本安装 apt-get update apt-cache show nginx apt-get install nginx1.18.0-0ubuntu1.3# 启动 service nginx start# 重启 service nginx…

nginx 编译安装及增加模块

一,安装依赖 yum -y install gcc gcc-c pcre pcre-devel zlib zlib-devel openssl openssl-devel path二,下载nginx 通过nginx官网下载源码包:http://nginx.org/en/download.html 下载完后通过tar-zxf解压,并进入nginx 三&…

淘宝nginx编译安装

rootrancher:/opt/tnginx# ls -l -d -h * drwxrwxr-x 13 root root 4.0K 3月 29 2021 tengine-2.3.3 -rw-r--r-- 1 root root 2.8M 3月 21 10:03 tengine-2.3.3.tar.gz获取一个包,然后吧他解压 源代码内编辑脚本文件 编译安装需要用到的,编译工具 …

Nginx编译安装及配置文件详解

写在前面 Centos版本:Centos 7.6 - 64bit Nginx版本:1.20.2 一、什么是Nginx Nginx (engine x) 是一款轻量级的Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。 二、Nginx用在哪些地方 2.1 静态资源服务 动静…

3-1 Nginx编译安装

文章目录 Nginx服务一、Nginx服务基础1、Nginx简介2、简述Nginx和Apache的差异3、编译安装Nginx服务(Nginx-1.12.2)1)环境准备:关闭防火墙,上传软件包2)安装依赖环境3)创建运行用户、组4&#x…

Nginx编译安装与配置

目录 引言 一、Nignx简介 二、简述Nginx和Apache的差异 三、编译安装Nginx服务 四、新版本升级 五、添加 Nginx 系统服务 六、基于域名的 Nginx 虚拟主机 七、基于IP 的 Nginx 虚拟主机 八、基于端口的 Nginx 虚拟主机 九、Nginx服务的主配置文件 (1&am…

Nginx编译安装

1. 停止原有的web服务器:端口默认均是80 2. 添加普通用户账号运行nginx useradd -M -s /sbin/nologin nginx3. 解压并安装nginx tar xf nginx-1.8.1.tar.gzcd ngxin-1.8.1/./configure --prefix/usr/local/nginx --usernginx --groupnginx --with-http_stub_stat…

Nginx网站服务

文章目录 一.编译安装Nginx服务(一)认识Nginx服务的主配置文件(二)日志格式设定(三)访问状态统计配置(四)基于授权的访问控制(五)基于客户端的访问控制 二.域名主机的访问(一)基于域名的Nginx虚拟主机(二)基于IP的Nginx虚拟主机(三…

Nginx的安装---编译安装

编译安装 1、安装编译环境 yum -y install gcc gcc-c make ncurses ncurses-devel2、安装pcre软件包(使nginx支持http rewrite模块) yum install -y pcre pcre-devel3、安装openssl-devel(使nginx支持ssl) yum install -y ope…