首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >支持向量机核技巧:10个常用的核函数总结

支持向量机核技巧:10个常用的核函数总结

作者头像
deephub
发布于 2023-02-01 01:55:29
发布于 2023-02-01 01:55:29
1.9K00
代码可运行
举报
文章被收录于专栏:DeepHub IMBADeepHub IMBA
运行总次数:0
代码可运行

支持向量机是一种监督学习技术,主要用于分类,也可用于回归。它的关键概念是算法搜索最佳的可用于基于标记数据(训练数据)对新数据点进行分类的超平面。

一般情况下算法试图学习一个类的最常见特征(区分一个类与另一个类的特征),分类是基于学习到的这些代表性特征(因此分类是基于类之间的差异)。支持向量机的工作方式正好相反。它会找到类之间最相似的例子,这些就是支持向量。

SVM的核方法

核或核方法(也称为内核函数)是用于模式分析的不同类型算法的集合。它们可以使用线性分类器来解决非线性问题。核方法被应用于支持向量机(Support Vector Machines, SVM),用于分类和回归问题。SVM使用所谓的核技巧(Kernel Trick),即对数据进行转换,为可能的输出找到最佳边界。

核方法的使用条件

支持向量机算法使用一组定义为核的数学函数。核的功能是将数据作为输入,并将其转换为所需的形式。不同的支持向量机算法使用不同类型的核函数。这些函数可以是不同的类型。

例如线性、非线性、多项式、径向基函数(RBF)和sigmoid。核函数是一个相似函数。它是我们作为领域专家,提供给机器学习算法的一个功能。它接受两个输入,并计算出它们的相似程度。

假设我们的任务是学习对图像进行分类。我们有(图像,标签)对作为训练数据。想想典型的机器学习流程:我们获取图像,计算特征,将每张图像的特征串成一个向量,然后将这些“特征向量”和标签输入到学习算法中。

核函数提供了另一种选择。我们不需要定义大量的特征,而是定义了一个核函数来计算图像之间的相似性。将这个内核与图像和标签一起提供给学习算法,从而得到一个分类器。标准的支持向量机/逻辑回归/感知机公式不适用于核:它们适用于特征向量。那么如何使用核函数呢?下面两个定理解决了这个问题:

  • 在某些条件下,每个核函数都可以表示为(可能是无限维)特征空间中的点积(Mercer定理)。
  • 许多机器学习算法可以完全用点积来表示。

这两个事实意味着我可以用用点积的形式表示我们喜欢的机器学习算法,然后由于我的核在某些空间中也是一个点积,我们还可以用核来替换点积。

为什么使用核而不是特征向量?

一个很大的原因是,在很多情况下,计算核很容易,但是计算核对应的特征向量很困难。即使是简单核的特征向量也会在产生维度爆炸,对于像 RBF 内核这样的内核(k(x,y) = exp( -||x-y||²))相应的特征向量是无限维的。然而,相比之下核的维度几乎可以忽略不记。

许多机器学习算法可以只使用点积进行替代,所以我们可以用核替换点积,这样的话根本不必使用特征向量。这意味着我们可以使用高度复杂、计算效率高且性能高的核,而无需写下巨大且可能无限维的特征向量。所i如果不能直接使用核函数,我们将只能使用相对低维、低性能的特征向量。这个“技巧”被称为核技巧。

扩展解释

我们将进一步解释,以澄清一些关于核的一些容易混淆的概念,这些混淆往往会给数据专业人员带来麻烦:

将一个特征向量转换为更高维特征向量的函数不是核函数。因此 f(x) = [x, x²] 不是核函数。它只是一个新的特征向量。我们不需要用核来做到这一点。如果你想这样做需要在不破坏维度的情况下进行更复杂的特征转换。

核不仅仅限于 SVM。任何仅适用于点积的学习算法都可以使用核来进行改写。SVM 的想法很美,内核技巧很美,凸优化很美,而且它们完全独立的。

数学理解

为了从数学上理解核,我们先来理解Lili Jiang的公式,即:

K(x, y)=<f(x), f(y)=""></f(x),>

这里的:

K是核函数,,X和Y是维度输入,F是从n维空间到m维空间的映射,< x, y >是点积。

我们假设有两个点,x= (2,3,4) y= (3,4,5)

