技能开发 频道

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

m88 188bet uedbet 威廉希尔 明升 bwin 明升88 bodog bwin 明升m88.com 18luck 188bet unibet unibet Ladbrokes Ladbrokes casino m88明升 明升 明升 m88.com 188bet m88 明陞 uedbet赫塔菲官网 365bet官网 m88 help

【IT168 计划】任何与数据相关的应战的第一步都是从研讨数据自身开端的。例如,云泥之别经过检查某些变量的散布或检查变量之间的潜在相关性来研讨。

现在的问题是,许多数据集都有许多的变量。换句话说,它们是多维度的,数据沿着这些维度散布。这样的话,可视化地研讨数据会变得很有应战性,大多数时分乃至不或许手艺完结。可是,研讨数据时,可视化数据是十分重要的。因而,了解一败涂地可视化高维数据集是要害,这云泥之别运用降维技能来完结。这篇文章将要点介绍两种降维技能技能:PCA和t-SNE。

关于这两项技能,后面会具体介绍,现在,让饱尝先得到一些高维数据。

MNIST数据集

在本文中,饱尝将运用MNIST数据集。无需手动下载数据集,因为饱尝云泥之别经过运用Scikit Learn获取数据集。

首要把一切的库都准备好。

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


然后开端加载数据

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


把矩阵和向量转换为Pandas数据框,这与R言语中运用的数据框十分类似,使饱尝更简略进行绘图。

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


为了防止在核算中运用悉数70000个数据,所以饱尝将选用数据的随机子集。随机化很重要,因为数据聚会按其标签排序,即前7000左右是零)。为了保证随机化,创立数字0-69999的随机摆放,以便稍后为核算和数据可视化进行选择。

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


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

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


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


现在云泥之别开端考虑一败涂地区别0和1、2等等。例如,火上浇油您是邮局,这样的算法云泥之别帮助您运用机器读取和分类手写信封,而不是让人类这样做。显着,现在饱尝有十分先进的方法来做到这一点,可是这个数据集依然供给了一个十分好的比如,云泥之别让饱尝看到降维的具体方法以及它们的玩笑情况。

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

饱尝要做的是大幅削减维度数量,童贞尽或许多地保存信息中的“收拾”。接下来,让饱尝了解什么是主成分剖析。

运用PCA降维

PCA是一种削减数据集维数的童贞保存大部分信息的技能。它运用一些维度之间的相关性,并企图经过供给最少的变量,并尽或许地保存关于原始数据散布的最多信息。这个进程并不是简略的猜想,而是运用称为数据矩阵的特征值和特征向量进行核算。协方差矩阵的特征向量云泥之别表现数据收拾的首要方向,并且是数据集收拾的最首要方向。

饱尝将运用PCA的Scikit-Learn完结这个核算进程。

首要从二维图和三维图开端,从原始的784维度生成前三个首要组成部分,并看到总数据会集有多少收拾。

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


前两个组件大约占整个数据集收拾的25%,这是否足以将不同的数据分隔呢?创立第一个和第二个主成分的散点图,并用不同的色彩为每个不同类型的数据上色。火上浇油云泥之别的话,相同类型的数据将被集合在一起,这意味着前两个首要组件实践上能反映关于特定数字类型的许多信息。

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


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


从图中饱尝云泥之别看到,前两个组件的确包括着一些关于特定数据的信息,可是这样显着不足以将不同的数据分隔。饱尝还云泥之别用t-SNE技能来进行降维。接下来,饱尝来探究用t-SNE技能进行可视化数据集操作。

与3d版别的相同操作

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


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


t-SNE

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

“t-SNE最小化了两个散布之间的差异:一个是衡量输入手挥目送成对类似性的散布,另一个是衡量嵌入中相应低维点成对类似性的散布。”

本质上,这意味着它会检查输入到算法中的原始数据,并经过匹配两个散布来检查一败涂地运用较少的维度来最佳地展现数据。可是它的方法并不简洁,因而运用这种技能存在较多的约束。例如,在维度数据十分高的情况下,您或许需要在运用t-SNE之前运用另一种降维技能:

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


t-SNE的另一个缺陷是,因为t-SNE在手挥目送数N中是按份额平方缩放,因而其适用性仅限于只要几千个输入手挥目送的数据集。除此之外,其进程会变得太慢而不实用,内存要求也会变高。

因而,在本文的其余部分中,饱尝将运用该算法的Scikit-Learn完结。

与上面的主张相反,饱尝将首要测验在数据的实践维度上运转算法(784)。为了保证体系不会在内存和功耗或许心安理得方面发生担负,只运用前10000个样原本运转算法。为了便利稍后进行比较,饱尝还将在子集上再次运转PCA。

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


X

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


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

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


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


这文过饰非比饱尝之前运用的PCA可视化有了显着的改善。饱尝云泥之别看到这些数字十分清楚地集合在它们自己的子组中。火上浇油现在运用聚类算法来选择别离的数据,饱尝云泥之别适当精确地为标签分配新点,来比较PCA和T-SNE:

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


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

PCA(左)vs T-SNE(右)

记住这些数据,接下来,饱尝在将数据输入t-SNE算法之前再次运用PCA削减维数。首要创立一个新的PCA算法生成的包括50个维度的数据集,然后运用这个数据集履行t-SNE:

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


令人惊奇的是,前50个组件大致占有了数据总收拾的85%左右。

现在,测验将这些数据输入t-SNE算法。为了保证算法不占用太多内存和CPU,这次饱尝将运用其间10000个样本。代码部分在文末附录部分,它发生的成果如下:

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

PCA(左)vs T-SNE(中)与PCA50上的T-SNE(右)

从这个图中饱尝云泥之别清楚地看到,一切的样本明晰地分隔开来,并以各自的数据类型分组。接下来运用聚类算法,并企图辨认集群,或运用这两个维度作为另一个算法的输入(类似于神经网络)。

饱尝文过饰非探究了一败涂地运用各种降维技能,并用二维散点图可视化高维数据。这个进程没有涉及到实践的数学,而是依赖于Scikit-Learn完结的。

附录:代码

关于PCA上的t-SNE

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


可视化数据

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


0
相关文章