百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

在Python中使用PCA和t-SNE可视化高维数据集

bigegpt 2024-09-25 14:37 4 浏览

任何与数据相关的挑战的第一步都是从研究数据本身开始的。例如,可以通过查看某些变量的分布或查看变量之间的潜在相关性来研究。

目前的问题是,很多数据集都有大量的变量。换句话说,它们是多维度的,数据沿着这些维度分布。这样的话,可视化地研究数据会变得很有挑战性,大多数时候甚至不可能手工完成。但是,研究数据时,可视化数据是非常重要的。因此,理解如何可视化高维数据集是关键,这可以使用降维技术来实现。这篇文章将重点介绍两种降维技术技术:PCA和t-SNE。

关于这两项技术,后面会详细介绍,现在,让我们先得到一些高维数据。

MNIST数据集

在本文中,我们将使用MNIST数据集。无需手动下载数据集,因为我们可以通过使用Scikit Learn获取数据集。

首先把所有的库都准备好。

然后开始加载数据

把矩阵和向量转换为Pandas数据框,这与R语言中使用的数据框非常相似,使我们更容易进行绘图。

为了避免在计算中使用全部70000个数据,所以我们将采用数据的随机子集。随机化很重要,因为数据集会按其标签排序,即前7000左右是零)。为了确保随机化,创建数字0-69999的随机排列,以便稍后为计算和数据可视化进行选择。

我们现在有了数据框和随机向量。先来检查一下这些数字,并为此生成30个随机图像。

现在可以开始考虑如何区分0和1、2等等。例如,如果您是邮局,这样的算法可以帮助您使用机器读取和分类手写信封,而不是让人类这样做。显然,现在我们有非常先进的方法来做到这一点,但是这个数据集仍然提供了一个非常好的例子,可以让我们看到降维的具体方法以及它们的工作情况。

这些图像基本上都是28×28像素,因此总共有784个“维度”,每个维度包含一个特定像素的值。

我们要做的是大幅减少维度数量,同时尽可能多地保留信息中的“变化”。接下来,让我们了解什么是主成分分析。

使用PCA降维

PCA是一种减少数据集维数的同时保留大部分信息的技术。它使用一些维度之间的相关性,并试图通过提供最少的变量,并尽可能地保留关于原始数据分布的最多信息。这个过程并不是简单的猜测,而是使用称为数据矩阵的特征值和特征向量进行计算。协方差矩阵的特征向量能够体现数据变化的主要方向,并且是数据集变化的最主要方向。

我们将使用PCA的Scikit-Learn实现这个计算过程。

首先从二维图和三维图开始,从原始的784维度生成前三个主要组成部分,并看到总数据集中有多少变化。

前两个组件大约占整个数据集变化的25%,这是否足以将不同的数据分开呢?创建第一个和第二个主成分的散点图,并用不同的颜色为每个不同类型的数据着色。如果可以的话,相同类型的数据将被聚集在一起,这意味着前两个主要组件实际上能反映关于特定数字类型的大量信息。

从图中我们可以看到,前两个组件确实包含着一些关于特定数据的信息,但是这样显然不足以将不同的数据分开。我们还可以用t-SNE技术来进行降维。接下来,我们来探索用t-SNE技术进行可视化数据集操作。

与3d版本的相同操作

t-SNE

t-SNE是另一种降维的技术,特别适用于高维数据集的可视化。与PCA相反,它不是一种数学技术,而是一种概率技术。 t-SNE的工作原理如下:

“t-SNE最小化了两个分布之间的差异:一个是度量输入对象成对相似性的分布,另一个是度量嵌入中相应低维点成对相似性的分布。”

本质上,这意味着它会查看输入到算法中的原始数据,并通过匹配两个分布来查看如何使用较少的维度来最佳地展示数据。但是它的方式并不简便,因此使用这种技术存在较多的限制。例如,在维度数据非常高的情况下,您可能需要在使用t-SNE之前应用另一种降维技术:

t-SNE的另一个缺点是,由于t-SNE在对象数N中是按比例平方缩放,因此其适用性仅限于只有几千个输入对象的数据集。除此之外,其过程会变得太慢而不实用,内存要求也会变高。

因此,在本文的其余部分中,我们将使用该算法的Scikit-Learn实现。

与上面的建议相反,我们将首先尝试在数据的实际维度上运行算法(784)。为了确保系统不会在内存和功耗或者时间方面产生负担,只使用前10000个样本来运行算法。为了方便稍后进行比较,我们还将在子集上再次运行PCA。

X

现在我们有了两个维度结果,接下来创建两个维度的散点图,并根据各自的标签为每个样本上色,来再次可视化它们。

这已经比我们之前使用的PCA可视化有了明显的改进。我们可以看到这些数字非常清楚地聚集在它们自己的子组中。如果现在使用聚类算法来挑选分离的数据,我们可以相当准确地为标签分配新点,来比较PCA和T-SNE:

记住这些数据,接下来,我们在将数据输入t-SNE算法之前再次使用PCA减少维数。首先创建一个新的PCA算法生成的包含50个维度的数据集,然后使用这个数据集执行t-SNE:

令人惊讶的是,前50个组件大致占据了数据总变化的85%左右。

现在,尝试将这些数据输入t-SNE算法。为了确保算法不占用太多内存和CPU,这次我们将使用其中10000个样本。代码部分在文末附录部分,它产生的结果如下:

从这个图中我们可以清楚地看到,所有的样本清晰地分隔开来,并以各自的数据类型分组。接下来使用聚类算法,并试图识别集群,或使用这两个维度作为另一个算法的输入(类似于神经网络)。

我们已经探索了如何使用各种降维技术,并用二维散点图可视化高维数据。这个过程没有涉及到实际的数学,而是依赖于Scikit-Learn实现的。

附录:代码

关于PCA上的t-SNE

可视化数据

相关推荐

C#.NET Autofac 详解(c# autoit)

简介Autofac是一个成熟的、功能丰富的.NET依赖注入(DI)容器。相比于内置容器,它额外提供:模块化注册、装饰器(Decorator)、拦截器(Interceptor)、强o的属性/方法注...

webapi 全流程(webapi怎么部署)

C#中的WebAPIMinimalApi没有控制器,普通api有控制器,MinimalApi是直达型,精简了很多中间代码,广泛适用于微服务架构MinimalApi一切都在组控制台应用程序类【Progr...

.NET外挂系列:3. 了解 harmony 中灵活的纯手工注入方式

一:背景1.讲故事上一篇我们讲到了注解特性,harmony在内部提供了20个HarmonyPatch重载方法尽可能的让大家满足业务开发,那时候我也说了,特性虽然简单粗暴,但只能解决95%...

C# 使用SemanticKernel调用本地大模型deepseek

一、先使用ollama部署好deepseek大模型。具体部署请看前面的头条使用ollama进行本地化部署deepseek大模型二、创建一个空的控制台dotnetnewconsole//添加依赖...

C#.NET 中间件详解(.net core中间件use和run)

简介中间件(Middleware)是ASP.NETCore的核心组件,用于处理HTTP请求和响应的管道机制。它是基于管道模型的轻量级、模块化设计,允许开发者在请求处理过程中插入自定义逻辑。...

IoC 自动注入:让依赖注册不再重复劳动

在ASP.NETCore中,IoC(控制反转)功能通过依赖注入(DI)实现。ASP.NETCore有一个内置的依赖注入容器,可以自动完成依赖注入。我们可以结合反射、特性或程序集扫描来实现自动...

C#.NET 依赖注入详解(c#依赖注入的三种方式)

简介在C#.NET中,依赖注入(DependencyInjection,简称DI)是一种设计模式,用于实现控制反转(InversionofControl,IoC),以降低代码耦合、提高可...

C#从零开始实现一个特性的自动注入功能

在现代软件开发中,依赖注入(DependencyInjection,DI)是实现松耦合、模块化和可测试代码的一个重要实践。C#提供了优秀的DI容器,如ASP.NETCore中自带的Micr...

C#.NET 仓储模式详解(c#仓库货物管理系统)

简介仓储模式(RepositoryPattern)是一种数据访问抽象模式,它在领域模型和数据访问层之间创建了一个隔离层,使得领域模型无需直接与数据访问逻辑交互。仓储模式的核心思想是将数据访问逻辑封装...

C#.NET 泛型详解(c# 泛型 滥用)

简介泛型(Generics)是指在类型或方法定义时使用类型参数,以实现类型安全、可重用和高性能的数据结构与算法为什么需要泛型类型安全防止“装箱/拆箱”带来的性能损耗,并在编译时检测类型错误。可重用同一...

数据分析-相关性分析(相关性 分析)

相关性分析是一种统计方法,用于衡量两个或多个变量之间的关系强度和方向。它通过计算相关系数来量化变量间的线性关系,从而帮助理解变量之间的相互影响。相关性分析常用于数据探索和假设检验,是数据分析和统计建模...

geom_smooth()函数-R语言ggplot2快速入门18

在每节,先运行以下这几行程序。library(ggplot2)library(ggpubr)library(ggtext)#用于个性化图表library(dplyr)#用于数据处理p...

规范申报易错要素解析(规范申报易错要素解析)

为什么要规范申报?规范申报是以满足海关监管、征税、统计等工作为目的,纳税义务人及其代理人依法向海关如实申报的行为,也是海关审接单环节依法监管的重要工作。企业申报的内容须符合《中华人民共和国海关进出口货...

「Eurora」海关编码归类 全球海关编码查询 关务服务

  海关编码是什么?  海关编码即HS编码,为编码协调制度的简称。  其全称为《商品名称及编码协调制度的国际公约》(InternationalConventionforHarmonizedCo...

9月1日起,河南省税务部门对豆制品加工业试行新政7类豆制品均适用投入产出法

全媒体记者杨晓川报道9月2日,记者从税务部门获悉,为减轻纳税人税收负担,完善农产品增值税进项税额抵扣机制,根据相关规定,结合我省实际情况,经广泛调查研究和征求意见,从9月1日起,我省税务部门对豆制品...