那么K(x, y) = < f(x) f(y) >,让我们先计算< f(x) f(y) >

如上所示,f(x).f(y)和K(x, y)给出了相同的结果,但前一种方法需要大量的计算(因为将3个维度投影到9个维度),而使用核函数要简单得多。

常用核函数

1、线性核 Linear Kernel

它是最基本核类型,本质上通常是一维的。当有很多特征时,它被证明是最好的函数。对于文本分类问题,线性核是首选的方法,因为这类分类问题大多可以线性分离。

另外就是线性核函数比其他函数更快。

线性核公式

这里的xi和xj表示试图分类的数据。

2、多项式核 Polynomial Kernel

它是线性核的一种更广义的表示。但它不像其他核函数那样受欢迎,因为它的效率和准确性都较低。

多项式核公式

在这里‘.’表示两个值的点积,d表示度数。K(xi, xj)表示划分给定类的决策边界。

3、高斯核 Gaussian Kernel

这是一个常用的内核。它用于对给定数据集没有先验知识的情况。

高斯核公式

4、高斯径向基函数 Gaussian Radial Basis Function (RBF)

它是支持向量机中最常用的核函数之一。通常用于非线性数据。当没有数据的先验知识时,它有助于进行适当的分离。

高斯径向基公式

这里必须在代码中手动提供gamma的值(的值从0到1)。gamma的首选值是0.1。

5、拉普拉斯RBF核 Laplace RBF Kernel

它也是一个通用内核;在没有关于数据的先验知识时使用。

拉普拉斯RBF核公式

结果比较

6、贝塞尔函数核 Bessel Function Kernel

它主要用于去除数学函数中的交叉项。

公式

这里J是贝塞尔函数。

7、双曲正切核 Hyperbolic Tangent Kernel

我们可以在神经网络中使用它。

双曲正切核公式

对于某些(不是所有)时候k>0和c<0。

8、Sigmoid核 Sigmoid Kernel

我们可以用它作为神经网络的代理。sigmoid核的激活函数是双极sigmoid函数。

Sigmoid核公式

图像如下:

9、ANOVA kernel

它也被称为径向基函数核。它通常在多维回归问题中表现良好。

公式

10、一维线性样条核 Linear Splines Kernel in One-Dimension

它在处理大型稀疏数据向量时很有用。它常用于文本分类。样条核在回归问题中也有很好的表现。

一维线性样条核公式

Sklearn中的核函数

到目前为止,我们已经讨论了关于核函数的理论信息。让我们看看Python中如何使用

这里我们使用sklearn中的iris 数据集

第一步是导入所需的包。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 ## Requried Python Packages
 import pandas as pd
 import numpy as np
 import matplotlib.pyplot as plt
 from sklearn import svm, datasets
 
 ## Load iris dataset
 iris = datasets.load_iris()
 
 ## Create features and target data
 X = iris.data[:, :2]
 y = iris.target
 
 ## Plotting
 x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
 y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
 h = (x_max / x_min)/100
 xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
 X_plot = np.c_[xx.ravel(), yy.ravel()]

在上面的代码中,在加载所需的python包之后我们将加载的数据分成特征和目标数据。然后编写代码来绘制它。

现在让我们实现本文中讨论的几个SVM内核函数。

线性核

使用线性核来创建svc分类器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 ## Creating the linear kernel
 svc_classifier = svm.SVC(kernel='linear', C=C).fit(X, y)
 C = 1.0
 Z = svc_classifier.predict(X_plot)
 Z = Z.reshape(xx.shape)
 
 ## Code of plotting
 plt.figure(figsize=(15, 5))
 plt.subplot(121)
 plt.contourf(xx, yy, Z, alpha=0.3)
 plt.set_cmap("gist_rainbow") 
 plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Set1)
 plt.xlabel('Sepal length')
 plt.ylabel('Sepal width')
 plt.xlim(xx.min(), xx.max())
 plt.title('Support Vector Classifier with linear kernel')

Sigmoid核

