SVM - 径向基函数核 Radial Basis Function Kernel,简称RBF核或者高斯核

SVM - 径向基函数核 Radial Basis Function Kernel,简称RBF核或者高斯核

flyfish

径向基函数核(Radial Basis Function Kernel,简称RBF核),也称为高斯核,是一种常用的核函数,用于支持向量机(SVM)和其他机器学习算法。它是基于数据点之间的距离来计算相似性的一种非线性核函数。
RBF核的数学表达式为:
K ( x , x ′ ) = exp ⁡ ( − γ ∥ x − x ′ ∥ 2 ) K(x, x') = \exp\left(-\gamma \|x - x'\|^2\right) K(x,x)=exp(γxx2)
其中:

  • K ( x , x ′ ) K(x, x') K(x,x) 是两个数据点 x x x x ′ x' x 之间的核函数值。

  • γ \gamma γ 是一个可调参数,控制RBF核的宽度。

  • ∥ x − x ′ ∥ \|x - x'\| xx 是两个数据点之间的欧氏距离。

RBF核的主要特性:

  1. 非线性变换 :RBF核可以将输入空间非线性地映射到高维特征空间,使得在原始空间中不可线性分离的数据在高维空间中可线性分离。

  2. 局部性 :RBF核在原始空间中的距离较近的点在高维特征空间中也会距离较近,即RBF核具有局部敏感性。

  3. 参数可调 :参数 γ \gamma γ 控制RBF核的宽度,较大的 γ \gamma γ 值使得核函数对距离更敏感,较小的 γ \gamma γ 值使得核函数对距离不太敏感。

生成100个二维数据点,并使用C=0.1和C=10的两个不同SVM模型进行训练。C较小时(C=0.1),模型的决策边界更宽松,对错误分类点有更高的容忍度;而C较大时(C=10),决策边界更严格,模型更严格地要求正确分类,容易过拟合
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.datasets import make_circles# 生成非线性可分的二维数据点
X, y = make_circles(n_samples=100, factor=0.3, noise=0.1)# 创建两个SVM模型,分别使用不同的C值和RBF核
C_values = [0.1, 10]
models = [svm.SVC(kernel='rbf', C=C, gamma='auto') for C in C_values]# 训练模型
for model in models:model.fit(X, y)# 创建绘图
fig, axes = plt.subplots(1, 2, figsize=(12, 5))for ax, model, C in zip(axes, models, C_values):ax.scatter(X[:, 0], X[:, 1], c=y, cmap='coolwarm')ax.set_title(f'SVM with RBF Kernel and C={C}')# 绘制决策边界和支持向量xlim = ax.get_xlim()ylim = ax.get_ylim()xx = np.linspace(xlim[0], xlim[1], 500)yy = np.linspace(ylim[0], ylim[1], 500)YY, XX = np.meshgrid(yy, xx)xy = np.vstack([XX.ravel(), YY.ravel()]).TZ = model.decision_function(xy).reshape(XX.shape)ax.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1], alpha=0.5,linestyles=['--', '-', '--'])ax.scatter(model.support_vectors_[:, 0], model.support_vectors_[:, 1], s=100,linewidth=1, facecolors='none', edgecolors='k')plt.show()

使用了make_moons函数生成非线性可分的二维数据点(两个半月形),并使用RBF核的SVM模型进行分类。RBF核的SVM模型能够处理复杂的非线性分类问题,并且决策边界是非线性的。
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.datasets import make_moons# 生成非线性可分的二维数据点(两个半月形)
X, y = make_moons(n_samples=100, noise=0.1, random_state=42)# 创建并训练SVM模型,使用RBF核
model = svm.SVC(kernel='rbf', C=1, gamma=1)
model.fit(X, y)# 创建绘图
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='coolwarm')
plt.title('SVM with RBF Kernel')# 绘制决策边界和支持向量
xlim = plt.gca().get_xlim()
ylim = plt.gca().get_ylim()
xx = np.linspace(xlim[0], xlim[1], 500)
yy = np.linspace(ylim[0], ylim[1], 500)
YY, XX = np.meshgrid(yy, xx)
xy = np.vstack([XX.ravel(), YY.ravel()]).T
Z = model.decision_function(xy).reshape(XX.shape)plt.contour(XX, YY, Z, colors='k', levels=[-1, 0, 1], alpha=0.5, linestyles=['--', '-', '--'])
plt.scatter(model.support_vectors_[:, 0], model.support_vectors_[:, 1], s=100, linewidth=1, facecolors='none', edgecolors='k')
plt.show()

