景点网站设计与制作/seo培训学院官网

景点网站设计与制作,seo培训学院官网,微信公众号怎么做文章排版,佛山网站建设过程一、前言 在机器学习和数据科学领域,高维数据的可视化是一个极具挑战但又至关重要的问题。高维数据难以直观地理解和分析,而有效的可视化方法能够帮助我们发现数据中的潜在结构、模式和关系。本文以经典的MNIST手写数字数据集为例,探讨如何利…

 一、前言

        在机器学习和数据科学领域,高维数据的可视化是一个极具挑战但又至关重要的问题。高维数据难以直观地理解和分析,而有效的可视化方法能够帮助我们发现数据中的潜在结构、模式和关系。本文以经典的MNIST手写数字数据集为例,探讨如何利用t-分布随机邻域嵌入(t-SNE)这一强大的降维技术,将高维的图像数据降维到二维空间,并进行可视化展示。通过本文,我们将深入了解t-SNE的原理、算法步骤,以及如何在Python中实现并应用它,从而更好地理解和探索高维数据的内在特性。


二、技术与原理简介

        在深入探讨t-SNE之前,我们首先需要区分机器学习中的两大主要范畴:监督学习和无监督学习。

        1. 监督学习

        监督学习是指在已知输入数据和对应标签的情况下,训练模型学习输入与输出之间的映射关系。模型通过学习大量的带标签数据,能够对新的、未见过的数据进行预测或分类。常见的监督学习算法包括:

  • 线性回归: 用于预测连续型变量。
  • 逻辑回归: 用于分类问题。
  • 支持向量机 (SVM): 用于分类和回归问题,尤其擅长处理高维数据。
  • 决策树: 基于树状结构进行决策,易于理解和解释。
  • 随机森林: 集成多个决策树,提高预测的准确性和鲁棒性。
  • 神经网络: 模拟人脑神经元结构,能够学习复杂的非线性关系。

        2. 无监督学习

        无监督学习是指在没有标签的情况下,训练模型发现数据中的潜在结构和模式。模型通过分析数据的内在特征,能够进行聚类、降维、关联规则挖掘等任务。常见的无监督学习算法包括:

  • 聚类: 将数据划分为不同的簇,使得同一簇内的数据相似度较高,不同簇之间的数据相似度较低。常见的聚类算法包括K-means、层次聚类、DBSCAN等。
  • 降维: 将高维数据降维到低维空间,同时尽可能保留数据的关键信息。常见的降维算法包括主成分分析 (PCA)、t-SNE、UMAP等。
  • 关联规则挖掘: 发现数据中不同项之间的关联关系,例如购物篮分析。

        3. 监督学习与无监督学习的区别

        4. MNIST数据集简介

        MNIST (Modified National Institute of Standards and Technology database) 是一个经典的手写数字数据集,广泛应用于机器学习和深度学习领域。它包含60,000个训练样本和10,000个测试样本,每个样本都是一个28x28像素的灰度图像,代表0到9之间的手写数字。

        4.1 数据格式

        MNIST数据集通常以两种格式提供:

  • 图像格式: 每个样本都是一个图像文件,例如PNG或JPEG格式。
  • 数值格式: 每个样本都被转换为一个784维的向量,其中每个元素代表一个像素的灰度值 (0到255)。

       4.2 数据集特点

  • 规模适中: MNIST数据集的规模适中,既可以用于快速原型验证,又可以用于训练复杂的模型。
  • 易于获取: MNIST数据集可以从多个来源免费获取,例如Scikit-learn、TensorFlow等。
  • 广泛应用: MNIST数据集被广泛应用于各种机器学习和深度学习算法的评估和比较。

        5. t-SNE算法原理与数学推导

        5.1 算法核心思想

        t-SNE(t-Distributed Stochastic Neighbor Embedding)是一种非线性降维技术,通过以下步骤实现高维数据到低维空间的映射:

  1. 计算高维相似度:在原始空间中,计算每对样本间的相似度
  2. 构建低维嵌入空间:在目标空间(如2D)中,通过优化使相似度分布匹配
  3. 梯度下降优化:最小化两空间分布的KL散度

        5.2 数学公式详解

        5.2.1 高维相似度计算

        对原始空间中的样本对(𝑥𝑖,𝑥𝑗) ,定义条件概率:

其中𝜎𝑖 ​为高斯核带宽,通过二分查找确定以满足** perplexity **参数(控制邻域大小)。

        5.2.2 低维相似度建模

        在目标空间中,定义联合概率:

        采用t-分布(自由度为1的Student分布)以增强对异常值的鲁棒性。

        5.2.3 目标函数优化

        通过最小化KL散度实现分布匹配:

其中

        优化过程使用梯度下降:

        5.3 算法步骤流程

  1. 参数初始化:设置降维维度(如2D)、perplexity(通常5-50)、学习率等
  2. 高维相似度计算:为每个样本计算条件概率矩阵𝑃P
  3. 低维初始化:随机生成初始嵌入坐标𝑌Y
  4. 梯度下降优化:迭代更新𝑌Y以最小化KL散度
  5. 结果输出:返回低维坐标矩阵

三、代码详解

        本文的代码主要分为以下几个部分:

        1. 导入库

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
from sklearn import datasets
from sklearn import manifold
%matplotlib inline

说明

  • import matplotlib.pyplot as plt: 导入matplotlib库,用于绘制图像。
  • import numpy as np: 导入numpy库,用于进行数值计算。
  • import pandas as pd: 导入pandas库,用于数据处理。
  • import seaborn as sns: 导入seaborn库,用于数据可视化。
  • from sklearn import datasets: 导入sklearn库中的datasets模块,用于加载数据集。
  • from sklearn import manifold: 导入sklearn库中的manifold模块,用于降维。
  • %matplotlib inline: 在Jupyter Notebook中显示图像。

        2. 加载数据

# 加载数据
data = datasets.fetch_openml('mnist_784', version=1, return_X_y=True)
pixel_values, targets = data
targets = targets.astype(int)# 将DataFrame转换为numpy数组以便更容易操作
# 如果pixel_values已经是numpy数组,这一步可以跳过
if isinstance(pixel_values, pd.DataFrame):pixel_values_array = pixel_values.values
else:pixel_values_array = pixel_values

说明

  • data = datasets.fetch_openml('mnist_784', version=1, return_X_y=True): 使用datasets.fetch_openml函数加载MNIST数据集。'mnist_784'表示数据集的名称,version=1表示数据集的版本,return_X_y=True表示返回输入数据和标签。
  • pixel_values, targets = data: 将返回的数据解包为pixel_valuestargetspixel_values包含图像的像素值,targets包含图像的标签。
  • targets = targets.astype(int): 将标签转换为整数类型。
  • if isinstance(pixel_values, pd.DataFrame):: 检查pixel_values是否为pandas DataFrame类型。
  • pixel_values_array = pixel_values.values: 如果pixel_values为pandas DataFrame类型,则将其转换为numpy数组。
  • else: pixel_values_array = pixel_values: 否则,直接使用pixel_values

        3. 显示单个图像

# 显示单个图像
single_image = pixel_values_array[1].reshape(28, 28)
plt.imshow(single_image, cmap='gray')

说明

  • single_image = pixel_values_array[1].reshape(28, 28): 选择第一个图像,并将其reshape为28x28的矩阵。
  • plt.imshow(single_image, cmap='gray'): 使用plt.imshow函数显示图像,cmap='gray'表示使用灰度颜色映射。

        4. t-SNE降维

# t-SNE降维
tsne = manifold.TSNE(n_components=2, random_state=42)
transformed_data = tsne.fit_transform(pixel_values_array[:3000])