使用sigmoid核来创建svc分类器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 ## Sigmoid kernel
 svc_classifier = svm.SVC(kernel='sigmoid', C=C).fit(X, y)
 C = 1.0
 Z = svc_classifier.predict(X_plot)
 Z = Z.reshape(xx.shape)
 
 ## Code for plotting
 plt.figure(figsize=(15, 5))
 plt.subplot(121)
 plt.contourf(xx, yy, Z, alpha=0.3)
 plt.set_cmap("gist_rainbow") 
 plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Set1)
 plt.xlabel('Sepal length')
 plt.ylabel('Sepal width')
 plt.xlim(xx.min(), xx.max())
 plt.title('Support Vector Classifier with sigmoid kernel')
 pl.plot()

RBF核

使用RBF核来制作我们的svc分类器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 ## rbf kernel
 svc_classifier = svm.SVC(kernel='rbf', C=C).fit(X, y)
 C=1.0
 Z = svc_classifier.predict(X_plot)
 Z = Z.reshape(xx.shape)
 
 ## Code for creating plots
 plt.figure(figsize=(15, 5))
 plt.subplot(121)
 plt.contourf(xx, yy, Z, alpha=0.3)
 plt.set_cmap("gist_rainbow") 
 plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Set1)
 plt.xlabel('Sepal length')
 plt.ylabel('Sepal width')
 plt.xlim(xx.min(), xx.max())
 plt.title('Support Vector Classifier with rbf kernel')
 plt.plot()

多项式核

使用多项式核来创建svc分类器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 ## Polynomial kernel
 svc_classifier = svm.SVC(kernel='poly', C=C).fit(X, y)
 C = 1.0
 Z = svc_classifier.predict(X_plot)
 Z = Z.reshape(xx.shape)
 
 ## Code for creating the graph
 plt.figure(figsize=(15, 5))
 plt.subplot(121)
 plt.contourf(xx, yy, Z, alpha=0.3)
 plt.set_cmap("gist_rainbow") 
 plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Set1)
 plt.xlabel('Sepal length')
 plt.ylabel('Sepal width')
 plt.xlim(xx.min(), xx.max())
 plt.title('Support Vector Classifier with polynomial kernel')
 plt.plot()

如何选择最佳核函数

如何选择最佳的内核函数呢?

这完全取决于你要解决的问题是什么。如果你的数据是线性可分的,不用多想,就用线性核。

因为与其他核函数相比,线性核函数需要更少的训练时间。

  • 线性核在文本分类问题中最受青睐,因为它对大型数据集表现良好。
  • 当没有关于不可用数据的附加信息时,高斯核往往能给出良好的结果。
  • RBF核也是一种高斯核,它对高维数据进行投影,然后寻找其线性分离。
  • 多项式核对于所有训练数据都进行了归一化会有很好的结果。