二维数据点映射到三维空间

原始的二维平面中是不可线性分离的。使用RBF核将其映射到三维空间,从而使数据变得可线性分离。即RBF核可以将输入空间非线性地映射到高维特征空间,使得在原始空间中不可线性分离的数据在高维空间中可线性分离。
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn.datasets import make_circles
from sklearn.svm import SVC# 生成非线性可分的二维数据点
X, y = make_circles(n_samples=100, factor=0.3, noise=0.1, random_state=0)# 定义RBF核函数
def rbf_kernel(X, Y, gamma=1.0):K = np.exp(-gamma * np.sum((X[:, np.newaxis] - Y[np.newaxis, :])**2, axis=2))return K# 将二维数据点映射到三维空间
gamma = 0.5
X_rbf = rbf_kernel(X, X, gamma=gamma)# 使用RBF核的SVM进行训练
model = SVC(kernel='rbf', C=1, gamma=gamma)
model.fit(X, y)# 绘制原始二维数据点
fig = plt.figure(figsize=(12, 6))
ax = fig.add_subplot(121)
ax.scatter(X[:, 0], X[:, 1], c=y, cmap='coolwarm')
ax.set_title('Original 2D Data')# 绘制映射到三维空间的数据点
ax = fig.add_subplot(122, projection='3d')
ax.scatter(X_rbf[:, 0], X_rbf[:, 1], X_rbf[:, 2], c=y, cmap='coolwarm')
ax.set_title('Mapped to 3D Space using RBF Kernel')plt.show()

svm.SVC说明

svm.SVC是scikit-learn中的支持向量分类器函数,其中包含许多参数,每个参数在模型的训练和预测过程中都有其特定的作用。以下是一些常用参数及其含义:

  1. C (default=1.0) : 正则化参数。它控制权衡分类正确率与决策函数的复杂度。较小的C值会使模型更宽松,对错误分类更容忍;较大的C值会使模型更严格,可能导致过拟合。

  2. kernel (default=‘rbf’) : 核函数类型,用于指定在训练算法中使用的核函数。支持的核函数有:

  • 'linear': 线性核

  • 'poly': 多项式核

  • 'rbf': 径向基函数核(高斯核)

  • 'sigmoid': Sigmoid核

  • 'precomputed': 预计算核
    可以通过传递自定义的核函数来定义自己的核。

  1. degree (default=3) : 多项式核函数的维度。如果使用多项式核函数(kernel='poly'),则该参数指定多项式的维度。

  2. gamma (default=‘scale’) : 核函数系数。用于‘rbf’、‘poly’和‘sigmoid’核。参数的值可以是:

  • 'scale': 默认值,使用1 / (n_features * X.var())

  • 'auto': 使用1 / n_features

  • 具体的浮点数值

  1. coef0 (default=0.0) : 核函数中的独立项。对于‘poly’和‘sigmoid’核函数有用。

  2. probability (default=False) : 是否启用概率估计。如果启用,训练时间会更长一些。

  3. shrinking (default=True) : 是否使用启发式方法加速训练过程。

  4. tol (default=1e-3) : 停止标准的精度。训练算法的停止标准。

  5. cache_size (default=200) : 指定内存缓存大小(以MB为单位),用于存储训练过程中计算的核矩阵。

  6. class_weight (default=None) : 给定各类样本的权重,形式为字典{class_label: weight}。用于处理类别不平衡问题。

  7. verbose (default=False) : 启用详细输出。在实际运行时,通常不会开启这个选项。

  8. max_iter (default=-1) : 限制最大迭代次数。设置为-1时,表示没有限制。

  9. decision_function_shape (default=‘ovr’) : 决策函数的形状,支持‘ovr’(一对多)和‘ovo’(一对一)。默认使用‘ovr’。

  10. break_ties (default=False) : 在决策边界上对平票情况进行处理(仅适用于‘ovr’)。启用时会增加计算开销。

  11. random_state (default=None) : 随机数生成器的种子。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3223561.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

