专栏首页优雅R「Workshop」第四十一期 t-SNE降维原理及其应用

「Workshop」第四十一期 t-SNE降维原理及其应用

概念

降维:就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中。降维的本质是学习一个映射函数 f : x→y,其中x是原始数据点的表达,目前最多使用向量表达形式。y是数据点映射后的低维向量表达,通常y的维度小于x的维度(当然提高维度也是可以的)。f可能是显式的或隐式的、线性的或非线性的。

降维方式

降维方式分类

线性降维

	PCA:PCA是最常用的无监督线性降维方法,它的目标是通过某种线性投影,将高维的数据映射到低维的空间中,并期望在所投影的维度上数据的方差最大,以此使用较少的维度,同时保留较多原数据的维度。

	LDA:线性判别分析LDA是一种有监督的线性降维算法,它的数据集的每个样本是有类别输出的,而PCA是不考虑样本类别输出的无监督降维技术。LDA与PCA不同,它是为了使降维后的数据点尽可能地容易被区分,它的思想用一句话概括,就是**“投影后类内方差最小,类间方差最大”。**

PCA

LDA

非线性降维

线性降维方法,有时候数据之间的非线性关系是很重要的,这时候我们用线性降维会得到很差的结果。对于图像、文本、金融等高维数据,特征之间存在着极为复杂的非线性关系,简单的线性分析无法挖掘出特征之间的蕴含的关联,因此,有必要对内蕴特征进行探讨!

全局

ISOMAP:(Isometric Feature Mapping, 等距离特征映射),是一种非线性降维方法,其基于度量MDS,试图保留数据内在的由测地线距离蕴含的几何结构。其算法步骤为,先构建邻接图,然后计算最短路径,最后通过MSD构建低纬的数据嵌入。

局部

LLE:局部线性嵌入(Locally Linear Embedding,LLE)是非常重要的降维方法。和传统的PCA,LDA等关注样本方差的降维方法相比,LLE关注于降维时保持样本局部的线性特征(保持原有拓扑结构),由于LLE在降维时保持了样本的局部特征,它广泛的用于图像识别,高维数据可视化等领域。

各种降维

各种降维的优缺点

各种降维方式的优缺点

优缺点

t-SNE

t-SNE(t-Distributed 随机邻域嵌入),将数据点之间的相似度转换为概率。原始空间中的相似度由高斯联合概率表示,嵌入空间的相似度由“学生t分布”表示。虽然Isomap,LLE和variants等数据降维和可视化方法,更适合展开单个连续的低维的manifold。但如果要准确的可视化样本间的相似度关系,t-SNE表现更好。因为t-SNE主要是关注数据的局部结构

数学原理

t-SNE公式

同时保留局部结构,除了计算距离外,还将其转换为概率

t-sne公式1

t-SNE前身,SNE

相似性计算

先计算原始空间(高维)的数据的相似性,通过计算每个点和其它点之间的距离,i是资料点,j是除了i以外的其它资料点。计算完之后,将其放入高斯方程,通过高斯分布计算点j为点i邻居的可能性。在低维空间随机计算yi和yj。获得低维空间上i和j是邻居的概率,让在低维空间上j个i两个点的概率和高维空间上两个点的概率越相似越好。

sne公式1

损失函数

使用KL距离来衡量高维空间的分布和低维空间分布的相似程度

tsne损失函数

KL距离

KL距离,是Kullback-Leibler差异(Kullback-Leibler Divergence)的简称,也叫做相对熵(RelativeEntropy)。它衡量的是相同事件空间里的两个概率分布的差异情况。公式为:

KL公式

缺点

SNE降维之后,可能会存在拥挤的问题,导致即使可以从高维降低到低维,但是仍然无法分辨。

降维问题

解决方式

使用t分布

高斯分布的情况下,远点到3/4的概率在数字上可能差的很小,导致无法有效的区分开3/4的差别。转换成t分布之后,可以有效的区分开远距离的点。

t-SNE

高维空间仍然用高斯分布,在低维空间用t分布

t-sne

决定分布情况的参数:σ

σ太大:越拥挤,无法将点有效区分开

σ太小:越离散,不能保留高维数据的局部结构

困惑度

困惑度可以解释为一个点附近的有效近邻点个数。SNE对困惑度的调整通常选择5-50之间,给定之后,使用二分搜索的方式寻找合适的σ

困惑度

损失函数

损失函数

具体过程

以二维空间为例,假设我们现在需要将二维平面上分布的点降到一维直线上,如果我们直接将这些点投放在x轴或者y轴,不同颜色/cluster的点会会混合在一起。

具体过程

第一步

计算二维平面上所有点的相似性(similarity)。

