Bootstrap

【R语言+Python】实现T-分布随机邻域嵌入分析可视化

【R语言+Python】实现T-分布随机邻域嵌入分析可视化

注:本文仅作为自己的学习记录以备以后复习查阅

先给各位私信和评论我的朋友们道个歉!这半年都在准备考博和硕士毕业论文,实在是忙得不可开交,如果有任何问题的可以加我qq(1325225121),我看到了都会回复.
在这里插入图片描述

一 概述

T-分布随机邻域嵌入(t-Distributed Stochastic Neighbor Embedding)也叫做t-SNE,它是一种用于数据降维的机器学习算法,适用于非线性的数据降维,可以通过散点图对其进行可视化,和它很相似的另一种降低数据集维度的分析方法是主成分分析(PCA)。

关于t-SNE的可视化呈现效果大家可以去这个在线的网站查看(数据的加载可能会花费一些时间):
https://nicola17.github.io/tfjs-tsne-demo/

在这里插入图片描述

二 Python实现

首先导入相关的包

import matplotlib.pyplot as plt
from sklearn.datasets import fetch_openml
from sklearn.manifold import TSNE

接着加载我们最最最常用的MNIST数据集并对它进行一个预处理

mnist = fetch_openml('mnist_784')
X = mnist.data / 255.0
y = mnist.target.astype(int)

接下来就可以使用t-SNE对数据集进行降维了;这里n_jobs的值为-1表示我们将使用所有的CPU核心,此时请保证没有其他程序在占用核心(运行的时间根据电脑的CPU情况而定,一般2-5min,此时CPU的占用率会跑的很高)

如果此时有警告版本问题可以忽略,不影响程序的正常运行。

tsne = TSNE(n_components=2, n_jobs=-1)
X_tsne = tsne.fit_transform(X)

最后将我们的运行结果进行可视化

plt.figure(figsize=(10, 8))
for i in range(10):
    plt.scatter(X_tsne[y == i, 0], X_tsne[y == i, 1], s=1, label=str(i))
plt.title('t-SNE Visualization of MNIST Dataset')
plt.xlabel('t-SNE Component 1')
plt.ylabel('t-SNE Component 2')
plt.legend(title='Digit')
plt.grid(True)
plt.show()

结果如图所示:
在这里插入图片描述

三 R语言实现

在R语言中,我们将使用到Rtsneggplot2这两个包,分别进行的是t-SNE分析和可视化,第一步,加载相关包

library(Rtsne)
library(ggplot2)

如果没有安装的,可以使用一下语句进行安装:

#install.packages("Rtsne")
#install.packages("ggplot2")

第二步,导入数据,并进行预处理。由于t-SNE分析不允许有重复数据出现,因此这里我们要进行重复数据的去除,此处row.names设置为1表示将第一列数据设置为行名,G:/****/****/****.csv请更换为自己的数据文件路径

df <- read.csv("G:/****/****/****.csv",row.names = 1)
df = unique(df)

第三步,进行数据分析

set.seed(999) 
res <- Rtsne(df, 
            dims = 2, #x和y轴
            max_iter = 1000,
            theta = 0.5, 
            perplexity = 20, 
            verbose = T)

第四步,绘图

result <-  as.data.frame(res$Y)
colnames(result)  <-  c("tSNE1","tSNE2")
result$group <- c(rep("A",50),rep("B",50),rep("C",49))

p <- ggplot(result, aes(tSNE1, tSNE2, fill = group, shape = group)) + 
  geom_point(size = 3)+
  stat_ellipse(aes(color = group), geom = 'polygon', level = 0.95, alpha = 0, linetype = 2, show.legend = FALSE) +	#添加置信椭圆,注意不是聚类
  scale_fill_manual(values = c("turquoise","sienna1","violet"))+  
  scale_color_manual(values = c("turquoise","sienna1","violet"))+
  scale_shape_manual(values = c(21,22,24))+ 
  theme_bw()+#主题
  # theme_dark()+#暗色主题
  # theme_gray()+ #默认主题
  # theme_light()+ # 浅色坐标带网格
  # theme_minimal()+ # 极简主题
  # theme_classic()+ # 经典主题
  theme(legend.position = "right")
  
  # 查看结果
  p
  

最后的结果如图所示:
在这里插入图片描述
可以通过以下语句进行结果的保存:

ggsave("***.pdf", p, width = 4, height = 4)

四 参考文章列表

1、https://blog.csdn.net/jcfszxc/article/details/135888850
2、https://github.com/oreillymedia/t-SNE-tutorial
3、R语言分析作图(公众号)

以上!!!!!

;