计算理论复习

1.Turing Machine 确定性图灵机 图灵机有很多不同的定义,这里选取其中一种,其它定义下的图灵机往往与下面这种定义的图灵机计算能力等价。 图灵机是一个在一条可双向无限延伸且被划分为若干格子的纸带上进行操作的机器,其有内部状态&#…

【高校科研前沿】中国农业大学姚晓闯老师等人在农林科学Top期刊发表长篇综述:深度学习在农田识别中的应用

文章简介 论文名称:Deep learning in cropland field identification: A review(深度学习在农田识别中的应用:综述) 第一作者及单位:Fan Xu(中国农业大学土地科学与技术学院) 通讯作者及单位&…

Linux:进程间通信(二.共享内存详细讲解以及小项目使用和相关指令、消息队列、信号量)

Linux:进程间通信(二.共享内存详细讲解以及小项目使用和相关指令、消息队列、信号量) 上次结束了进程间通信一:Linux:进程间通信(一.初识进程间通信、匿名管道与命名管道、共享内存) 文章目录 …

HackTheBox--BoardLight

BoardLight 测试过程 1 信息收集 NMAP端口扫描 端口扫描开放 22、80 端口 80端口测试 # 添加 boardLight.htb 到hosts文件 echo "10.10.11.11 boardLight.htb" | sudo tee -a /etc/hosts检查网页源代码,发现 board.htb # 添加 board.htb 到 hosts 文…

大话光学原理:3.干涉与衍射

一、干涉 这是一束孤独的光,在真空的无垠中悄无声息地穿行。忽然,一堵高耸的墙壁挡住了它的去路,它别无选择,只能硬着头皮冲撞而去。在摸索中,它意外地发现墙壁上竟有两道孔隙,笔直而细长,宛如量…

图吧工具箱:装机爱好者必备工具合集

名人说:莫道谗言如浪深,莫言迁客似沙沉。 ——刘禹锡《浪淘沙》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、概述二、主要功能1、硬件检测2、测试与故障诊断三、使用方法四、总结很高兴你打开了这篇博客,更多好用的软件工具,请关注我、订阅专栏…

Python从0到100(三十五):beautifulsoup的学习

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

暴雨突袭不可不看!水浸传感器作用有这些

最近全国进入“看海”模式的新闻不断冲上热搜,深圳、长沙、郑州......多地遭受了暴雨突袭,不仅影响到了居民日常生活出行,更容易为机房、仓库、工厂等需要防水的场所带来漏水隐患。水浸传感器的作用是实时检测监测范围内是否有漏水发生&#…

Linux文件编程(打开/创建写入读取移动光标)

目录 一、如何在Linux下做开发 1.vi编辑器 2.gcc编译工具 3.常用指令 二、文件打开及创建 三、写入文件 四、读取文件 五、文件“光标”位置 一、如何在Linux下做开发 所谓文件编程,就是对文件进行操作,Linux的文件和Windows系统的文件大差不差…

基于变分模态分解和Cramer von Mises检验的一维信号降噪方法(MATLAB)

