深度学习核函数

一、核函数的基本概念

核函数在机器学习中具有重要应用价值,常用于支持向量机(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}")

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

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

相关文章

.Net Core微服务入门全纪录(四)——Ocelot-API网关(上)

系列文章目录 1、.Net Core微服务入门系列(一)——项目搭建 2、.Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上) 3、.Net Core微服务入门全纪录(三)——Consul-服务注…

2024年智慧消防一体化安全管控年度回顾与2025年预测

随着科技的飞速发展,智慧营区一体化安全管控在2024年取得了显著进展,同时也为2025年的发展奠定了坚实基础。 2024年年度回顾 政策支持力度持续加大:国家对消防安全的重视程度不断提高,出台了一系列涵盖技术创新、市场应用、人才培…

抖音小程序一键获取手机号

前端代码组件 <button v-if"!isFromOrderList"class"get-phone-btn" open-type"getPhoneNumber"getphonenumber"onGetPhoneNumber">一键获取</button>// 获取手机号回调onGetPhoneNumber(e) {var that this tt.login({f…

【线性代数】列主元法求矩阵的逆

列主元方法是一种用于求解矩阵逆的数值方法&#xff0c;特别适用于在计算机上实现。其基本思想是通过高斯消元法将矩阵转换为上三角矩阵&#xff0c;然后通过回代求解矩阵的逆。以下是列主元方法求解矩阵 A A A 的逆的步骤&#xff1a; [精确算法] 列主元高斯消元法 步骤 1&am…

从零开始:Spring Boot核心概念与架构解析

引言 在当今的Java开发领域&#xff0c;Spring Boot已经成为构建企业级应用的首选框架之一。它以其简洁、高效、易于上手的特点&#xff0c;极大地简化了Spring应用的开发过程。本文将从Spring Boot的核心概念入手&#xff0c;深入解析其架构设计和运行原理&#xff0c;帮助读…

后端面试题分享第一弹(状态码、进程线程、TCPUDP)

后端面试题分享第一弹 1. 如何查看状态码&#xff0c;状态码含义 在Web开发和调试过程中&#xff0c;HTTP状态码是了解请求处理情况的重要工具。 查看状态码的步骤 打开开发者工具&#xff1a; 在大多数浏览器中&#xff0c;您可以通过按下 F12 键或右键单击页面并选择“检查…

7、数组知识点汇总

一、 数组基本概念 程序算法数据结构 算法&#xff1a;解决程序的流程步骤数据结构&#xff1a;将数据按照某种特定的结构来存储设计良好的数据结构会导致良好的算法。ArrayList、LinkedList 数组是最简单的数据结构。 1、数组&#xff1a; 数组&#xff1a;存放同一种类型…

计算机网络 (48)P2P应用

前言 计算机网络中的P2P&#xff08;Peer to Peer&#xff0c;点对点&#xff09;应用是一种去中心化的网络通信模式&#xff0c;它允许设备&#xff08;或节点&#xff09;直接连接并共享资源&#xff0c;而无需传统的客户端-服务器模型。 一、P2P技术原理 去中心化架构&#…

【技巧】优雅的使用 pnpm+Monorepo 单体仓库构建一个高效、灵活的多项目架构

单体仓库&#xff08;Monorepo&#xff09;搭建指南&#xff1a;从零开始 单体仓库&#xff08;Monorepo&#xff09;是一种将多个相关项目集中管理在一个仓库中的开发模式。它可以帮助开发者共享代码、统一配置&#xff0c;并简化依赖管理。本文将通过实际代码示例&#xff0…

包文件分析器 Webpack Bundle Analyzer

webpack-bundle-analyzer 是一个非常有用的工具&#xff0c;用于可视化和分析 Webpack 打包生成的文件。这使得开发者能够更好地理解应用的依赖关系、包的大小&#xff0c;以及优化打包的机会。以下是关于 webpack-bundle-analyzer 的详细介绍&#xff0c;包括它的安装、使用以…

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

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

持续升级《在线写python》小程序的功能,文章页增加一键复制功能,并自动去掉html标签

增加复制按钮后的界面是这样的 代码如下&#xff1a; <template><view><x-header></x-header><view class"" v-if"article_info"><view class"kuai bgf"><view class"ac fs26"><img sr…

今天也是记录小程序进展的一天(破晓时8)

嗨嗨嗨朋友们&#xff0c;今天又来记录一下小程序的进展啦&#xff01;真是太激动了&#xff0c;项目又迈出了重要的一步&#xff0c;231啦&#xff01;感觉每一步的努力都在积累&#xff0c;功能逐渐完善&#xff0c;离最终上线的目标越来越近了。大家一直支持着这个项目&…

启动虚拟机中客户机后导致电脑蓝屏的解决办法

不考虑重新安装虚拟机的解决办法有两种&#xff1a; vmx文件破损时使用 1&#xff09;删除CentOS 64-bit.vmx文件 2&#xff09;打开vmware-0.log文件&#xff0c;找到CONFIGURATION 和 USER DEFAULTS 并把这两个之间的内容拷贝出来 删除框出来的部分&#xff0c;复制框出来的…

Word2Vec中的CBOW模型训练原理详细解析

Word2Vec中的CBOW模型训练原理详细解析 1. CBOW模型概述 CBOW模型的训练目标是利用一个单词周围的上下文单词来预测该单词本身。具体来说&#xff0c;给定当前单词的上下文单词&#xff0c;通过训练神经网络来最大化当前单词出现在这些上下文单词中的概率。 2. 模型结构 CB…

Android Studio打包APK

1.导出APK安装包 如果是首次打包&#xff0c;Create new 单击蓝色对话框右边文件夹&#x1f4c2;图标 &#xff0c;选择密钥保存路径&#xff0c;然后在下方File name对话框中填写您想要名称&#xff0c;再点击OK回到密钥创建对话框。 在此对话框中填写密码&#xff08;Passwo…

MySql字段的值是以逗号隔开的另一个表的主键关联查询

查询sql SELECT s.student_id, s.name, c.name as course_name FROM student s INNER JOIN course c ON FIND_IN_SET(c.course_id, s.course_id) > 0 WHERE 1 1;相似sql -- 翻译&#xff08;需要带条件&#xff0c;可用于字典翻译&#xff0c;但条件需要注意唯一性&#…

windows git bash 使用zsh 并集成 oh my zsh

参考了 这篇文章 进行配置&#xff0c;记录了自己的踩坑过程&#xff0c;并增加了 zsh-autosuggestions 插件的集成。 主要步骤&#xff1a; 1. git bash 这个就不说了&#xff0c;自己去网上下&#xff0c;windows 使用git时候 命令行基本都有它。 主要也是用它不方便&…

QD Laser携“Lantana”激光器参展SPIE光子学西部展2025,聚焦紧凑型设计

据悉&#xff0c;QD Laser公司将在2025年SPIE光子学西部展览会上展出其最新产品——世界最小一体化紧凑型可见光激光器“Lantana”。该展会将于1月28日至30日在旧金山的Moscone中心举行。 在展会期间&#xff0c;QD Laser公司将现场展示这款超小型、轻便设备—— “Lantana”。…

Ubuntu 22.04 TLS 忘记root密码,重启修改的解决办法

1.想办法进入这个界面&#xff0c;我这里是BIOS引导的是按Esc按一下就行&#xff0c;UEFI的貌似是按Shift不得而知&#xff0c;没操作过。下移到Advanced options for Ubuntu&#xff0c;按enter 2.根据使用的内核版本&#xff0c;选择带「recovery mode」字样的内核版本&#…