【R>>tSNE】tSNE高效降维

作者: 高大石头 | 来源:发表于2021-05-22 21:50 被阅读0次

t-SNE:T-Distribution Stochastic Neighbour Embedding, T分布随机近邻嵌入。与PCA一样是常用的降维方法,其主要优势在于能保持局部结构的能力,即高维数据空间中距离相近的点投影到低维空间中仍然相近。
R语言中实现的包:Rtsne

# install.packages("Rtsne") #安装R包

来学习下核心函数Rtsne()的主要参数:

Rtsne(X, dims = 2, initial_dims = 50,
  perplexity = 30, theta = 0.5, check_duplicates = TRUE,
  pca = TRUE, partial_pca = FALSE, max_iter = 1000,
  verbose = getOption("verbose", FALSE), is_distance = FALSE,
  Y_init = NULL, pca_center = TRUE, pca_scale = FALSE,
  normalize = TRUE, stop_lying_iter = ifelse(is.null(Y_init), 250L,
  0L), mom_switch_iter = ifelse(is.null(Y_init), 250L, 0L),
  momentum = 0.5, final_momentum = 0.8, eta = 200,
  exaggeration_factor = 12, num_threads = 1, ...)
  • X:待降维的数据


  • dims = 2:降维后的维度,默认为2
  • perplexity:困惑度,具体没整明白干啥的, 大小必须小于(nrow(data)-1)/3
  • theta: 默认为0.5,取值越大,准确度越低。
  • max_iter:最大迭代次数
  • pca:表示是否对数据原始数据进行PCA分析,然后使用PCA得到的top50主成分分析进行后续计算。因为t-SNE的计算量是非常大的。

下面以常规模型构建过程中产生的risk和riskScore数据为例:

rm(list = ls())
library(Rtsne)
rt <- data.table::fread("riskTrain.txt",data.table = F) %>% 
  column_to_rownames("id") 
data <- rt[,(3:(ncol(rt)-2))]
tsneOut <- Rtsne(data,dims=2,
                 PCA=F,
                 perplexity=10,
                 verbose=F,
                 max_iter=500,
                 check_duplicates=F)
tsne <- data.frame(tSNE1=tsneOut$Y[,1],
                   tSNE2=tsneOut$Y[,2],
                   risk=factor(rt$risk,levels = c("low","high")))

下面结合ggplot2进行绘图:

library(ggsci)
ggplot(tsne,aes(tSNE1,tSNE2))+
  geom_point(aes(color=risk))+
  scale_color_lancet()+
  theme_bw()+
  theme(plot.margin = unit(rep(1.5,4),"lines"),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        legend.position = c(0.9,0.1), # legend的位置信息
        legend.background = element_rect(fill = "grey90", size = 1, colour = "white"))

另一种降维方法:PCA,已在之前的笔记中写过。【R>>PCA】主成分分析

参考链接:
t-SNE一种高效的降维算法

相关文章

网友评论

    本文标题:【R>>tSNE】tSNE高效降维

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