首先计算黑色点和其周围点的距离(此处暂时以两个点为例,黑色和蓝色),然后将这两个点排放在以黑色点为中心的正态曲线下,接下来计算蓝色点到正态曲线的长度(unscaled similarity distance,也成为similarity score)。

进而,我们获得了黑色点同其余所有点的similarity scores。similarity score大,表明两个点在二维平面上的距离近;相对的,表明两个点在二维平面上的距离远。

step2

第二步

获得黑色点同其余所有点的similarity score后,我们需要对这些scores进行标准化,使得它们加和为1。

为什么要进行标准化处理呢?假设平面上有一个新紫色的cluster(我们暂且认为紫色cluster的分布和蓝色cluster完全一样,只是密度(density)是蓝色cluster的两倍,那么紫色cluster正态曲线的宽度也会是蓝色cluster的两倍(正态曲线的高度和宽度由方差决定)),

进行标准化处理后,这两个cluster的similarity score就是一样的了(t-SNE可以同时保留数据的局部和全局结构)。

接下来我们会获得每一个点同其余所有点的scaled similarity scores,scaled similarity scores代表cluster的相对紧密度。

step3

第三步

由于每一个点所对应正态曲线的宽度是由其周围点分布的紧密度来决定的。那么两个点之间,前后两次计算的similarity scores可能会不同。所以t-SNE会将这两个点的similarity score求均值。最终,我们可以获得一个矩阵,每一行/列表示这个点同其他点的similarity score。

step4

第四步

计算一维直线上所有点的similarity scores。

同之前计算二维平面上点的计算过程一般,选择一个指定的点,然后计算其同周围点的距离,进而获得similarity scores。只是这次使用的曲线从正态分布变为t分布。此时获得的矩阵比上面那个矩阵显得混乱一些。t-SNE每次移动一下直线上的点,移动的目的是为了让上图左边的矩阵变得像右边一样。

step5

t-SNE优缺点

优点
  • 对于不相似的点,用一个较小的距离会产生较大的梯度来让这些点排斥开来。
  • 这种排斥又不会无限大(梯度中分母),避免不相似的点距离太远。 缺点
  • 主要用于可视化,很难用于其他目的。
  • t-SNE倾向于保存局部特征,对于本征维数(intrinsic dimensionality)本身就很高的数据集,是不可能完整的映射到2-3维的空间
  • 全局结构未明确保留。这个问题可以通过PCA初始化点(使用init ='pca')来缓解。
  • 计算量大,耗时间是PCA的百倍,内存占用大。

应用

1、识别肿瘤亚群(医学成像)

质谱成像(MSI)是一种同时提供组织中数百个生物分子的空间分布的技术。t-SNE,通过数据的非线性可视化,能够更好地解析生物分子肿瘤内异质性。

2、 人脸识别

人脸识别技术已经取得巨大进展,很多诸如PCA之类的算法也已经在该领域被研究过。但是由于降维和分类的困难,人脸识别依然具有挑战性。t-SNE被用于高维度数据降维,然后用其它算法,例如 AdaBoostM2, 随机森林, 逻辑回归, 神经网络等多级分类器做表情分类。

R语言实现

Rtsne包

主要参数

参数

功能

dims

参数设置降维之后的维度,默认是2

perplexity

困惑度,参数须取值小于(nrow(data)-1)/3

theta

参数越大,结果的准确度越低,默认是0.5

max_iter

最大迭代次数

pca

表示是否对输入的原始数据进行PCA分析,然后用分析后的数据进行后续分析

1、用t-SNE对iris数据进行降维

remove(list = ls())
BiocManager::install("Rtsne")
library(Rtsne)
iris_unique <- unique(iris) #去重复
tsne_out <- Rtsne(as.matrix(iris_unique[,1:4])) #运行t-SNE
plot(tsne_out$Y,col=iris$Species,asp=1)

test1

2、使用MNIST数据集进行t-SNE测试

train<- read.csv("train.csv")  
library(Rtsne)
Labels<-train$label
train$label<-as.factor(train$label)

colors = rainbow(length(unique(train$label)))
names(colors) = unique(train$label)

tsne <- Rtsne(train[,-1], dims = 2, perplexity=30, max_iter = 500)

## 绘图
plot(tsne$Y, t='n', main="tsne")
text(tsne$Y, labels=train$label, col=colors[train$label])

test2

参考资料(转自)

1、https://www.youtube.com/watch?v=5d26dO5LVe0(主要参考)

2、https://yuehhua.github.io/slides/(主要参考)

3、https://www.jianshu.com/p/700f017cd330?from=singlemessage(主要参考)

4、https://www.analyticsvidhya.com/blog/2017/01/t-sne-implementation-r-python/

