python svm核函数_Python.SVM(三)核方法

article/2025/9/25 18:34:53

Python.SVM(三)核方法

1

什么是核方法

往简单里说,核方法是将一个低维的线性不可分的数据映射到一个高维的空间、并期望映射后的数据在高维空间里是线性可分的。

我们以异或数据集为例:在二维空间中、异或数据集是线性不可分的;但是通过将其映射到三维空间、我们可以非常简单地让其在三维空间中变得线性可分。

比如定义映射:

02174a93b10636a43094775337f33c40.png

该映射的效果如下图所示:

71c60c920f422afcdd08316ad68ae96b.png

可以看到,虽然左图的数据集线性不可分、但显然右图的数据集是线性可分的,这就是核工作原理的一个不太严谨但仍然合理的解释

从直观上来说,确实容易想象、同一份数据在越高维的空间中越有可能线性可分,但从理论上是否确实如此呢?

1965 年提出的 Cover 定理从理论上解决了这个问题,我们会在文末附上相应的公式,这里暂时按下不表

至此,似乎问题就转化为了如何寻找合适的映射、使得数据集在被它映射到高维空间后变得线性可分。

不过可以想象的是,现实任务中的数据集要比上文我们拿来举例的异或数据集要复杂得多、直接构造一个恰当的的难度甚至可能高于解决问题本身。

而核方法的巧妙之处就在于,它能将构造映射

a3617cc5182f3bc8df25e07863bb511d.png这个过程再次进行转化、从而使得问题变得简易:它通过核函数来避免显式定义映射往简单里说,核方法会通过用能够表示成

521a6ee8adccf88e5a77033c7e06a31b.png的核函数

85abcdecb780029fe36c0ded2d0f7578.png替换各算式中出现的内积

d3d70562c66d30459902407173d25dc0.png来完成将数据从低维映射到高维的过程。

换句话说、核方法的思想如下:

将算法表述成样本点内积的组合(这经常能通过算法的对偶形式实现)

设法找到核函数

c3043b6f8db4df8235f114fa8133cc63.png,它能返回样本点

b51a7b23a7c009f1769a0dcb9b31ee38.png

cf41ee40e4828dcea6182dcfaeb4d187.png

2ab3f59e8d8ca90d9972004e213a5dc2.png作用后的内积

070b439a37c0bfdc8926b9005e9b9205.png替换

87856b8aaf47bbb160d207d60b441c17.png、完成低维到高维的映射(同时也完成了从线性算法到非线性算法的转换)

当然了,不难想象的是,并不是所有的函数都能够对应一个映射(亦即不是所有的

a9ea68d2412a39d51d88e572f49af014.png都能拆成

f14c660ea0e7db05b815632f10690267.png比如说,显然

47029fc76c91578b8c1863901c932486.png至少需要是一个对称函数)。

幸运的是,1909 年提出的 Mercer 定理解决了这个问题,它的具体叙述会在文末给出。

Mercer 定理为寻找核函数带来了极大的便利。可以证明如下两族函数都是核函数:

bc792fcf380d41fb2b94e2a86bba72fe.png

那么核方法的应用场景有哪些呢?在 2002 年由 Scholkopf 和 Smola 证明的表示定理告诉我们它的应用场景非常广泛。定理的具体内容同样会附在文末。

2

核模型的表现

还是用 GIF 来说明问题最为形象。

当我们对感知机应用核方法后,它就能对非线性数据集(比如螺旋线数据集)进行分类了,训练过程将如下:

a9512f361d02cbd1748f9fd781426ca5.png

3

怎么应用核方法

简单来说,就是把算法中涉及到样本的地方都通过某种变换、弄成样本的内积形式。以感知机为例,感知机的原始损失函数为:

787b6c646fc54db4e5948fdbfb2aa5f0.png

为了让损失函数中的样本都变成内积形式,考虑令

1766b92022930e26b5a5031b24d1af55.png

8dfa369bf6e809e7e3d474b630110bb0.png

(有没有发现核形式和对偶形式很像?( σ'ω')σ)

4

如何训练核模型

注意:为简洁,从此往后的推导和实现均以核感知机为例,核 SVM 的相关讨论会放在下一章介绍 SMO 算法时进行】

简洁起见,我们还是用梯度下降法来进行训练,为此我们需要进行求导工作。假设当前模型参数为

