使用R进行尺寸缩减的t-SNE vs PCA有什么问题?


27

我有一个336x256浮点数的矩阵(336个细菌基因组(列)x 256个标准化四核苷酸频率(行),例如,每列总计1)。

使用主成分分析运行分析时,我得到很好的结果。首先,我根据数据计算kmeans聚类,然后运行PCA并基于2D和3D中的初始kmeans聚类为数据点着色:

library(tsne)
library(rgl)
library(FactoMineR)
library(vegan)
# read input data
mydata <-t(read.csv("freq.out", header = T, stringsAsFactors = F, sep = "\t", row.names = 1))
# Kmeans Cluster with 5 centers and iterations =10000
km <- kmeans(mydata,5,10000)
# run principle component analysis
pc<-prcomp(mydata)
# plot dots
plot(pc$x[,1], pc$x[,2],col=km$cluster,pch=16)
# plot spiderweb and connect outliners with dotted line
pc<-cbind(pc$x[,1], pc$x[,2])
ordispider(pc, factor(km$cluster), label = TRUE)
ordihull(pc, factor(km$cluster), lty = "dotted")

在此处输入图片说明

# plot the third dimension
pc3d<-cbind(pc$x[,1], pc$x[,2], pc$x[,3])
plot3d(pc3d, col = km$cluster,type="s",size=1,scale=0.2)

在此处输入图片说明

但是,当我尝试用t-SNE方法交换PCA时,结果看起来非常出乎意料:

tsne_data <- tsne(mydata, k=3, max_iter=500, epoch=500)
plot(tsne_data[,1], tsne_data[,2], col=km$cluster, pch=16)
ordispider(tsne_data, factor(km$cluster), label = TRUE)
ordihull(tsne_data, factor(km$cluster), lty = "dotted")

在此处输入图片说明

plot3d(tsne_data, main="T-SNE", col = km$cluster,type="s",size=1,scale=0.2)

在此处输入图片说明

我的问题是,为什么kmeans聚类与t-SNE的计算结果如此不同。我本来希望群集之间的间隔比PCA更好,但是对我来说几乎是随机的。你知道为什么吗 我是否缺少缩放步骤或某种规格化?


4
请注意,同样使用PCA,您通常也不会获得碰巧获得的“好”结果。在许多功能上进行聚类,然后将聚类投影到仅有的几台第一台PC的子空间中,很可能会显示出如您在此处为t-SNE获得的图像,除非这些PCS几乎捕获了所有可变性。您是否进行了比较-您的前3台PC和前3个t-SNE尺寸捕获了可变性的哪一部分?
ttnphns

2
更简单地说,您是否尝试过更多迭代?
jubo 2014年

2
我玩过高达2000的迭代,也玩过各种困惑设置,但从未见过与PCA所展示的性能相近的东西。
罗迪2014年

1
您是否尝试过调整困惑?

1
tSNE具有理论上的最佳困惑,可以最大程度地减少原始尺寸和预计尺寸之间的KL差异。您是否尝试过首先进行网格搜索以解决困惑?例如10、20、30、40等
亚历克斯·

Answers:


10

TSNE使用它之前,您必须先了解它的作用。

它首先基于距离在特征向量之间建立邻域

该图将一个节点(特征向量)连接到其n最近的节点(就特征空间中的距离而言)。这n称为perplexity参数。

建立此图的目的根源在于TSNE用来建立特征向量的新表示形式的抽样方式。

使用random walkTSNE功能图上的生成用于TSNE模型构建的序列。

根据我的经验,我遇到的一些问题来自有关要素表示如何影响此图构建的推理。我还会使用该perplexity参数,因为它会影响采样的重点。


9

很难比较这些方法。

PCA没有参数。有了数据,您只需要查看主要组成部分即可。

另一方面,t-SNE依赖严格的参数:困惑度,早期夸张,学习率,迭代次数-尽管默认值通常可以提供良好的结果。

因此,您不能仅将它们进行比较,而必须将PCA与t-SNE可以达到的最佳结果进行比较(或几次t-SNE所获得的最佳结果)。否则,就等于问“为什么我的线性模型比我的(未调整的)梯度增强模型有更好的表现?”。


3

我在数据集上运行t-sne来替换PCA,并且(尽管Rum Wei注意到了该错误)获得了更好的结果。在我的应用案例中,粗糙的pca效果很好,而粗糙的t-sne给了我随机的结果。这是由于pca中包含缩放/居中步骤(大多数软件包默认情况下),但t-sne中未使用。
我的要点是区域,如果不事先缩放,它们之间的距离几乎没有意义,这使我从“随意看”变为“有意义”。

正如RUser4512所说,您可能还想测试您的参数。作者在他的网站上建议困惑度在5到50之间(您似乎很小),他还警告说,困惑度太大会给您几乎均匀的积分范围(这是很容易知道的)。

Distill有一篇非常不错的文章,其中包含一些交互式可视化,确实有助于理解参数的影响。


0

使用tSNE的PCA和SVD等方法之间的重要区别在于tSNE使用的是非线性标度。这通常会使图在视觉上更加平衡,但要以与PCA相同的方式仔细解释它们。这种差异可能解释了上面显示的图之间的差异。

有关解释tSNE非线性尺度的更多详细信息,请参见以下文章:https://distill.pub/2016/misread-tsne/ (Wattenberg等人,“如何有效使用t-SNE”,Distill, 2016. http://doi.org/10.23915/distill.00002

由于tSNE数据在PCA数据中的区别不大,因此tSNE数据会混淆“簇”也就不足为奇了。例如,聚类2和4中的某些点比聚类之间的距离更远离聚类质心。使用不同的k参数,您将获得截然不同的聚类结果。除非您有使用5个聚类的特定生物学原理,否则我建议您使用基于图的或无监督的层次聚类方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.