美文网首页
R语言——使用t-SNE算法在R中实现数据降维与可视化

R语言——使用t-SNE算法在R中实现数据降维与可视化

作者: 生信大碗 | 来源:发表于2023-01-23 12:18 被阅读0次

本文首发于“生信大碗”公众号,转载请注明出处

上期推文我们介绍了一种线性数据降维的方法——主成分分析PCA,今天我们再来介绍一种非线性的算法——t-SNE。

t-SNE(t-distributed Stochastic Neighbor Embedding),中文全称t分布-随机邻近嵌入,其原理比较复杂,这里不多做讲解,感兴趣的小伙伴可以自行百度。

数据降维方法有很多,t-SNE算法的优势在哪里呢?t-SNE算法有效地解决了降维后的拥挤问题,也就是说,经t-SNE算法降维后,相似的数据相互靠近,而差异较大的数据则互相远离。但有利就有弊,t-SNE算法的缺点是运行所占内存大,所需时间长。具体选择哪种方法小伙伴们可以自行权衡。

话不多说,接下来我们开始实操。

1.安装并加载Rtsne包

2.加载示例数据

下载TCGA肺腺癌数据集并对正常组和肿瘤组进行差异分析,选取差异最显著的前十个基因的表达数据作为示例数据,注意行是样本,列是基因

3.获取样本的分组信息

4. 进行t-SNE降维

① t-SNE结果随机,进行分析之前需设置随机数种子是结果具有可重复性

② Rtsne()函数各参数的意义如下:

dims = 2, 正整数,表示降维后的数据纬度——将数据降到几维?

pca = TRUE/FALSE,表示在进行t-SNE前是否进行主成分分析PCA。

max_iter = 1000,表示迭代次数,默认为1000。

theta = 0.5,是速度/精度权衡,范围在0~1之间,数值越小越精确,默认0.5。该参数影响最终结果,可根据可视化结果进行调整。

perplexity = 20,困惑度:正整数,且需满足 3*perplexity < nrow(data) - 1 ,可以简单理解为每个数据点的近邻数据点的可能数目,是用于计算数据点相似度的参数,是数据局部/全局权衡,影响可视化结果,参数越小,样本越独立,参数越大,样本越趋向于形成一个整体。

check_duplicates = FALSE,检查是否存在重复项。最好确保在进行t-SNE之前数据不存在重复项,并将此选项设置为FALSE。

③ 输出结果是一个列表,其中元素Y就是降维结果。可以看到原来10个基因的表达数据(10维数据),已经降为二维数据。

5. 降维结果可视化

t-SNE算法数据降维与可视化完整代码如下:

# 安装并加载Rtsne包

install.packages("Rtsne")

library(Rtsne)

# 加载示例数据

load("前十个差异基因表达矩阵.rdata")

data[1:6,1:6]

# 样本分组

sample <- data.frame(id=rownames(data))

 # TCGA样本命名方式,倒数二三位数字是11的为正常组,01的为肿瘤组

sample$group <- ifelse(substr(sample$id,14,15)==11,"normal","tumor")

sample[1:6,]

group <- sample$group

group[1:6]

# t-SNE降维

 #设置随机数种子

set.seed(1)

 #进行t-SNE

tsne_out = Rtsne(

 data,             

  dims =2,         

  pca =TRUE,       

 max_iter = 1000,  

  theta =0.4,      

 perplexity = 20,  

 check_duplicates = FALSE,

  verbose= F)

str(tsne_out)

# 降维结果可视化

library(ggplot2)

tsne_result = as.data.frame(tsne_out$Y)

colnames(tsne_result) =c("tSNE1","tSNE2")

ggplot(tsne_result,aes(tSNE1,tSNE2,color=group))+

 geom_point()

本文首发于“生信大碗”公众号,转载请注明出处

—END—

相关文章

网友评论

      本文标题:R语言——使用t-SNE算法在R中实现数据降维与可视化

      本文链接:https://www.haomeiwen.com/subject/kxpbcdtx.html