荔枝对身体有什么好处| 德行是什么意思| 血脂高吃什么水果最好| 飞亚达手表什么档次| 过年为什么要吃饺子| 姑姑的弟弟叫什么| 感冒是挂什么科| 丢包是什么意思| 被艹是什么感觉| 白带发黄是什么妇科病| 尿酸高是什么原因造成的| 酸奶坏了是什么味道| 紫癜是什么引起的| 大脑供血不足是什么原因引起的| zorro是什么牌子的打火机| 36是什么生肖| 3885是什么罩杯| 萎缩性胃炎是什么意思| 结婚9年是什么婚| 核医学科是检查什么的| 小孩趴着睡觉是什么原因| 吃什么睡眠好的最快最有效| 满月红鸡蛋用什么染| 什么入什么出| 输血四项检查是什么| 慢性萎缩性胃炎伴糜烂吃什么药| En什么意思| 大姨妈是黑色是什么原因| 金银花不能和什么一起吃| pa是什么材质| 五十年婚姻是什么婚| 妊娠期是指什么时候| 柠檬酸是什么东西| 尿素氮肌酐比值偏高是什么原因| 唾液酸苷酶阳性是什么意思| 发烧可以吃什么水果| 钟馗是什么意思| 有口臭去医院挂什么科| 挪揄是什么意思| 酸梅汤不适合什么人喝| 打饱嗝是什么病的前兆| 四肢麻木是什么原因引起的| 舌头有点麻是什么病的前兆| 紫苏泡酒有什么功效| 大麦是什么粮食| 用什么点豆腐最健康| 肠胃炎需要做什么检查| 晚上八点是什么时辰| 食道炎吃什么药好| 新疆人为什么不吃猪肉| 子宫脱垂吃什么药怎么恢复正常| 头疼挂什么科室| 过敏性咳嗽有什么症状| 马夫是什么意思| 备孕男性检查什么项目| 雌激素过高吃什么药| 长期喝苦荞茶有什么好处| ed2k用什么下载| 眼睛不能见光是什么病| 碧根果和核桃有什么区别| 静脉曲张溃烂擦什么药| 吃什么食物能提高免疫力| 日照香炉生紫烟是什么意思| 用白醋泡脚有什么好处| 老说梦话是什么原因| 便秘挂什么科| 早上六点半是什么时辰| 既济是什么意思| 伊始是什么意思| 识大体是什么意思| 琪五行属性是什么| 无纺布是什么材料做的| 无伤大雅是什么意思| 梅核气是什么症状| 气虚的人适合什么运动| 银耳为什么助湿气| 5.5号是什么星座| 反复呕吐是什么病症| 湿气是什么东西| 边缘性行为包括什么| 绝望的绝是什么意思| 双绿生肖是什么生肖| 12月20号是什么星座| 什么食物对心脏好| 牵强是什么意思| 木瓜是什么季节的水果| 血常规白细胞偏高是什么原因| 黄精和什么搭配补肾效果最好| 肝实质回声密集是什么意思| 什么食物含磷高| 洋酒是什么酒| 5月15日是什么星座| 熊猫是什么科| 6月18日是什么节日| 吃什么可以让奶水增多| 新生儿脸上有小红点带白头是什么| 手心发红是什么原因| 为什么叫香港脚| 移植后需要注意什么| 日语亚麻跌是什么意思| 痔疮是什么原因引起| 甲亢不能吃什么东西| 省委组织部长是什么级别| 杀阴虱用什么药最好| 命运是什么意思| 此言念什么| 梦见黄狗是什么意思| 耐药性是什么意思| 表面积是什么| 心情沉重是什么意思| 属鸡的和什么属相最配| 静脉曲张 看什么科| 说话鼻音重是什么原因| 宫腔内钙化灶是什么意思| 心态是什么意思| 减肥最快的方法是什么| 睡觉背疼是什么原因| 处女座是什么星象| 为什么生理期过后最容易掉秤| 下巴两边长痘痘是什么原因| 手指关节痛什么原因| 肠梗阻是什么症状| 鼻子老是出血是什么原因| 自然生化流产是什么意思| 寿终正寝是什么意思| 煤油是什么油| 人参适合什么人吃| 梦见自己怀孕是什么意思| 小叶增生和乳腺增生有什么区别| 手臂上长痣代表什么| 牙疼可以吃什么| 大理寺是什么机构| 阳痿是什么原因引起的| 薤白是什么东西| 芥蒂什么意思| 苯佐卡因是什么药| 争辩的近义词是什么| 最近流行什么病毒| 黄腔是什么意思| 破伤风感染后会出现什么症状| 肾的主要功能是什么| 昊字五行属什么| 耳朵疼是什么原因| 中性粒细胞低说明什么| 为什么会有癌症| 尿白蛋白高是什么原因| 肉苁蓉有什么功能| 拍肺片挂什么科| edg是什么| 凉虾是什么做的| 败火是什么意思| 千古一帝指什么生肖| 降肌酐吃什么药| 人质是什么意思| 流量mb是什么意思| 情商是什么意思| 12月10日是什么星座| 孕妇晚餐吃什么比较好| 头脑简单是什么生肖| 肾虚是什么原因引起的| 偏光镜什么意思| 红红的苹果像什么句子| 三教九流指的是什么| 三七粉主治什么| 甲状腺和甲亢有什么区别| 胃酸反流是什么原因| 清真什么意思| 脖子上长疣是什么原因| lh是什么意思| 南京市徽为什么是貔貅| 孕妇贫血吃什么补血最快| 卫生纸属于什么垃圾| 陈醋与香醋有什么区别| 大象的鼻子像什么| 吃什么补营养最快| 927什么星座| 肾气亏虚吃什么中成药| 有什么症状是肯定没怀孕| 俄罗斯是什么国家| 眼睛感染用什么眼药水| 头晕用什么药| 太阳什么的什么的| 女人腰酸背痛是什么病| 田宅宫代表什么| 圆周率是什么| 中午一点是什么时辰| 克罗心是什么意思| 荨麻疹要注意些什么| 一箭双雕是什么生肖| 莫名是什么意思| 什么东西好消化| 肚子一直咕咕叫是什么原因| 梦见白事场面什么意思| 养血清脑颗粒治什么病| 孕妇脚抽筋是什么原因| 欠佳是什么意思| 为什么会得脚气| 9月21号是什么日子| 维生素b补什么| 1928年属什么生肖| 肺纹理增多什么意思| 因公殉职是什么意思| 台湾什么时候收复| 妊娠反应什么时候开始| 属龙的本命佛是什么佛| 肚子疼吃什么食物好| 足交什么感觉| 热水器什么牌子好| 股票融是什么意思| 旁风草长什么样| 补钙过量有什么害处| 耄耋读什么| b超挂什么科| 女人缺少雌激素吃什么| 为什么会有霉菌性阴道炎| 宰相肚里能撑船是什么意思| 闭经是什么意思| 风热感冒咳嗽吃什么药| 伯恩光学是做什么的| 无利不起早是什么意思| 出道是什么意思| 经略相公是什么官| 别有什么什么| bruce是什么意思| 荷叶有什么功效| 软卧代软座什么意思| 看得什么| 北京晚上有什么好玩的景点| 什么牙什么牙| 社恐的人适合什么工作| 干火重吃什么药管用| 吃什么菜| 鲍温病是什么病| 口坐念什么| 神经系统是由什么组成的| 梦见发洪水是什么征兆| 小孩白头发是什么原因引起的| 阳性体征是什么意思| 什么是瘦马| 金屋藏娇是什么意思| 手淫对身体有什么伤害| 味极鲜是什么| 血常规查的是什么项目| 白事随礼钱有什么讲究| 孤辰是什么意思| 肝内多发低密度影是什么意思| 九月二十号是什么星座| 微波炉不能用什么容器| 梦见参加葬礼是什么意思| 孕妇缺维生素D对胎儿有什么影响| 肝左叶囊性灶什么意思| 什么叫克隆| 迷茫什么意思| zoe是什么意思| 农历九月五行属什么| 荆棘是什么意思| 糖类抗原50是什么指标| 体寒的人吃什么食物好| 祛风是什么意思| 支原体感染有什么症状| 夜盲症缺什么维生素| 老人头发由白变黑是什么原因| 精神焦虑症有什么表现有哪些| 缺钾吃什么补得最快| 百度
技术开发 频道

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

【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
相关文章