【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语言中,我们将使用到Rtsne
、ggplot2
这两个包,分别进行的是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语言分析作图(公众号)
以上!!!!!