期刊配图:PCA、t-SNE与UMAP三种降维方法简化高维数据的展示应用对比

机器学习大数据数据库

picture.image

✨ 欢迎关注 ✨

本节介绍:PCA、t-SNE与UMAP三种降维方法在分类数据中的应用对比。数据采用模拟数据,作者根据个人对机器学习的理解进行代码实现与图表输出,仅供参考。 完整 数据和代码将在稍后上传至交流群,付费成员可在交流群中获取下载。需要的朋友可关注公众文末提供的购买方式。 购买前请咨询,避免不必要的问题。

✨ 文献信息 ✨

picture.image

该图展示七种微量元素(Ag、Bi、Cd、Sb、Se、Sn、Tl)在不同类型的Pb-Zn矿床(如CRD、Epithermal、MVT等)中galena矿石的浓度分布。通过箱型图展示每种矿床类型中微量元素的浓度范围及其分布特点

picture.image

该图展示使用PCA、t-SNE和UMAP三种降维方法对不同类型Pb-Zn矿床数据进行可视化的结果,显示了各矿床类型的聚类情况,其中UMAP提供了明显优于PCA和t-SNE的区分效果

在文献中,PCA、t-SNE和UMAP被用来进行 降维数据可视化 ,目的是简化高维地球化学数据的展示,帮助研究者识别不同类型的矿床

  • 文献中,PCA被用作初步的降维技术,以可视化来自不同Pb-Zn矿床类型的galena的高维微量元素数据。它通过将原始特征投影到具有最大方差的新维度(主成分)上,帮助识别数据集中的一般变化模式。这为研究者提供了基于微量元素组成对不同矿床类型进行分组的初步理解
  • t-SNE被用来更好地捕捉数据中的局部结构和聚类,尤其是在微量元素之间的关系是非线性的情况下。它着重于保持数据点之间的局部相似性,揭示出在PCA可视化中没有明显分开的矿床类型的更细致的聚类。t-SNE提供了一个更详细的视图,显示了某些矿床类型如何聚集在一起,但有时会失去全局结构
  • 在这项研究中,由于UMAP能够同时保留数据中的局部和全局结构,它被选为最有效的降维方法。与PCA和t-SNE相比,UMAP提供了最好的分类结果可视化。UMAP不仅保留了数据点之间的局部关系,还确保了全局结构(不同矿床类型的广泛分组)的保留,这使得它在分析复杂数据集时非常有效。它的高效性使其特别适合处理大数据集

PCA、t-SNE和UMAP三种降维方法结合使用,特别是UMAP的应用,帮助研究者从全局和局部结构上有效探索和理解Pb-Zn矿床类型之间的差异与联系,当然其它类型的数据同理

✨ 模拟实现结果 ✨

picture.image

✨ 代码实现 ✨

  
import pandas as pd  
import numpy as np  
import matplotlib.pyplot as plt  
plt.rcParams['font.family'] = 'Times New Roman'  
plt.rcParams['axes.unicode_minus'] = False  
import warnings  
# 忽略所有警告  
warnings.filterwarnings("ignore")  
from sklearn.model_selection import train_test_split  
df = pd.read_excel('2025-6-5公众号Python机器学习AI.xlsx')  
df.head()

picture.image

加载一个名为 "2025-6-5公众号Python机器学习AI.xlsx" 的模拟数据集,并设置一些图表显示的参数,同时忽略所有警告

picture.image

和文献一样通过箱型图展示每种类型中微量元素的浓度范围及其分布特点

  
from sklearn.decomposition import PCA  
from sklearn.preprocessing import StandardScaler  
  
scaler = StandardScaler()  
df_scaled = scaler.fit_transform(data)  
  
# 创建PCA对象,n_components=2表示提取前两个主成分  
pca = PCA(n_components=2)  
  
# 进行PCA降维  
principal_components = pca.fit_transform(df_scaled)  
  
# 获取主成分贡献率  
pc1_contribution = pca.explained_variance_ratio_[0]  
pc2_contribution = pca.explained_variance_ratio_[1]  
  