关于变分模态分解: 变分模态分解中为什么要各个模态估计的带宽之和最小? 因为VMD是个优化问题,VMD方法首先在时域构造一个共同优化的目标,该目标在所有成分完全重构原信号的约束下追求所有成分的带宽总和最小(窄带假…

vue学习day02-Vue指令-v-html、v-show与v-if、v-else与v-else-if、v-on、v-bind、v-for、v-model

6、Vue指令 指令:带有v-前缀的特殊标签属性 (1)v-html 作用:设置元素的innerHTML 语法:v-html“表达式” 示例: 提供一个地址,这里是百度的地址,通过v-html渲染 结果&#xff…

深度整合全球资源,分贝通打造高效、合规的海外差旅管理平台

在全球化商业活动的背景下,中国企业出海已成为常态。然而,随着海外差旅市场的全面增长,企业在海外支出管理上面临诸多挑战。据2023年数据显示,分贝通出海差旅业务GMV同比增长高达500倍,这一增长背后隐藏着企业对于更省钱、更高效管控方式的迫切需求。 面对与日俱增的开支,企业开…

【实战场景】大文件解析入库的方案有哪些?

【实战场景】大文件解析入库的方案有哪些? 开篇词:干货篇:分块解析内存映射文件流式处理数据库集群处理分布式计算框架 总结篇:我是杰叔叔,一名沪漂的码农,下期再会! 开篇词: 需求背…

品牌策划秘籍:掌握这些技巧,让你的品牌一炮而红!

作为一名文案策划老司机,这么多年了,总会有一些经验的,这里分享出来,希望能够帮助后来人少走弯路吧。 想要做好品牌和文案策划,首先得做好“侦查”工作。 深入市场,了解行业动态,研究竞争对手…

Cesium自定义着色器构件三角面片【闪烁】问题,但是一移动视角就闪烁

问题:已知各个顶点的坐标信息、颜色和索引信息,并自定义绘制三角面片。 但是绘制的三角面片随着视角稍微改动就会出现闪烁现象!!!why? Cesium数据类型的精度问题,例如下面为了获取能接收到高精度坐标信息…

CTF php RCE(二)

0x04 php伪协议 这种我们是先看到了include才会想到,利用伪协议来外带文件内容,但是有些同学会问,我们怎么知道文件名是哪个,哪个文件名才是正确的,那么这里我们就得靠猜了 include函数 因为 include 是一个特殊的语…

3-7 使用深度学习解决温度即示数问题

3-7 使用深度学习解决温度即示数问题 直接上代码 %matplotlib inline import matplotlib.pyplot as plt import numpy as np import torch torch.set_printoptions(edgeitems2, linewidth75)设置Jupyter Notebook在单元格中内嵌显示图像,导入所需库并设置PyTorch的…

Argo CD入门、实战指南

1. Argo CD概述 1.1 什么是 Argo CD Argo CD 是针对 Kubernetes 的声明式 GitOps 持续交付工具。 1.2 为什么选择 Argo CD 应用程序定义、配置和环境应具有声明性并受版本控制。应用程序部署和生命周期管理应自动化、可审计且易于理解。 2. Argo CD基础知识 在有效使用 Ar…

3-6 构建线性模型解决温度计示数转换问题

3-6 构建线性模型解决温度计示数转换问题 直接上源码 %matplotlib inline import numpy as np import torch torch.set_printoptions(edgeitems2, linewidth75)导入必要的库并设置 PyTorch 的打印选项,确保在打印张量时显示边缘项和行宽。 #%% t_c [0.5, 14.0,…

Windows C++ vs2022环境中下载、安装和使用osmesa

第一步:安装 MinGW-w64 请参考这篇文章进行安装: 在Windows中安装MinGW-w64最新版本 第二步:安装DirectX SDK 请参考这篇文章进行安装: 下载安装Microsoft DirectX SDK(June 2010) 第三步:安装Windows SDK 请参考这篇…