深度学习核函数

ops/2025/1/21 3:55:10/

一、核函数的基本概念

核函数在机器学习中具有重要应用价值,常用于支持向量机(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.ppmy.cn/ops/151824.html

相关文章

一文大白话讲清楚webpack基本使用——4——vue-loader的配置和使用

一文大白话讲清楚webpack基本使用——4——vue-loader的配置和使用 1. 建议按文章顺序从头看是看 第一篇:一文大白话讲清楚啥是个webpack第二篇:一文大白话讲清楚webpack基本使用——1——完成webpack的初步构建第三篇一文大白话讲清楚webpack基本使用…

rabbitmq安装延迟队列

在RabbitMQ中,延迟队列是一种特殊的队列类型。当消息被发送到此类队列后,不会立即投递给消费者,而是会等待预设的一段时间,待延迟期满后才进行投递。这种队列在多种场景下都极具价值,比如可用于处理需要在特定时间触发…

Android-目前最稳定和高效的UI适配方案

谈到适配,首先需要介绍几个基本单位: 1、密度无关像素(dp): 含义:density-independent pixel,叫dp或dip,与终端上的实际物理像素点无关 单位:dp,可以保证在…

HTML<img>标签

例子 如何插入图片&#xff1a; <img src"img_girl.jpg" alt"Girl in a jacket" width"500" height"600"> 下面有更多“自己尝试”的示例。 定义和用法 该<img>标签用于在 HTML 页面中嵌入图像。 从技术上讲&#x…

父子盒子滑动事件穿透问题

问题描述 当父子盒子都有滚动条时&#xff0c;在子盒子内滚动时&#xff0c;父盒子滚动子盒子无法滚动&#xff0c;直到父盒子滚动到底部&#xff0c;子盒子才滚动 解决 如果是vue的项目&#xff0c;直接在子盒子上添加 wheel.stop""

【LFS/从0构建Linux系统】软件包与补丁安装及环境配置

笔者从虚拟机换回了开发板&#xff0c;系统仍然是Ubuntu。 文章目录 1. 安装包与补丁的安装1.1 wget指令1.2 aria2指令1.3 使用阿里云的整合包 2. 最后的准备阶段(环境配置)3 .总结 在上篇文章&#xff0c;我们完成lfs的硬件准备和磁盘分区。 最终达成这个效果&#xff1a; 那么…

Syncthing在ubuntu下的安装使用

以前安装这个软件的时候&#xff0c; 是在windows和mac上&#xff0c;都是图形化的安装方式&#xff0c;但是ubuntu不太一样&#xff0c;需要增加源&#xff0c;然后执行命令。安装的系统版本是2004。 参考链接1&#xff0c;主要命令包含下面几个部分&#xff1a; 第一步&…

MySQL中like模糊查询如何优化?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL中like模糊查询如何优化?】面试题。希望对大家有帮助&#xff1b; MySQL中like模糊查询如何优化? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在MySQL中&#xff0c;LIKE模糊查询是非常常见的&#xff0c;但它…