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

news2024/10/2 7:53:53

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()]).T
    Z = 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://www.coloradmin.cn/o/1912402.html

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

相关文章

软件测试之冒烟测试

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 1. 核心 冒烟测试就是完成一个新版本的开发后,对该版本最基本的功能进行测试&#x…

兼容性报错--调整字符集解决

文章目录 错误解决办法Unicode 字符集(两个字节来表示一个字符)多字节字符集(一个字节来表示一个字符)如何选择字符集char与wchar_t的区别LPCSTR与LPCWSTR的区别 错误 解决办法 切换字符集类型 Unicode 字符集(两个字节来表示一个字符) 优点: 支持更多的字符集…

【银河麒麟】系统内存使用异常现象分析及建议

1.现象描述 问题机器系统内存占用长时间90%以上,同时伴随着高iowait,在故障时无法ssh登录,同时也影响生产业务。但之后系统内存占用会突然掉下来,在内存自己掉下来后能ssh登录。 2.显示分析 2.1 sa日志分析 查看问题机器3月15日…

STM32的 DMA(直接存储器访问) 详解

STM32的DMA(Direct Memory Access,直接存储器存取)是一种在单片机中用于高效实现数据传输的技术。它允许外设设备直接访问RAM,不需要CPU的干预,从而释放CPU资源,提高CPU工作效率,本文基于STM32F…

浏览器中js外挂脚本的执行方式

1、开发工具控制台交互执行 网页中按F12打开开发者工具,选择“控制台”,键入js脚本命令回车执行,适用于临时使用脚本逻辑简单的场景,实例如下: // 获取网页元素的文本脚本 var elem document.getElementById("…

7.x86游戏实战-C++实现跨进程读写-跨进程写内存

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 上一个内容:6.x86游戏实战-C实现跨进程读写-通过基址读取人物状态标志位 上一个内容通过基…

硬盘分区读不出来的危机与数据拯救指南

在数字时代,硬盘作为我们存储珍贵数据的“保险箱”,其稳定性和可访问性至关重要。然而,当硬盘分区突然读不出来时,这份安全感瞬间化为泡影,让人心急如焚。本文将深入探讨硬盘分区读不出来的原因、提供两种实用的数据恢…

使用ssh服务器管理远程主机

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 目录 一、配置网卡服务 1、配置网卡参数 2、创建网络会话 3、绑定两块网卡 二、远程控制服务 1、配置sshd服务 2、在Windows连接 3、安全密钥…

云原生必知必会-docker安装

文章目录 一、docker安装二、centos7 安装docker-compose三、修改docker的镜像源四、docker异常处理(没有那个文件或目录)五、配置虚拟机上docker的代理总结 一、docker安装 # 安装上传下载工具 上传命令rz -bey,下载命令sz 文件名 yum -y i…

自定义刷题工具-python实现

背景: 最近想要刷题,虽然目前有很多成熟的软件,网站。但是能够支持自定义的导入题库的非常少,或者是要么让你开会员,而直接百度题库的话,正确答案就摆在你一眼能看见的地方,看的时候总觉得自己…

Xubuntu24.04之设置高性能模式两种方式(二百六十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+AOSP…

ArkUI开发学习随机——B站视频简介页面,美团购买界面

案例一:B站视频简介页面 代码: build() {Column(){Column(){Stack(){Image($r("app.media.genimpact")).width(200).height(125).borderRadius({topLeft:5,topRight:5})Row(){Image($r("app.media.bz_play")).height(24).fillColor…

虚拟机如何选择处理器和内核数量,实现最佳性能

一、基本概念 处理器数量指的是:虚拟的CPU数量。 每个处理器的内核数量指的是:虚拟CPU的内核数。 处理器内核总数处理器数量✖每个处理器的内核数量 此处虚拟机的处理器内核总数对应于真实物理机(或者叫宿主机)的CPU线程数&#x…

Python编程学习笔记(3)--- 操作列表

1、遍历列表 遍历列表可以采用for循环的方法,需要对列表中的每一个元素都执行相同的操作。 具体事实如下: name ["ada","cdb","dbc","bad","jinb"] for Name in name:print(Name)运行结果&#x…

灵活多变的对象创建——工厂方法模式(Python实现)

1. 引言 大家好,又见面了!在上一篇文章中,我们聊了聊简单工厂模式,今天,我们要进一步探讨一种更加灵活的工厂设计模式——工厂方法模式。如果说简单工厂模式是“万能钥匙”,那工厂方法模式就是“变形金刚”…

Windows10 企业版 LTSC 2021发布:一键点击获取!

Windows10企业版 LTSC 2021是微软发布的长达5年技术支持的Win10稳定版本,追求稳定的企业或者个人特别适合安装该系统版本。该版本离线制作而成,安全性高,兼容性出色,适合新老机型安装,力求带给用户更稳定、高效的操作系…

应急响应——勒索病毒

先上搜索引擎上搜 也可以用360来杀 但是都无法解密 可以解密的: linux

db期末复习自用[应试向 附习题]

第一章 数据库系统实现整体数据的结构化,主要特征之一,是db区别于文件系统的本质区别。 数据库系统三个阶段:人工、文件、数据库系统。 数据库管理系统的功能:数据库定义、操纵 、(保护、存储、维护)、数…

Kubernetes 为pod指定DNS

在k8s里面,默认创建pod会给pod默认分配一个默认的dns,这个dns是哪来的呢?可不可以改成其他的dns呢? 先进入到pod里面来,可以看到这里面默认设置的DNS服务器,这个服务器地址为10.96.0.10。这个地址是k8s自动…

Linux基本命令的使用示例

目录 1实现效果:在downloads目录下创建1个空文件夹empty,创建1个空文件lake.txt,输入任意数据保存后退出 2实现效果:搜索包含关键字"泉眼"的行 3实现效果:重命名文件夹empty为full,复制文件cc…