如何使用ggplot绘制T-SNE聚类

nev*_*int 2 r cluster-analysis ggplot2 tidyverse

以下是使用IRIS数据的t-SNE代码:

library(Rtsne)
iris_unique <- unique(iris) # Remove duplicates
iris_matrix <- as.matrix(iris_unique[,1:4])
set.seed(42) # Set a seed if you want reproducible results
tsne_out <- Rtsne(iris_matrix) # Run TSNE


# Show the objects in the 2D tsne representation
plot(tsne_out$Y,col=iris_unique$Species)
Run Code Online (Sandbox Code Playgroud)

这产生了这个情节:

在此输入图像描述

我如何使用GGPLOT来制作这个数字?

Mik*_* H. 9

我认为最简单/最干净的ggplot方法是将所需的所有信息存储在a中data.frame然后绘制它.从上面粘贴的代码中,这应该有效:

library(ggplot2)
tsne_plot <- data.frame(x = tsne_out$Y[,1], y = tsne_out$Y[,2], col = iris_unique$Species)
ggplot(tsne_plot) + geom_point(aes(x=x, y=y, color=col))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我使用常规plot函数的情节是:

plot(tsne_out$Y,col=iris_unique$Species)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • t-SNE是一种随机算法,因此每次运行时,两个轴的值都会不同,以及簇的形状也不同.我试图为一张宽窄比例的海报重现一个情节,所以我发现在运行每个实例之前`set.seed(...)`是有用的,以确保它是可重复的. (3认同)