5、https://www.jianshu.com/p/75e805ff247c

6、https://blog.csdn.net/qq_44702847/article/details/95190388

7、https://blog.csdn.net/weixin_34279246/article/details/90102855

8、https://distill.pub/2016/misread-tsne/

9、https://blog.csdn.net/qq_16236875/article/details/89157360

10、http://www.datakit.cn/blog/2017/02/05/t_sne_full.html#25-%E4%B8%8D%E8%B

本文分享自微信公众号 - 优雅R(elegant-r),作者:吴宸旭

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-04-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用t-SNE做降维可视化

    简而言之,降维是在2维或3维中展现更高维数据(具有多个特征的数据,且彼此具有相关性)的技术。

    程序员一一涤生
  • 使用t-SNE做降维可视化

    简而言之,降维是在2维或3维中展现更高维数据(具有多个特征的数据,且彼此具有相关性)的技术。

    程序员一一涤生
  • 深度 | 详解可视化利器t-SNE算法:数无形时少直觉

    机器之心
  • 通俗理解一个常用的降维算法(t-SNE)

    最易被我们视觉观察到的维数是一维,二维和三维,四维及以上用图形表达都不会那么直观。

    小草AI
  • 通俗理解一个常用的降维算法

    最易被我们视觉观察到的维数是一维,二维和三维,四维及以上用图形表达都不会那么直观。

    石晓文
  • 通俗理解一个常用的降维算法

    最易被我们视觉观察到的维数是一维,二维和三维,四维及以上用图形表达都不会那么直观。

    double
  • 单细胞转录组数据分析——降维

    下图是一些降维算法的简介,主要分为三类:基于矩阵分解(Matrix Factorization)降维算法、基于作图的降维算法、基于神经网络的机器学习降维算法。

    生信交流平台
  • R语言从入门到精通:Day14(PCA & tSNE)

    主成分分析(Principle component analysis, PCA)前面我们已经用两期教程跟大家讲过理论和实际绘图(在线主成分分析Clustvis和...

    用户6317549
  • t-SNE:可视化效果最好的降维算法

    1D,2D和3D数据可以可视化。但是在数据科学领域并不总是能够处理一个小于或等于3维的数据集,我们肯定会遇到使用高维数据的情况。对于数据科学专业人员来说,有必要...

    deephub
  • 还在用PCA降维?快学学大牛最爱的t-SNE算法吧(附Python/R代码)

    假设你有一个包含数百个特征(变量)的数据集,却对数据所属的领域几乎没有什么了解。 你需要去识别数据中的隐藏模式,探索和分析数据集。不仅如此,你还必须找出数据中是...

    生信宝典
  • 陈陟原:数据降维与可视化| AI 研习社第 53 期猿桌会

    相信大多数人都已经接触过数据可视化——Excel 随便画一张表就是了。众所周知,二维数据可视化很容易,条形图、饼状图等等,我们在初中就已经学过了。那么三维数据呢...

    AI科技评论
  • 陈陟原:数据降维与可视化 | AI 研习社第 53 期猿桌会

    相信大多数人都已经接触过数据可视化——Excel 随便画一张表就是了。众所周知,二维数据可视化很容易,条形图、饼状图等等,我们在初中就已经学过了。那么三维数据呢...

    AI研习社
  • 拓扑数据分析在机器学习中的应用

    用户1737318
  • 数据降维算法-从PCA到LargeVis

    五期飞跃计划还剩6个名额,联系小编,获取你的专属算法工程师学习计划(联系小编SIGAI_NO2)

    SIGAI学习与实践平台
  • 一图胜千言!这10种可视化技术你必须知道

    相比于浩如烟海的数据表格,大部分人还是更喜欢视觉资料,这一点已不足为奇。也是出于这个原因,人们通常才会在学术论文的前几页加上一张图表,并且清楚地标记上各种注释。

    CDA数据分析师
  • BMC Bioinformatics | DrImpute:在单细胞RNA测序数据中插补“dropout”事件

    今天给大家介绍明尼苏达大学的Daniel J. Garry教授等人发表在BMC Bioinformatics上的一篇文章 “DrImpute: imputing...

    智能生信
  • 单细胞测序结合生信分析发优质的5分+文章

    今天和大家分享的是2020年7月发表在International journal of cancer(IF:5.145)上的一篇文章,作者通过单细胞测序技术和聚...

    百味科研芝士
  • scPhere——用地球仪来展示降维结果

    测试数据集:301,749 cells we previously profiled in a complex experimental design from...

    生信技能树jimmy
  • 一文详解计算机视觉的广泛应用:网络压缩、视觉问答、可视化、风格迁移等

    用户1737318

扫码关注云+社区

领取腾讯云代金券