深度学习核函数

news2025/1/23 19:41:28

一、核函数的基本概念

核函数在机器学习中具有重要应用价值,常用于支持向量机(SVM)等算法中。 核函数是面试中经常被考到的知识点,对于找工作和实际数据转换都有重要作用。

二、数据建模与核函数的作用

数据越多,可利用的信息越多,有助于建立更准确的模型。 核函数可以将低维数据映射到高维空间,丰富数据特征,提高模型的决策能力

简单的数据可视化与核函数作用展示

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_circles
from sklearn.decomposition import PCA

# 生成非线性可分数据
X, y = make_circles(n_samples=500, factor=0.5, noise=0.05)

# 数据可视化
plt.figure(figsize=(8, 6))
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis')
plt.title('Original Data (Non - linearly separable in 2D)')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()

# 假设这里使用一个简单的多项式核函数来进行特征映射(仅为概念展示,非完整实现)
def simple_polynomial_kernel(x1, x2, degree=2):
    return (1 + np.dot(x1, x2)) ** degree

# 简单模拟将数据映射到高维空间后的情况(这里只是简单示意,实际映射更复杂)
new_features = []
for i in range(len(X)):
    new_feature = []
    for j in range(len(X)):
        new_feature.append(simple_polynomial_kernel(X[i], X[j]))
    new_features.append(new_feature)
new_features = np.array(new_features)

# 使用PCA将高维数据降维到2D进行可视化(以便观察)
pca = PCA(n_components=2)
X_pca = pca.fit_transform(new_features)

# 可视化映射后的数据
plt.figure(figsize=(8, 6))
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis')
plt.title('Data after Kernel Mapping (Visualized in 2D after PCA)')
plt.xlabel('PCA Component 1')
plt.ylabel('PCA Component 2')
plt.show()

三、核函数的实际例子

1.通过低维不可分问题的例子,说明核函数可以将数据映射到高维空间,解决分类问题。

2.高维空间中的数据可以通过简单的超平面进行线性分割,使得原问题变得容易解决。

使用核函数解决低维不可分问题

import numpy as np
from sklearn.svm import SVC
from sklearn.datasets import make_circles
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 生成非线性可分数据
X, y = make_circles(n_samples=1000, factor=0.3, noise=0.1)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 使用线性核函数的SVM
linear_svm = SVC(kernel='linear')
linear_svm.fit(X_train, y_train)
linear_pred = linear_svm.predict(X_test)
linear_accuracy = accuracy_score(y_test, linear_pred)
print(f"线性核函数SVM在低维不可分数据上的准确率: {linear_accuracy}")

# 使用高斯核函数(RBF核)的SVM
rbf_svm = SVC(kernel='rbf')
rbf_svm.fit(X_train, y_train)
rbf_pred = rbf_svm.predict(X_test)
rbf_accuracy = accuracy_score(y_test, rbf_pred)
print(f"高斯核函数(RBF核)SVM在低维不可分数据上的准确率: {rbf_accuracy}")

四、核函数类型

核函数的选择

1.核函数的选择通常限于线性核函数和高斯核函数,其他核函数虽然存在,但使用较少。

2.线性核函数和高斯核函数能够解决大多数问题,且广泛应用于实践中。

3.自定义核函数的选择需要充分的证明和实验,目前未见有人这样做。

线性核函数的定义和特点

1.Linear线性核函数执行内积操作,对输入数据不做任何变换,直接使用原始特征。

在这里插入图片描述

2.线性核函数的优点在于简单和计算效率高,适用于特征丰富且样本量大的数据集。

3.线性核函数适用于简单问题,能够保持模型的稳定性,避免过拟合(算法模型太复杂,泛化性低)。

4.当样本数据量特别大时,线性核函数的计算量较小,速度较快。

5.实时应用中,线性核函数因其简单和高效而常被首选。

多项式核函数

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=%E6%A0%B8%E5%87%BD%E6%95%B0%2B88c985e4-ea4a-477f-9b84-570d27d48441%2Fimage%201.png&pos_id=img-7TtHBlLz-173692422277

高斯核函数