说明

  • tsne = manifold.TSNE(n_components=2, random_state=42): 创建一个t-SNE对象。n_components=2表示将数据降维到二维空间,random_state=42表示设置随机种子,保证结果的可重复性。
  • transformed_data = tsne.fit_transform(pixel_values_array[:3000]): 使用fit_transform函数对数据进行降维。这里只使用了前3000个样本,因为t-SNE的计算复杂度较高。

        5. 创建DataFrame用于可视化

# 创建DataFrame用于可视化
tsne_df = pd.DataFrame(np.column_stack((transformed_data, targets[:3000])),columns=["x", "y", "targets"]
)
tsne_df.loc[:, "targets"] = tsne_df.targets.astype(int)

说明

  • tsne_df = pd.DataFrame(...): 创建一个pandas DataFrame对象,用于存储降维后的数据和标签。
  • np.column_stack((transformed_data, targets[:3000])): 将降维后的数据和标签按列拼接在一起。
  • columns=["x", "y", "targets"]: 设置DataFrame的列名。
  • tsne_df.loc[:, "targets"] = tsne_df.targets.astype(int): 将DataFrame中的标签转换为整数类型。

        6. 可视化

# 可视化
# 注意:在新版本的seaborn中,size参数已更改为height
try:grid = sns.FacetGrid(tsne_df, hue="targets", size=8)
except TypeError:grid = sns.FacetGrid(tsne_df, hue="targets", height=8)grid.map(plt.scatter, "x", "y").add_legend()

说明

  • grid = sns.FacetGrid(tsne_df, hue="targets", size=8): 创建一个seaborn FacetGrid对象,用于可视化降维后的数据。hue="targets"表示使用标签作为颜色编码,size=8表示设置图像的大小。
  • grid.map(plt.scatter, "x", "y").add_legend(): 使用plt.scatter函数绘制散点图,"x""y"表示散点图的横坐标和纵坐标,add_legend()表示添加图例。

        7. 完整代码

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
from sklearn import datasets
from sklearn import manifold
%matplotlib inline# 加载数据
data = datasets.fetch_openml('mnist_784', version=1, return_X_y=True)
pixel_values, targets = data
targets = targets.astype(int)# 将DataFrame转换为numpy数组以便更容易操作
# 如果pixel_values已经是numpy数组,这一步可以跳过
if isinstance(pixel_values, pd.DataFrame):pixel_values_array = pixel_values.values
else:pixel_values_array = pixel_values# 显示单个图像
single_image = pixel_values_array[1].reshape(28, 28)
plt.imshow(single_image, cmap='gray')# t-SNE降维
tsne = manifold.TSNE(n_components=2, random_state=42)
transformed_data = tsne.fit_transform(pixel_values_array[:3000])# 创建DataFrame用于可视化
tsne_df = pd.DataFrame(np.column_stack((transformed_data, targets[:3000])),columns=["x", "y", "targets"]
)
tsne_df.loc[:, "targets"] = tsne_df.targets.astype(int)# 可视化
# 注意:在新版本的seaborn中,size参数已更改为height
try:grid = sns.FacetGrid(tsne_df, hue="targets", size=8)
except TypeError:grid = sns.FacetGrid(tsne_df, hue="targets", height=8)grid.map(plt.scatter, "x", "y").add_legend()


四、总结与思考

        本文以MNIST数据集为例,详细介绍了如何使用t-SNE进行高维数据可视化。通过t-SNE降维,我们可以将784维的图像数据降维到二维空间,并在散点图上清晰地看到不同数字之间的分布情况。

        t-SNE是一种强大的降维技术,但也有一些局限性:

  • 计算复杂度高: t-SNE的计算复杂度为O(n^2),对于大规模数据集,计算时间会非常长。
  • 参数敏感: t-SNE的性能受到参数的影响,例如困惑度 (perplexity) 和学习率 (learning_rate)。
  • 全局结构失真: t-SNE主要关注局部结构,可能会导致全局结构失真。

        在实际应用中,我们需要根据具体情况选择合适的降维技术。对于大规模数据集,可以考虑使用PCA或UMAP等更高效的算法。对于需要保留全局结构的场景,可以考虑使用Isomap或LLE等算法。