# 创建包含主成分和贡献率的DataFrame  
pc_df = pd.DataFrame(data=principal_components,   
                     columns=[f'PC1 ({pc1_contribution*100:.2f}%)',   
                              f'PC2 ({pc2_contribution*100:.2f}%)'])  
pc_df['Type'] = df['Type']  
# 获取PCA的PC1和PC2的列名  
pc1_col_name = pc_df.columns[0]   
pc2_col_name = pc_df.columns[1]    
  
# 创建图形和坐标轴  
fig, ax = plt.subplots(figsize=(6, 5))  # 设置更方形的图形大小  
# 使用Seaborn绘制散点图  
sns.scatterplot(data=pc_df, x=pc1_col_name, y=pc2_col_name, hue='Type',  
                palette='muted', s=15, ax=ax, legend=True, alpha=0.9)  # 'muted'调色板  
# 去掉标题  
ax.set_title('')    
# 设置x和y轴的标签字体  
ax.set_xlabel(pc1_col_name, fontsize=18)  
ax.set_ylabel(pc2_col_name, fontsize=18)  
# 去掉上面和右边的边框  
ax.spines['top'].set_visible(False)  
ax.spines['right'].set_visible(False)  
# 增加左边和底部边框的宽度  
ax.spines['left'].set_linewidth(1.5)  
ax.spines['bottom'].set_linewidth(1.5)  
# 增加刻度线的宽度  
ax.tick_params(width=1.5, labelsize=18)  
# 添加'a'的注释  
ax.text(-0.1, 1.05, 'a', transform=ax.transAxes, fontsize=18, fontweight='bold', va='top', ha='right')  
# 获取图例并设置字体大小  
handles, labels = ax.get_legend_handles_labels()  
if handles:  # 检查是否有图例  
    ax.legend(loc='best', fontsize=10, title_fontsize=9, frameon=False)  
plt.savefig("pca.pdf", format='pdf', bbox_inches='tight', dpi=1200)  
plt.tight_layout()    
plt.show()

picture.image

对数据进行标准化处理后,使用PCA降维提取前两个主成分,并绘制一个带有类别标签的散点图

  
from sklearn.manifold import TSNE  
  
# 创建t-SNE对象,n_components=2表示降到二维  
tsne = TSNE(n_components=2, random_state=42)  
# 进行t-SNE降维  
tsne_components = tsne.fit_transform(df_scaled)  
tsne_df = pd.DataFrame(data=tsne_components, columns=['t-SNE1', 't-SNE2'])  
tsne_df['Type'] = df['Type']    
tsne1_col_name = tsne_df.columns[0]  
tsne2_col_name = tsne_df.columns[1]  
fig, ax = plt.subplots(figsize=(6, 5))  
sns.scatterplot(data=tsne_df, x=tsne1_col_name, y=tsne2_col_name, hue='Type',  
                palette='muted', s=15, ax=ax, legend=True, alpha=0.9)  
ax.set_title('')    
ax.set_xlabel(tsne1_col_name, fontsize=18)  
ax.set_ylabel(tsne2_col_name, fontsize=18)  
ax.spines['top'].set_visible(False)  
ax.spines['right'].set_visible(False)  
ax.spines['left'].set_linewidth(1.5)  
ax.spines['bottom'].set_linewidth(1.5)  
ax.tick_params(width=1.5, labelsize=18)  
ax.text(-0.1, 1.05, 'b', transform=ax.transAxes, fontsize=18, fontweight='bold', va='top', ha='right')  
handles, labels = ax.get_legend_handles_labels()  
if handles:  
    ax.legend(loc='best', fontsize=10, title_fontsize=9, frameon=False)  
plt.savefig("t-SNE.pdf", format='pdf', bbox_inches='tight', dpi=1200)  
plt.tight_layout()    
plt.show()

picture.image