高斯核函数是计算中最常用的方法之一 ,广泛应用于线性回归、多项式回归等。高斯核函数通过升维使数据或决策边界信息更多,从而提高分类效果。 高斯核函数比多项式核函数效果更好,是公认的最常用的核函数。
在这里插入图片描述

高斯核函数介绍

1.高斯核函数基于高斯分布(正态分布)

2.一维高斯函数具有标准差和均值参数 3.二维高斯函数扩展到二维空间,控制高度

高斯核函数的公式

在这里插入图片描述

1.公式中包含x和y,表示数据中的两个样本点

2.计算样本点之间的差异性,通过指数形式表达

3.结果反映样本点之间的相似程度

高斯核函数的好处

1.能够将数据特征映射到无穷维空间

2.通过泰勒展开近似,得到与样本点相关的无穷维特征

3.增加特征维度可以提高处理问题的能力,但也增加了过拟合风险

高斯函数参数影响

1.高斯函数的参数对其结果有影响,主要涉及σ参数。

2.σ较小时,高斯函数更尖锐,样本点间的度量变化更快,特征更鲜明,但过拟合风险较高。

3.σ较大时,高斯函数较平坦,样本点间的度量变化较慢,特征较均匀,过拟合风险较低,但识别效果略弱。

在这里插入图片描述
在这里插入图片描述

不同核函数在 SVM 中的性能比较