【作者声明】

        本文内容基于作者对基于t-SNE的MNIST数据集可视化探索实现过程的实验与总结,所有数据和代码均为原创。文章中的观点仅代表个人见解,供读者参考交流。若有任何问题或建议,欢迎在评论区留言讨论,共同促进技术进步。


 【关注我们】

        如果您对神经网络、群智能算法及人工智能技术感兴趣,欢迎点赞、收藏并转发,与更多朋友一起探讨与交流!

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

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

相关文章

K8S学习之基础二十三:k8s的持久化存储之nfs

K8S持久化存储之nfs ​ 在 Kubernetes (k8s) 中使用 NFS(Network File System)作为存储解决方案是一种常见的方式,特别是在需要共享存储的场景中。以下是关于如何在 Kubernetes 中使用 NFS 存储的详细说明: 1. 准备 NFS 服务器 …

《C++ Primer》学习笔记(二)

第二部分:C标准库 1.为了支持不同种类的IO处理操作,标准库定义了以下类型的IO,分别定义在三个独立的文件中:iostream文件中定义了用于读写流的基本类型;fstream文件中定义了读写命名文件的类型;sstream文件…

MATLAB风光柴储微网粒子群算法

本程序实现了风光柴储微网中的粒子群优化(PSO)算法,用于优化微网的能源调度问题。具体来说,程序考虑了光伏发电、风力发电、柴油机发电(柴储),并使用粒子群算法来优化这些能源的调度&#xff0c…

解决Windows版Redis无法远程连接的问题

🌟 解决Windows版Redis无法远程连接的问题 在Windows系统下使用Redis时,很多用户会遇到无法远程连接的问题。尤其是在配置了Redis并尝试通过工具如RedisDesktopManager连接时,可能会报错“Cannot connect to ‘redisconnection’”。今天&am…

基于NXP+FPGA永磁同步电机牵引控制单元(单板结构/机箱结构)

永磁同步电机牵引控制单元(单板结构/机箱结构) 永磁同步电机牵引控制单元(TCU-PMSM)用于牵引逆变器-永磁同步电机构成的牵引电传动系统,采用轴控方式。执行高性能永磁同步电机复矢量控制策略,具有响应迅速…

MySQL 衍生表(Derived Tables)

在SQL的查询语句select …. from …中,跟在from子句后面的通常是一张拥有定义的实体表,而有的时候我们会用子查询来扮演实体表的角色,这个在from子句中的子查询会返回一个结果集,这个结果集可以像普通的实体表一样查询、连接&…

STM32配套程序接线图

1 工程模板 2 LED闪烁 3LED流水灯 4蜂鸣器 5按键控制LED 6光敏传感器控制蜂鸣器 7OLED显示屏 8对射式红外传感器计次 9旋转编码器计次 10 定时器定时中断 11定时器外部时钟 12PWM驱动LED呼吸灯 13 PWM驱动舵机 14 PWM驱动直流电机 15输入捕获模式测频率 16PWMI模式测频率占空…

鸿蒙初级考试备忘