c21eafdc759e495628906c2c3a161535.png

e66cc244024062a93098407b375245b9.png在参数

40a4ffb29155243083ebfe4f3f12ca3e.png下的预测值为

7e636f5be3282b76208bc33483b5be2e.png,则:

aea7aea1948b825729dd551cb52985ce.png

为了加速训练,我们需要将该算式向量化,为此我们需要定义核矩阵。假设现在我们有两组样本

804788e968992fc68fcd4ae40695cff7.png

72154b03cf75604c1623406df490645b.png,那么它们的核矩阵即为:

5724e26eddc5dfc9510bba50df32393e.png

对于训练过程而言,我们关心的是训练样本之间的核矩阵

151084254a79556e87ad0d6524f5f610.png

‍利用它,不难写出相应的向量化代码:

a4cfa9ef253d777890275eda05915469.png

对于预测过程,我们关心的是原样本和新样本之间的核矩阵。假设新样本为

32be3f6e64b558910b56d9999fea1304.png,则

ef4ec4afa96428ff04b5883f4106363a.png

那么预测过程即为

34eb729cc17102378e54524823197a8d.png

于是关键就在于如何定义计算核矩阵的核函数了。

对于多项式核来说,核函数的实现是直观的:

6839a26c87949df2e32f78824b46e15b.png

但对于 RBF 来说就没那么直观了,用到了 Numpy 的高级实用技巧之一——升维:

5947f13d885e4152ca268d9a4d55613b.png

当然直接用 for 来实现也是可以的,不过那将会非常非常慢……

5

核模型的实现

如果思路能够整理清楚,那么核模型相比原模型来说只有如下两点改变:

需要定义核函数并计算出核矩阵

计算预测值时不是

eaa336e6ad1de938437b298d233324f9.png,而是

4070cfec885664a9d476fdf8bc2e1db6.png,其中

在训练时,K为原样本之间的核矩阵

在测试时,K为原样本和新样本的核矩阵

所以实现起来的话会有许多重复代码,这里就只展现其中最核心的部分(仍以核感知机为例):

b154c0de32e368d3121b469c5198d1af.png

6

相关数学理论

1)Cover 定理

eaa7190170a5b8e4ceaeab9c29f2cd06.png

【注意:通常我们会称满足这两个充要条件之一的函数为 Mercer 核函数而把核函数定义得更宽泛。

不过如果不打算在理论上深入太多的话,将 Mercer 核函数简称为核函数是可以的。

此外,虽说 Mercer 核函数确实具有 Hilbert 空间中的内积形式、但此时的 Hilbert 空间并不一定具有“维度”这么好的概念(或说、可以认为此时 Hilbert 空间的维度为无穷大;比如说 RBF 核,它映射后的空间就是无穷维的)】

3)表示定理

131ae0c06ca44969bd24bd0c83c9efd9.png

这意味着对于任意一个损失函数和一个单调递增的正则化项组成的优化问题、我们都能够对其应用核方法

下一篇文章我们则会抛开梯度下降这个有些“偷懒”的做法,并介绍一种叫序列最小最优化(SMO)的算法

希望观众老爷们能够喜欢~

推荐阅读:

精选干货|近半年干货目录汇总----全是通俗易懂的硬货!欢迎阅读!

自然语言处理中CNN模型几种常见的Max Pooling操作

干货|非常详细的神经网络入门解释

欢迎关注公众号学习交流~


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

相关文章

核方法回归

参考论文-DENSITY ESTIMATION FOR STATISTICS AND DATA ANALYSIS 给定数据集,来估计概率密度函数 Histograms The naive estimator 也是分成段的平行x轴直线连接起来 The kernel estimator 其中kernel可以是高斯核,结果图: 可以见到,高斯核…

【机器学习】SVM核方法

https://blog.csdn.net/qq_32742009/article/details/81430534 Kernel Trick 在 SVM 中引入核方法便可使得 SVM 变为非线性分类器,给定非线性可分数据集 ,如下图所示,此时找不到一个分类平面来将数据分开,核方法可以将数据投影到…

核函数与核方法整理

一些之前提到过的知识, 对核函数相关进行详细梳理和串联. 根据胡老师建议的重点, 学习了一下: 核函数公式,作用,选择, 调参, 如何简化运算 目录 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…