使用t-SNE降维将数据从高维降到二维,并绘制一个带有类别标签的散点图

  
import umap  
# 创建UMAP对象,n_components=2表示降到二维  
umap_model = umap.UMAP(n_components=2, random_state=42)  
# 进行UMAP降维  
umap_components = umap_model.fit_transform(df_scaled)  
umap_df = pd.DataFrame(data=umap_components, columns=['UMAP1', 'UMAP2'])  
umap_df['Type'] = df['Type']  
umap1_col_name = umap_df.columns[0]  
umap2_col_name = umap_df.columns[1]  
fig, ax = plt.subplots(figsize=(6, 5))  
sns.scatterplot(data=umap_df, x=umap1_col_name, y=umap2_col_name, hue='Type',  
                palette='muted', s=15, ax=ax, legend=True, alpha=0.9)  
ax.set_title('')    
ax.set_xlabel(umap1_col_name, fontsize=18)  
ax.set_ylabel(umap2_col_name, fontsize=18)  
ax.spines['top'].set_visible(False)  
ax.spines['right'].set_visible(False)  
ax.spines['left'].set_linewidth(1.5)  
ax.spines['bottom'].set_linewidth(1.5)  
ax.tick_params(width=1.5, labelsize=18)  
ax.text(-0.1, 1.05, 'c', transform=ax.transAxes, fontsize=18, fontweight='bold', va='top', ha='right')  
handles, labels = ax.get_legend_handles_labels()  
if handles:  
    ax.legend(loc='best', fontsize=10, title_fontsize=9, frameon=False)  
plt.savefig("UMAP.pdf", format='pdf', bbox_inches='tight', dpi=1200)  
plt.tight_layout()    
plt.show()

picture.image

使用UMAP降维将数据从高维降到二维,并绘制一个带有类别标签的散点图,可以发现 UMAP的区分效果是最好的

✨ 该文章案例 ✨

picture.image

在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。

同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。

✨ 购买介绍 ✨

本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到淘宝店铺:Python机器学习AI,或添加作者微信deep_ML联系,购买作者的公众号合集。截至目前为止,合集已包含近300多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用,包括但不限于ChatGPT、Deepseek、Claude等。

更新的内容包含数据、代码、注释和参考资料。 作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤 。 购买前请咨询,避免不必要的问题。

✨ 群友反馈 ✨

picture.image

✨ 淘宝店铺 ✨

picture.image

请大家打开淘宝扫描上方的二维码,进入店铺,获取更多Python机器学习和AI相关的内容,或者添加作者微信deep_ML联系 避免淘宝客服漏掉信息 ,希望能为您的学习之路提供帮助!

往期推荐

机器学习在临床数据分析中的应用:从数据预处理到Web应用实现的完整流程教学

期刊配图:基于SHAP算法的驱动因子相互作用贡献矩阵图

因果推断:利用EconML实现双重机器学习估计条件平均处理效应 (CATE)

期刊复现:基于部分线性模型的双重机器学习方法

期刊复现:基于XGBoost模型的网页工具SHAP力图解释单样本预测结果

期刊配图:nature cities通过ALE(累积局部效应)解析特征对模型影响

期刊复现:结合因果推断与SHAP可解释性的机器学习实现应用流程

期刊配图:一区SCI常用数据缺失率展示图可视化

因果推断:注册行为对后续消费影响的因果推断分析案例

nature communications:基于Light GBM与随机森林结合的多模型特征选择方法

因果推断与机器学习结合:探索酒店预订取消的影响因素

picture.image

如果你对类似于这样的文章感兴趣。

欢迎关注、点赞、转发~

个人观点,仅供参考

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
火山引擎 EMR 基于 Proton 的存算分离实践
EMR 团队针对这些挑战自研了 Proton 加速引擎,深度优化对象存储读写能力,与 Hive/Spark/Trino 等计算引擎集成后,在不改变用户使用习惯的前提条件下,可提供对象存储数据集的透明加速服务。在离线场景下,其性能基本持平存算一体架构。本次分享将介绍 Proton 技术能力和最佳实践。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论