import numpy as np
import matplotlib.pyplot as plt
from sklearn.svm import SVC
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 生成一些示例数据
X, y = make_classification(n_samples=1000, n_features=20, n_informative=10, n_classes=2, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 使用线性核函数的SVM
linear_svm = SVC(kernel='linear')
linear_svm.fit(X_train, y_train)
linear_pred = linear_svm.predict(X_test)
linear_accuracy = accuracy_score(y_test, linear_pred)
print(f"线性核函数SVM的准确率: {linear_accuracy}")

# 使用高斯核函数(RBF核)的SVM
rbf_svm = SVC(kernel='rbf', gamma='scale')
rbf_svm.fit(X_train, y_train)
rbf_pred = rbf_svm.predict(X_test)
rbf_accuracy = accuracy_score(y_test, rbf_pred)
print(f"高斯核函数(RBF核)SVM的准确率: {rbf_accuracy}")

# 使用多项式核函数的SVM
poly_svm = SVC(kernel='poly', degree=3)
poly_svm.fit(X_train, y_train)
poly_pred = poly_svm.predict(X_test)
poly_accuracy = accuracy_score(y_test, poly_pred)
print(f"多项式核函数SVM的准确率: {poly_accuracy}")

# 比较不同核函数的准确率
kernel_accuracies = {
    'Linear Kernel': linear_accuracy,
    'RBF Kernel': rbf_accuracy,
    'Polynomial Kernel': poly_accuracy
}

plt.bar(kernel_accuracies.keys(), kernel_accuracies.values())
plt.title('Accuracy Comparison of Different Kernels in SVM')
plt.xlabel('Kernel Type')
plt.ylabel('Accuracy')
plt.show()

五、解决计算量问题

在这里插入图片描述

核函数的例子

1.例子中,原始数据为两个三维向量,通过一个九维的映射函数将数据转换到高维空间。

2.在低维空间中计算内积,并将结果通过核函数变换,得到与在高维空间中直接计算相同的结果。

3.这种方法大大降低了计算量,特别是在处理大规模数据集时效果显著。

核函数的数学原理

1.核函数的数学原理在于利用平方项的变换,将低维空间中的内积结果通过平方项映射到高维空间。

2.通过这种变换,可以在低维空间中计算内积,并将结果映射到高维空间,从而避免直接在高维空间中的复杂计算。 3.这种变换在数值上是等价的,因此可以有效地简化计算过程。

六、核函数在支持向量机(SVM)中应用

from sklearn import svm
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 生成一些示例数据
X, y = make_classification(n_samples=1000, n_features=20, n_informative=10, n_classes=2, random_state=42)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 使用线性核函数的SVM
linear_svm = svm.SVC(kernel='linear')
linear_svm.fit(X_train, y_train)
linear_pred = linear_svm.predict(X_test)
linear_accuracy = accuracy_score(y_test, linear_pred)
print(f"线性核函数SVM的准确率: {linear_accuracy}")

# 使用高斯核函数(RBF核)的SVM
rbf_svm = svm.SVC(kernel='rbf')
rbf_svm.fit(X_train, y_train)
rbf_pred = rbf_svm.predict(X_test)
rbf_accuracy = accuracy_score(y_test, rbf_pred)
print(f"高斯核函数(RBF核)SVM的准确率: {rbf_accuracy}")

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

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

相关文章

数据结构(三) 排序/并查集/图

目录 1. 排序 2.并查集 3.图 1.排序: 1.1 概念: 排序就是将数据按照某种规则进行排列, 具有某种顺序. 分为内排序和外排序. 内排序就是: 将数据放在内存中的排序; 外排序是: 数据太多无法在内存中排序的. 1.2 插入排序: 插入排序包含: 直接插入排序和希尔排序. (1) 直接插入…

ECCV 2024,全新激活函数!

激活函数对深度神经网络的成功可太重要了,它可以提升学习复杂关系的能力,减少过拟合,增强模型性能,与它相关的研究一直是重中之重。最近,这方向有了不少新突破。 ECCV 2024上的这篇,提出了一种可训练的高表…

小米Vela操作系统开源:AIoT时代的全新引擎

小米近日正式开源了其物联网嵌入式软件平台——Vela操作系统,并将其命名为OpenVela。这一举动在AIoT(人工智能物联网)领域掀起了不小的波澜,也为开发者们提供了一个强大的AI代码生成器和开发平台。OpenVela项目源代码已托管至GitH…

ComfyUI实现老照片修复——AI修复老照片(ComfyUI-ReActor / ReSwapper)尚待完善

AI修复老照片,试试吧,不一定好~~哈哈 2023年4月曾用过ComfyUI,当时就感慨这个工具和虚幻的蓝图很像,以后肯定是专业人玩的。 2024年我写代码去了,AI做图没太关注,没想到,现在ComfyUI真的变成了工…

YOLOv5训练自己的数据及rknn部署

YOLOv5训练自己的数据及rknn部署 一、下载源码二、准备自己的数据集2.1 标注图像2.2 数据集结构 三、配置YOLOv5训练3.1 修改配置文件3.2 模型选择 四、训练五、测试六、部署6.1 pt转onnx6.2 onnx转rknn 七、常见错误7.1 训练过程中的错误7.1.1 cuda: out of memory7.1.2 train…

C# OpenCvSharp 部署文档矫正,包括文档扭曲/模糊/阴影等情况

目录 说明 效果 模型 项目 代码 下载 参考 C# OpenCvSharp 部署文档矫正,包括文档扭曲/模糊/阴影等情况 说明 地址:https://github.com/RapidAI/RapidUnDistort 修正文档扭曲/模糊/阴影等情况,使用onnx模型简单轻量部署&#xff0c…

贪心算法(题1)区间选点

输出 2 #include <iostream> #include<algorithm>using namespace std;const int N 100010 ;int n; struct Range {int l,r;bool operator <(const Range &W)const{return r<W.r;} }range[N];int main() {scanf("%d",&n);for(int i0;i&l…

煤矿场景下安全帽检测数据集VOC+YOLO格式179张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;170 标注数量(xml文件个数)&#xff1a;170 标注数量(txt文件个数)&#xff1a;170 标注…

RTX 5090原型据称有24576个CUDA核心和800 W TDP -两个16针连接器

英伟达今年早些时候发布、将于1月30日上市的GeForce RTX 5090&#xff0c;有望成为最出色的显卡之一。然而&#xff0c;硬件侦探HXL发掘出了一款疑似早期原型产品。不过&#xff0c;考虑到传闻中的规格参数&#xff0c;它很有可能会成为GeForce RTX 5090 Ti或者RTX Titan Black…

哪个控制面板适合您?

如今&#xff0c;VPS云主机的控制面板在网站托管中变得越来越重要。对于网站管理者和普通用户来说&#xff0c;这类控制面板提供了一站式的管理工具&#xff0c;可以在同一个界面中处理所有网站的管理任务&#xff0c;极大地减少了多系统间重复操作的麻烦。 但随着越来越多的公…

Redis - 通用命令

目录 了解Redis客户端set 和 getRedis全局命令keys命令exists命令del命令expire命令ttl命令Redis中key的过期策略type 了解Redis客户端 想要输入Redis命令,必须先进入Redis客户端 使用redis-cli连接本机的命令行客户端 redis-cli如果想连接其他的ip和端口的客户端&#xff0…

重学SpringBoot3-WebClient配置与使用详解

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞??收藏评论 重学SpringBoot3-WebClient配置与使用详解 1. 简介2. 环境准备 2.1 依赖配置 3. WebClient配置 3.1 基础配置3.2 高级配置3.3 retrieve()和exchange()区别 4. 使用示例 4.1 基本请求操…

HTML5 新表单属性详解

HTML5 为 <form> 和 <input> 标签引入了一系列新属性&#xff0c;极大地增强了表单的功能和用户体验。这些新属性不仅简化了开发者的工作&#xff0c;还为用户提供了更友好、更高效的交互方式。本文将详细介绍这些新属性&#xff0c;并结合代码示例帮助大家更好地理…

【专题】为2025制定可付诸实践的IT战略规划报告汇总PDF洞察(附原数据表)

原文链接&#xff1a;https://tecdat.cn/?p39055 在当今瞬息万变的商业环境中&#xff0c;制定有效的 IT 战略规划对于企业的成功与可持续发展至关重要。本报告深入探讨了制定 IT 战略规划的关键活动&#xff0c;旨在为企业和决策者提供全面且实用的指导。 Gartner的《为202…

JAVA实战开源项目:课程作业管理系统(Vue+SpringBoot) 附源码

本文项目编号 T 023 &#xff0c;文末自助获取源码 \color{red}{T023&#xff0c;文末自助获取源码} T023&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

代码随想录算法训练营day32

代码随想录算法训练营 —day32 文章目录 代码随想录算法训练营前言一、动态规划理论基础二、509. 斐波那契数动态规划动态规划优化空间版递归法 三、70. 爬楼梯动态规划动态规划空间优化 746. 使用最小花费爬楼梯动态规划空间优化 总结 前言 今天是算法营的第32天&#xff0c…

设计模式的艺术-开闭原则

原则使用频率图&#xff08;仅供参考&#xff09; 1.如何理解开闭原则 简单来说&#xff0c;开闭原则指的是 “对扩展开放&#xff0c;对修改关闭”。 当软件系统需要增加新的功能时&#xff0c;应该通过扩展现有代码的方式来实现&#xff0c;而不是去修改已有的代码。 例如我…

grafana新增email告警

选择一个面板 比如cpu 新增一个临界点表达式 input选A 就是A的值达到某个临界点 触发告警 我这边IS ABOVE0.15就是cpu大于0.15%就触发报警&#xff0c;这个值怎么填看指标的值显示 这里要设置一下报警条件 这边随便配置下 配置标签和通知&#xff0c;选择你的邮件 看下告警…

C++17 新特性深入解析:constexpr 扩展、if constexpr 和 constexpr lambda

C17 不仅增强了现有特性&#xff0c;还引入了一些全新的编程工具&#xff0c;极大地提升了代码的效率和表达力。在这篇文章中&#xff0c;我们将深入探讨 C17 中与 constexpr 相关的三个重要特性&#xff1a;constexpr 的扩展用法、if constexpr 和 constexpr lambda。这些特性…

ChatGPT 摘要,以 ESS 作为你的私有数据存储

作者&#xff1a;来自 Elastic Ryan_Earle 本教程介绍如何设置 Elasticsearch 网络爬虫&#xff0c;将网站索引到 Elasticsearch 中&#xff0c;然后利用 ChatGPT 使用我们的私人数据来总结对其提出的问题。 Python 脚本的 Github Repo&#xff1a;https://github.com/Gunner…