Py学习  »  Python

Python实例 | 最好用的降维算法t-SNE

CDA数据分析师 • 1 年前 • 144 次点击  

 



 CDA数据分析师 出品  

作者:  郗晓琴  熊泽伟

编译: Mika


今天这篇文章是介绍目前前沿好用的一种降维可视化算法:t-SNE,并且附带python的实际例子加以讲解。

  • t-SNE是什么技术


我们直接开门见山好了,第一件事:什么是t-SNE?t-SNE的全称叫做t分布式随机邻居嵌入(t-SNE)。该算法是一种非监督的非线性技术,主要用于数据探索和可视化高维数据。

简而言之,t-SNE为我们提供了数据如何在高维空间中排列的感觉或直觉。它由Laurens van der Maatens和Geoffrey Hinton于2008年开发。

一提到降维,我们会想到大名鼎鼎的PCA,PCA是线性降维的技术,那么较之于我们今天要介绍的t-SNE,它们有什么不同或者联系吗。

如果您熟悉主成分分析(PCA),那么像我一样,你可能想知道PCA和t-SNE之间的区别。

首先要注意的是,PCA是在1933年开发的,而t-SNE是在2008年开发的。自1933年以来,数据科学领域发生了很大变化,主要是在计算和数据大小领域。其次,PCA是一种线性降维技术,旨在最大化方差并保持较大的成对距离。PCA可能导致可视化效果不佳,特别是在处理非线性结构时。这里非线性结构可以视为任何几何形状,如:圆柱体、球、曲线等。

t-SNE与PCA的不同之处在于只保留小的成对距离或局部相似性,

而PCA则关注的是保持大成对距离以最大化方差。

图1-“瑞士卷“数据集,保持与t-SNE(实线)的小距离vs最大化方差PCA

Laurens很好地利用上图中的“瑞士卷”数据集很好地说明了PCA和t-SNE方法(实线为t-SNE,虚线为PCA)。你可以看到,由于这个“瑞士卷”数据集(流形)的非线性并保持了大距离,PCA会错误地保留数据的结构。

 

  • t-SNE算法原理:


现在我们知道为什么有时候我们不用pca而用t-SNE,让我们来看看t-SNE是如何工作的,其背后有怎样的算法原理。其实,概括来说:t-SNE算法计算高维空间和低维空间中一对实例之间的相似性度量。然后,该算法用代价函数来优化这两个相似度指标。这个算法将其分为3个基本步骤。

步骤 1:

测量高维空间中点之间的相似性。

图2-围绕数据点的高斯分布在高维空间中测量成对的相似度

步骤 2:

第2步类似于第1步,不用高斯分布而是使用具有一定自由度的学生t分布。


  • t-SNE用在哪儿


现在我们已经了解了t-SNE的工作原理,让我们快速谈谈它在哪里使用。Laurens van der Maaten在他的视频演示中展示了许多例子,他提到了t-SNE在气候研究、计算机安全、生物信息学、癌症研究等领域的使用。也就是说t-SNE可用于高维数据(主要用于可视化),然后这些维度的输出成为其他分类模型的输入。然而,t-SNE不是聚类方法,因为它不保留PCA等输入,并且值可能经常在运行之间发生变化,因此纯粹是为了探索、可视化等工作。

代码示例:

本次案例的目标是通过蘑菇的特征(比如形状、气味等)来区分其是否可以食用,同时会在二维空间上呈现基于PCA和t-SNE的不同的降维分类效果,以此来认识二者的不同。

第1步-导入所需的库,读取并查看数据集

第2步-区分解释变量与被解释变量,查看数据的基本信息

3-查看解释变量的取值情况,进行数据编码

4-PCA降维与可视化

5-t-SNE降维与可视化

从可视化的结果可以看出,基于PCA降维的结果会产生重叠,这是因为主成分降维无法维护数据的局部结构而导致的,而基于t-SNE降维的结果分类更加清晰,基本没有类别之间的重叠,这就是t-SNE算法在降维过程中很好的保留了数据局部特征而产生的结果,所以,t-SNE算法可以很好的用来进行数据降维和可视化展示。


 


点这里👇关注我,记得标星哦~


推荐阅读


 

CDA课程咨询

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/148472
 
144 次点击