Module类型 Module按照使用场景可以分为两种类型: Ability类型的Module: 用于实现应用的功能和特性。每一个Ability类型的Module编译后,会生成一个以.hap为后缀的文件,我们称其为HAP(Harmony Ability Package&#x…

SpringCloud 学习笔记1(Spring概述、工程搭建、注册中心、负载均衡、 SpringCloud LoadBalancer)

文章目录 SpringCloudSpringCloud 概述集群和分布式集群和分布式的区别和联系 微服务什么是微服务?分布式架构和微服务架构的区别微服务的优缺点?拆分微服务原则 什么是 SpringCloud ?核心功能与组件 工程搭建父项目的 pom 文件 注册中心Rest…

计算机网络-网络规划与设计

基本流程 需求分析—》通信规范分析—》逻辑网络设计—》物理网络设计—》实施阶段 需求分析: 确定需求,包括:业务需求、用户需求、应用需求、计算机平台需求、网络通信需求等。 产物:需求规范 通信规范分析: 现有…

《AI浪潮中的璀璨新星:Meta Llama、Ollama与DeepSeek的深度剖析》:此文为AI自动生成

《AI浪潮中的璀璨新星:Meta Llama、Ollama与DeepSeek的深度剖析》:此文为AI自动生成 引言:AI 大模型的群雄逐鹿时代 在科技飞速发展的当下,AI 大模型领域已成为全球瞩目的焦点,竞争激烈程度堪称白热化。从 OpenAI 推出…

DeepSeek linux服务器(CentOS)部署命令笔记

Linux(CentOS)FinalShellOllama远程访问,本地部署deepseek 自备CentOS服务器,并且已经使用FinalShell连接到服务器 一、准备工作 1.更新服务器 apt-get update-y 2.下载Ollama curl -fsSL https://ollama.com/install.sh | …

C#通过API接口返回流式响应内容---分块编码方式

1、背景 上一篇文章《C#通过API接口返回流式响应内容—SSE方式》阐述了通过SSE(Server Send Event)方式,由服务器端推送数据到浏览器。本篇是通过分块编码的方式实现 2、效果 3、具体代码 3.1 API端实现 [HttpGet] public async Task Chu…

SSL 原理及实验

引言 为了实现远程办公或者远程客户访问内网的资源 (1)回顾历史: 起初先出现SSL(Secure Sockets Layer)-安全套接层协议。 美国网景Netscape公司1994年研发,介于传输层TCP协议和应用层协议之间的一种协议…

UE5.5 Niagara发射器更新属性

发射器属性 在 Niagara 里,Emitter 负责控制粒子生成的规则和行为。不同的 Emitter 属性决定了如何发射粒子、粒子如何模拟、计算方式等。 发射器 本地空间(Local Space) 控制粒子是否跟随发射器(Emitter)移动。 ✅…

各省水资源平台 水资源遥测终端机都用什么协议

各个省水资源平台 水资源遥测终端机 的建设大部分从2012年开始启动,经过多年建设,基本都已经形成了稳定的通讯要求;河北瑾航科技 遥测终端机,兼容了大部分省市的通讯协议,如果需要,可以咨询和互相学习&…

使用OpenCV和MediaPipe库——抽烟检测(姿态监控)

目录 抽烟检测的运用 1. 安全监控 (1) 公共场所禁烟监管 (2) 工业安全 2. 智能城市与执法 (1) 城市违章吸烟检测 (2) 无人值守管理 3. 健康管理与医疗 (1) 吸烟习惯分析 (2) 远程监护 4. AI 监控与商业分析 (1) 保险行业 (2) 商场营销 5. 技术实现 (1) 计算机视…

WPF窗口读取、显示、修改、另存excel文件——CAD c#二次开发

效果如下: using System.Data; using System.IO; using System.Windows; using Microsoft.Win32; using ExcelDataReader; using System.Text; using ClosedXML.Excel;namespace IfoxDemo {public partial class SimpleWindow : Window{public SimpleWindow(){Initi…

HarmonyOS NEXT - 电商App实例三( 网络请求axios)

使用axios开发网络请求是一个非常常见的任务,尤其是Web前端开发者,对它非常熟悉。axios是一个基于Promise的HTTP客户端,支持浏览器和Node.js环境,使用简单且功能强大。 在harmonyOS中,如果想使用axios,可以…

Unity进阶课程【二】Mask 组件的使用 UI遮罩效果以及透明抠图效果

Unity组件讲解 Mask 时隔多年,今天咱们继续进阶课程,这几年变化很大,但是一直还是从事Unity行业,行业虽难,依旧坚持,以后会养成习惯,定期更新,希望小伙伴们监督,有想学习…