t-SNE 全称 T 分布随机近邻嵌入(T-Distribution Stochastic Neighbour Embedding)是一种用于降维的机器学习方法,它能帮我们识别相关联的模式。t-SNE 主要的优势就是保持局部结构的能力。这意味着高维数据空间中距离相近的点投影到低维中仍然相近。
t-SNE 同样能生成漂亮的可视化。下面介绍使用R语言实现t-SNE的过程。
本文介绍使用R包:Rtsne
Rtsne是一个专门进行t-SNE降维分析的R包,安装方式如下:
install.packages("Rtsne") # Install Rtsne package from CRAN
或者从github直接安装使用
if(!require(devtools)) install.packages("devtools") # If not already installed
devtools::install_github("jkrijthe/Rtsne")
安装好Rtsne后我们可以用iris的公共数据集来测试下t-SNE
step1.首先我们查看下iris数据集的格式:
step2.使用Rtsne包进行降维
library(Rtsne)
iris_unique <- unique(iris) # Remove duplicates
set.seed(42) # Sets seed for reproducibility
tsne_out <- Rtsne(as.matrix(iris_unique[,1:4])) # Run TSNE
step3.绘图
plot(tsne_out$Y,col=iris_unique$Species,asp=1) # Plot the result
写在后面的话
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, ...)
dims参数设置降维之后的维度,默认值为2;
perplexity参数的取值必须小于(nrow(data) – 1 )/ 3;
theta参数取值越大,结果的准确度越低,默认值为0.5;
max_iter参数设置最大迭代次数;
pca参数表示是否对输入的原始数据进行PCA分析,然后使用PCA得到的topN主成分进行后续分析,t-SNE算法的计算量是特别大的,对于维度较高的数据数据,先采用PCA降维可以有效提高运行的效率,默认采用top50的主成分进行后续分析,当然也可以通过initial_dims参数修改这个值。
最后分享一个来自网络的t-SNE降维的动图,加深大家的理解。
下载区:
参考资料:
1. 论文http://www.jmlr.org/papers/volume9/vandermaaten08a/vandermaaten08a.pdf
2.https://cran.r-project.org/web/packages/Rtsne/Rtsne.pdf
3.https://cran.r-project.org/web/packages/Rtsne/index.htm
4.https://blog.csdn.net/scott198510/article/details/76099700
5. L.J.P. van der Maaten and G.E. Hinton. Visualizing High-Dimensional Data Using t-SNE. Journal of Machine Learning Research 9(Nov):2579-2605, 2008.
6. L.J.P. van der Maaten. Barnes-Hut-SNE. In Proceedings of the International Conference on Learning Representations, 2013.