使用python简单实现三种常见的降维方法:PCA、t-SNE和Umap(降到二维进行可视化)

三种常见的降维方法:PCA、t-SNE和Umap

1.PCA

主成分分析方法(Principal Component Analysis,PCA)是一种使用最广泛的数据降维算法。PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。

import seaborn as sns #定义seaborn包
'''seaborn是python中的一个可视化库,是对matplotlib进行二次封装而成,
因为是基于matplotlib,所以seaborn的很多图表接口和参数设置与其很是接近。'''
from sklearn.decomposition import PCA #导入PCA
X_pca = PCA(n_components=2).fit_transform(train_x_fea) 
# n_components为PCA的参数,所要保留的主成分个数n,也即保留下来的特征个数n
# train_x_fea为需要降维的数据
X_pca = np.vstack((X_pca.T, train_y)).T #把降维后的数据和标签按垂直方向(行顺序)堆叠数组构成一个新的数组
df_pca = pd.DataFrame(X_pca, columns=['1st_Component','2n_Component','label']) #把降维后的数据和标签进行组合
df_pca.head()
plt.figure(figsize=(6, 6)) #定义输出图像大小
sns.scatterplot(data=df_pca, hue='label',x='1st_Component',y='2n_Component') #画散点图,定义X/Y轴
plt.rcParams['xtick.direction'] = 'in' #plt.rcParams主要作用是设置画的图的分辨率,大小等信息
plt.rcParams['ytick.direction'] = 'in'
plt.title('PCA visualization of features') #定义标题
plt.legend(loc='best') #在最合适的地方显示便签
plt.savefig('PCA visualization of features.jpg') #保存图片
plt.show()

2.t-SNE

t-分布领域嵌入算法(t-Distributed Stochastic Neighbor Embedding,t-SNE)是一种降维技术,用于在二维或三维的低维空间中表示高维数据集,从而使其可视化。与其他降维算法(如PCA)相比,t-SNE创建了一个缩小的特征空间,相似的样本由附近的点建模,不相似的样本由高概率的远点建模。

from sklearn.manifold import TSNE 
tsne = TSNE(n_components=2) 
X_tsne = tsne.fit_transform(train_x_fea) 
X_tsne_data = np.vstack((X_tsne.T, train_y)).T 
df_tsne = pd.DataFrame(X_tsne_data, columns=['Dim1','Dim2','label']) 
df_tsne.head()
plt.figure(figsize=(6, 6)) 
sns.scatterplot(data=df_tsne,hue='label',x='Dim1',y='Dim2')
plt.title('T-SNE visualization of features')
plt.legend(loc='best')
plt.savefig('T-SNE visualization of features.jpg')
plt.show()

3.Umap

UMAP(Uniform Manifold Approximation and Projection for Dimension Reduction,一致的流形逼近和投影以进行降维)。 一致的流形近似和投影(UMAP)是一种降维技术,类似于t-SNE,可用于可视化,但也可用于一般的非线性降维。

import umap
import seaborn as sns
umap = umap.UMAP(n_components=2) 
X_umap = umap.fit_transform(train_x_fea) 
X_umap_data = np.vstack((X_umap.T, train_y)).T 
df_umap = pd.DataFrame(X_umap_data, columns=['Dim1','Dim2','label']) 
df_umap.head()
plt.figure(figsize=(6, 6)) 
sns.scatterplot(data=df_umap,hue='label',x='Dim1',y='Dim2')
plt.title('Umap Visualization of features')
plt.legend(loc='best')
plt.savefig('Umap visualization of features.jpg')
plt.show()

可编辑标签的Umap可视化

#使用标签分隔类(监督 UMAP)
import umap
import seaborn as sns
train_y = pd.DataFrame(train_y)
dic = {0:'non ac4C',1:'ac4C'}
ls = []
for index,value in train_y.iterrows():
 arr = np.array(value)[0]
 ls.append(dic[arr])
embedding = umap.UMAP().fit_transform(train_x_fea,train_y)
plt.figure(figsize=(6, 6))
sns.scatterplot(embedding[:,0],embedding[:,1],hue=ls,palette='Set1',sizes=10)
plt.gca().set_aspect('equal', 'datalim')
plt.title('Umap visualization of features')
plt.xlabel('umap1')
plt.ylabel('umap2')
plt.legend(loc='best')
plt.savefig('Umap visualization of features.pdf')
plt.show()
  • List item
作者:风灬陌原文地址:https://blog.csdn.net/ZGY9542/article/details/125362040

%s 个评论

要回复文章请先登录注册