作者:Amrita Sarkar

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-12-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DeepHub IMBA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
微PE制作U盘启动盘,并安装Win10
微PE 是一款很好用的 WinPE (Windows预先安装环境(英语:Microsoft Windows Preinstallation Environment),简称Windows PE或WinPE)工具箱,可以用来制作一个随插随用的U盘启动盘,并且不影响U盘的日常使用,在 Windows 系统电脑的系统出问题时会是救命般的存在。下面就来介绍一下如何制作 PE启动盘 ,并使用它来安装 Win10 操作系统。
宋天伦
2020/09/29
31.7K0
微PE制作U盘启动盘,并安装Win10
全网最全Win10安装教程:U盘启动盘制作+正版镜像下载,一步到位
万里顾一诚
2025/03/12
4.2K2
全网最全Win10安装教程:U盘启动盘制作+正版镜像下载,一步到位
蜗牛星际NAS安装黑群晖V6.2.1+洗白+免U盘引导启动
推上看到有dalao分享蜗牛星际的车,作为伪“资深垃圾佬”自然不能错过,于是去咸鱼上收了一台。
全栈程序员站长
2022/09/05
22K0
蜗牛星际NAS安装黑群晖V6.2.1+洗白+免U盘引导启动
Windows11官方原版系统安装全流程|UEFI引导+TPM2.0绕过+驱动配置(附镜像下载)
Windows 11是微软推出的全新一代操作系统,以直观交互和AI技术为核心升级。其界面采用圆角设计和居中任务栏布局,支持多窗口贴靠分屏与虚拟桌面功能,提升多任务处理效率。系统深度融合Copilot智能助手,提供语音写作、照片一键编辑等AI功能,并通过DirectStorage技术优化游戏加载速度,支持DirectX 12 Ultimate实现更流畅的光影效果。
万里顾一诚
2025/05/27
4.1K0
Windows11官方原版系统安装全流程|UEFI引导+TPM2.0绕过+驱动配置(附镜像下载)
黑苹果MacOS Big Sur 11.0 安装教程及驱动工具
最新黑苹果MacOS Big Sur 11.0安装教程,附带各电脑EFI驱动合集、原版引导镜像,图文并茂简单易懂…
全栈程序员站长
2022/09/07
7.1K0
黑苹果MacOS Big Sur 11.0 安装教程及驱动工具
win10封装系统(sc封装)
大家都知道Win10系统是微软最新发布的具有划时代意义的新一代操作系统,担负着振兴微软的大任,凭借卓越的性能和流畅的用户体验赢得了广大用户的认可和信任,市场占有率那是芝麻开花节节高啊,不过作为装机维修的技术员同行们肯定想知道如何封装Win10操作系统,从而为我们的日常装机工作带来便利,不过据爱学府软件园了解到目前网络上几乎找不到比较详细好用且具备学习价值的Win10系统封装教程,针对这一问题,爱学府软件园小编本着乐善好施的菩萨心肠并且经历了两个不眠之夜的痛苦煎熬为大家悉心制作了一份目前网络上迄今为止最为详细好用且极具参考学习价值的【Win10系统封装教程】,本教程由浅入深的介绍了Win10系统封装的整个过程,从虚拟机的建立,到虚拟磁盘的分区,母盘系统的安装以及虚拟机BIOS的设置还有ES封装工具和SC封装工具的使用均有详细介绍,大家可以通过本教程举一反三,融会贯通的学会Win7 或者 Win8 系统的封装,相信会给大家的系统封装学习予以参考少走弯路,希望大家能够喜欢,好了,废话少说,下面是Win10系统封装教程的详细操作步骤:
全栈程序员站长
2022/07/29
3.3K0
手把手教你如何重装win10系统(win10怎么自己重装系统)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/128612.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/28
2.7K0
手把手教你如何重装win10系统(win10怎么自己重装系统)
【教程】U盘、硬盘安装原版win7、8.1、10系统
《硬盘安装原版win7系统教程》 链接:http://user.qzone.qq.com/1019963719/blog/1425718860。 《陶院计算机协会教你用U盘装win7系统—详细教程》 链接:http://user.qzone.qq.com/1019963719/blog/1399108233。此文介绍不是安装纯净版的系统。
若川
2020/03/19
3.5K0
最新Win10专业版系统下载|Win10 22H2纯净版安装教程|UEFI引导+U盘分区优化+安全加固(含官方镜像文件)
Windows 10 是微软推出的一款具有重要影响力的操作系统。它在易用性和安全性上有显著提升,对云服务、智能移动设备等新技术进行融合,还优化支持了固态硬盘等硬件。其特点丰富,有 Cortana 个人助理、Edge 浏览器、多桌面和任务视图等。开始菜单回归经典且具高度可定制性,搜索栏功能强大。从 Windows Store 下载的应用可窗口化运行。
万里顾一诚
2025/06/09
8.3K0
最新Win10专业版系统下载|Win10 22H2纯净版安装教程|UEFI引导+U盘分区优化+安全加固(含官方镜像文件)
【电脑配置】开发人员必备,黑苹果双系统安装教程
(1)首先我们准备一个8~16G的U盘,在百度搜TransMac下载一个苹果系统U盘制作工具,点击第二个。如图所示▼
全栈程序员站长
2022/09/12
4.8K0
【电脑配置】开发人员必备,黑苹果双系统安装教程
使用u盘安装windows10_微软正式终止支持win7
此次不是pe系统,相当于把U盘作为光盘直接启动安装,不用pe系统不用iso镜像文件。简单粗暴、微软官方系统安全。
全栈程序员站长
2022/11/15
4900
使用u盘安装windows10_微软正式终止支持win7
Windows系统封装学习
Windows 安装程序可以执行全新安装和升级安装。但是,无法执行计算机到计算机的迁移。因此,你必须使用 Windows Easy Transfer、用户状态迁移工具 (USMT) 或其他迁移工具将数据从以前的安装移动到新的操作系统。
全栈工程师修炼指南
2020/10/26
3.5K0
Windows系统封装学习
黑群晖安装与使用
装过黑苹果的人都知道,装黑苹果时,除了需要准备系统镜像以外,还需要有一个引导U盘。 装黑群晖也是同样的,也需要一个单独的引导U盘。不过装完黑苹果之后可以将引导转移到电脑硬盘上,而黑群晖则需要一直插着引导U盘。 苹果电脑的系统叫做MacOS,微软的叫做Windows,群晖系统则叫做DSM,它是DiskStation Manager的缩写。 黑群晖的系统镜像后缀为.pat,引导文件后缀一般为.img。
全栈程序员站长
2022/08/30
22.1K0
黑群晖安装与使用
利用微PE装机工具制作U盘启动盘并重装系统详细教程
突然有这篇文章是因为最近给发小笔记本电脑更换了固态硬盘,而更换固态后直接把原装的机械硬盘挂咸鱼卖了,而系统数据都在机械硬盘,新硬盘是空的什么也没有,需要重新做个系统。
岳泽以
2022/10/26
44.2K0
利用微PE装机工具制作U盘启动盘并重装系统详细教程
win10+黑苹果 单硬盘 双系统 超简单安装 一看就会「建议收藏」
注意:此教程全机型通用 ,只需要替换相关的efi文件即可。安装黑苹果的教程已经很多了,本人学的皮毛只适合跟我配置差不多的笔记本电脑,比如神州系列啥的。如果本文出现任何问题请及时指正,谢谢。 电脑型号 Notebook W65KJ1_KK1 笔记本电脑 (扫描时间:2019年11月23日) 操作系统 Windows 10 专业版 64位 ( DirectX 12 ) 处理器 英特尔 Core i3-8100 @ 3.60GHz 四核 主板 蓝天(CLEVO) 主板 ( 100 Series/C230 Series 芯片组 Family – A144 ) 内存 8 GB ( 英睿达 DDR4 2400MHz ) 主硬盘 日立 HGST HTS721010A9E630 ( 1 TB / 7200 转/分 ) 显卡 Nvidia GeForce GTX 1050 Ti ( 4 GB ) 显示器 友达 AUO60ED ( 15.5 英寸 ) 声卡 瑞昱 ALC269 @ 英特尔 High Definition Audio 控制器 网卡 瑞昱 RTL8168/8111/8112 Gigabit Ethernet Controller / 蓝天(CLEVO)
全栈程序员站长
2022/08/30
13.8K0
win10+黑苹果 单硬盘 双系统 超简单安装 一看就会「建议收藏」
Windows10官方正版系统的安装、激活、升级、U盘制作,无毒无害无捆绑无风险教程
- 完成下载后,拔掉所有外接存储设备(U盘,移动硬盘,读卡器等),否则无法进行安装
兮动人
2021/06/11
1.4K0
Windows10官方正版系统的安装、激活、升级、U盘制作,无毒无害无捆绑无风险教程
(图文)U盘安装原版WIN10系统
首先 我们先去下载好WIN10 64的原版系统 那么去哪里下呢 不用看 首选肯定是MSDN的了 直接百度MSDN 或者 I TELL YOU 都可以进入都官网 【这里直接提供一个镜像下载】:
Erwin
2019/12/31
1.3K0
微软官方工具安装Win10的教程
这是两年前,铅锤哥出的Win7教程,至今已经帮助上万的网友成功重装系统,但是Win7毕竟已经过时了,很多粉丝开始呼吁铅锤哥出Win10的教程。
青梅煮码
2023/03/13
1.3K0
微软官方工具安装Win10的教程
[735]利用UItraISO软碟通制作U盘启动盘安装Ubuntu16.04系统
第2,3可以不勾选:第2选项是默认.ISO文件都用软碟通打开,不经常使用软碟通没必要关联;第3选项会生产一个驱动器(空盘),类似于百度云盘的,不经常使用软碟通不建议勾选。
周小董
2020/01/13
3.9K0
[735]利用UItraISO软碟通制作U盘启动盘安装Ubuntu16.04系统
自带win10系统换win7的那些坑
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/135729.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/05
2.6K0
推荐阅读
相关推荐
微PE制作U盘启动盘,并安装Win10
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档