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一种高效的降维算法
网友评论