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()]).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) : 随机数生成器的种子。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

百度文心4.0 Turbo开放,领跑国内AI大模型赛道!

百度文心4.0 Turbo开放,领跑国内AI大模型赛道! 前言 文心一言大模型 就在7月5日,在2024世界人工智能大会 (WAIC) 上,百度副总裁谢广军宣布文心大模型4.0 Turbo正式向企业客户全面开放!这一举动直接引发了业界的关注。那…

国产PLC能否使用无线通讯终端来实现无线通讯?让我们一探究竟

在工业生产车间内,PLC被广泛应用于自动化控制的各个环节。随着智能化工厂的建设,许多PLC仍处于信息孤岛状态,现要将厂区内分散的PLC都建立通讯,如果重新布线工厂量大且不美观,此时就需要用到工业PLC无线通讯设备来解决…

Knife4j的介绍与使用

目录 一、简单介绍1.1 简介1.2 主要特点和功能: 二、使用步骤:2.1 添加依赖:2.2 yml数据源配置2.3 创建knife4j配置类2.4 注解的作用 最后 一、简单介绍 1.1 简介 Knife4j 是一款基于Swagger的开源文档管理工具,主要用于生成和管…

【Android应用】生成证书和打包

安卓生成证书和打包 📖1. 生成自有证书📖2. 安卓打包✅步骤一:导入签名文件✅步骤二:设置打包版本✅步骤三:生成签名包或APK 📖1. 生成自有证书 地址:https://www.yunedit.com/createcert 说明…

Cesium版本升级webgl问题,glsl代码关键字修改

简介 Cesium 从1.102.0 开始,Cesium 默认使用 WebGL2 上下文。一些webgl特效代码在webgl1中支持,但是在版本升级后,运行会报各种glsl代码错误。现在有两种解决方案。详细办法描述如下所示。 1、修改配置使用WebGL1 地球初始化配置如下&…

【计算机毕业设计】基于Springboot的IT技术交流和分享平台【源码+lw+部署文档】

包含论文源码的压缩包较大,请私信或者加我的绿色小软件获取 免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者…

20240709每日后端--------最优解决Invalid bound statement (not found)

目标 最优解决Invalid bound statement (not found) 步骤 1、打包 2、查看target下是否成双成对出现 3、核对无误后,即可解决问题。

开发者必看:MySQL主从复制与Laravel读写分离的完美搭配

介绍 主从同步配置的主要性不用多说,本文将详细介绍了如何在MySQL数据库中设置主从复制,以及如何在Laravel框架中实现数据库的读写分离。 通过一系列的步骤,包括修改MySQL配置、创建同步账户、获取二进制日志文件名和位置、导出主服务器数据…

原创作品—数据可视化大屏

设计数据可视化大屏时,用户体验方面需注重以下几点:首先,确保大屏信息层次分明,主要数据突出显示,次要信息适当弱化,帮助用户快速捕捉关键信息。其次,设计应直观易懂,避免复杂难懂的…

南方CASS:测绘工作者的得力助手

初识南方CASS 南方CASS,这款软件在我的工作和生活中扮演了不可或缺的角色。作为一名长期的使用者,我深感它的功能之强大与便捷。今天,我愿以季羡林先生的口吻,带大家走进南方CASS的世界,分享我与它的点滴故事。 功能…

GTK是如何加密WLAN组播和广播数据的?

1. References WLAN 4-Way Handshake如何生成GTK?_tk bigtk gtk igtk-CSDN博客 2. 概述 在Wi-Fi网络中,单播、组播和广播帧的加密算法是由AP决定的。其中组播帧和广播帧的加密使用GTK密钥,其PTK的密钥结构如下图所示: GTK的组成…

为何要进行算法备案?保障数据安全不容小觑!

在数字经济高速发展的今天,数据已成为企业运营的核心资产,而算法则是处理和利用这些数据的关键技术。随着大数据时代的来临,数据安全问题日益凸显,同时,国家对于数据安全和算法应用的监管也日趋严格。在这样的背景下&a…

第一个基于FISCOBCOS的前后端项目(发行转账)

本文旨在介绍一个简单的基于fiscobcos的前后端网站应用。Springbootjs前后端不分离。 所使用到的合约也是一个最基本的。首先您需要知道的是完整项目分为三部分,1是区块链平台webase搭建(此项目使用节点前置webase-front即可),2是…

YOLOv8改进 | 注意力机制 | 对密集和小目标友好的EVAblock 【原理 + 完整代码】

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录 :《YOLOv8改进有效…

Object方法重写

这篇文章大家随意看看就好,只是一点理解的东西,当然你也可以认真调查。 我们需要知道Obecj是java中的一个类,是所有类的父类,即超类。对,超级赛亚人的那个超。 我们需要关注其中的equals、tostring这两个方法。 例如&…

在任何岗位都可以把自己当成一个项目经理

这几天跟一个刚入职场的姐妹交流的时候,她问了我一个问题,如果让你总结三年从助理升到经理的关键点,你觉得是什么?我思考了那么几秒钟,大概就是——在任何岗位都把自己当项目经理。 今天给大家介绍我的项目管理工具——…

AI自动生成PPT怎么用?5种提升演示效果的方法

随着#7月份我的同事一个个消失了#的话题热议,职场中的效率与变革再次成为焦点。 在忙碌的工作节奏中,AI自动生成PPT的软件悄然兴起,成为不少职场人的新宠。它们不仅简化了繁琐的PPT制作流程,更以高效、专业的姿态,助力…

c++初阶学习----入门(上)

大家好啊。最近学习了一点关于c的知识。这不就迫不及待的来与大家分享了嘛。但我这也是现学现卖所以咧。有很多遗落甚至不对的地方希望大家可以在评论区里面指出来。这样也可以增加大家对知识的巩固。 c语言与c的联系 不知道大家看到c会不会不由自主的联想到C语言啊。毕竟都是…

【技术选型】FastDFS、OSS如何选择

【技术选型】FastDFS、OSS如何选择 开篇词:干货篇:FastDFS:OSS(如阿里云OSS): 总结篇:我是杰叔叔,一名沪漂的码农,下期再会! 开篇词: 文件存储该选…

腐蚀服务器如何设置管理员

可以设置服主与管理员 控制台中设置(需游戏账号在线) 服主 添加:在控制台中输入ownerid空格SteamID 删除:在控制台中输入removeowner空格SteamID 管理员 添加:在控制台中输入moderatorid空格SteamID 删除&#…