PCA算法降维代码示例

这段代码将数据进行PCA降维至3维,并绘制一个三维散点图,展示降维后的前3个主成分。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
import matplotlib.colors as mcolors
from mpl_toolkits.mplot3d import Axes3D# 读取数据
file_path = '4_SmCrTe3_Study_AFM_Select.txt'
data = pd.read_csv(file_path, sep='\t', header=None)# 命名列
columns = ['ID', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'Energy', 'Unused']
data.columns = columns# 删除不需要的列
data = data.drop(columns=['ID', 'Unused'])# 数据概览
print(data.describe())# 分析Energy列的统计数据
energy_stats = data['Energy'].describe()
print("\nEnergy column statistics:")
print(energy_stats)# 1. 直方图(1_Energy_Analysis_Histogram.png)
plt.figure(figsize=(12, 6))# 直方图
plt.subplot(1, 2, 1)
sns.histplot(data['Energy'], kde=True)
plt.title('Energy Distribution')
plt.xlabel('Energy')# 在直方图中标注count数量
for patch in plt.gca().patches:height = patch.get_height()plt.annotate(f'{height:.0f}', (patch.get_x() + patch.get_width() / 2, height), ha='center', va='bottom')# 第二个直方图,用于替代箱线图
plt.subplot(1, 2, 2)
sns.histplot(data['Energy'], bins=30, kde=True)
plt.title('Energy Distribution (Detailed)')
plt.xlabel('Energy')# 在直方图中标注count数量
for patch in plt.gca().patches:height = patch.get_height()plt.annotate(f'{height:.0f}', (patch.get_x() + patch.get_width() / 2, height), ha='center', va='bottom')plt.tight_layout()
plt.show()# 检查并处理NaN值
print("\nNumber of NaN values in each column:")
print(data.isna().sum())# 使用插值方法填补NaN值
data = data.interpolate()# 再次检查NaN值是否已经处理
print("\nNumber of NaN values in each column after interpolation:")
print(data.isna().sum())# 2. 散点图(2_Energy_Analysis_Scatter.png)
plt.figure(figsize=(12, 6))
sns.scatterplot(data=data, x=data.index, y='Energy', color='dodgerblue')
plt.title('Selected SmCrTe3 Energy Distribution', fontsize=15)
plt.xlabel('Sample Index', fontsize=12)
plt.ylabel('Energy (meV)', fontsize=12)
plt.show()# 3. 热力图(3_Single_f-Orbital_Couplings_with_Energy_Hot.png)
plt.figure(figsize=(12, 8))
sns.heatmap(data.corr(), annot=True, cmap='coolwarm', center=0, linewidths=0.5)
plt.title('Correlation Matrix of f-Orbital Occupations and Energy', fontsize=15)
plt.show()# 双轨道和能量关系(4_Double_f-Orbital_Couplings_with_Energy_Hot.png)
couplings = pd.DataFrame()
for i in range(1, 8):for j in range(i + 1, 8):couplings[f'f{i}*f{j}'] = data[f'f{i}'] * data[f'f{j}']
couplings['Energy'] = data['Energy']# 计算耦合特征与能量的相关性
coupling_correlation = couplings.corr()['Energy'][:-1].values# 初始化7x7矩阵为0
coupling_correlation_matrix = pd.DataFrame(0, index=[f'f{i}' for i in range(1, 8)],columns=[f'f{j}' for j in range(1, 8)])index = 0
for i in range(1, 8):for j in range(i + 1, 8):correlation_value = coupling_correlation[index]coupling_correlation_matrix.loc[f'f{i}', f'f{j}'] = correlation_valuecoupling_correlation_matrix.loc[f'f{j}', f'f{i}'] = correlation_valueindex += 1# 绘制热力图
plt.figure(figsize=(10, 8))
sns.heatmap(coupling_correlation_matrix.astype(float), annot=True, cmap='coolwarm', fmt=".2f", annot_kws={"size": 10})
plt.title('Correlation of f-Orbital Couplings with Energy')
plt.xlabel('f-Orbital')
plt.ylabel('f-Orbital')
plt.show()# 主成分分析(PCA)
features = ['f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7']
x = data[features]
y = data['Energy']# 标准化
scaler = StandardScaler()
x_scaled = scaler.fit_transform(x)# PCA降维
pca = PCA(n_components=3)
principal_components = pca.fit_transform(x_scaled)
pca_df = pd.DataFrame(data=principal_components, columns=['PC1', 'PC2', 'PC3'])
pca_df['Energy'] = y.values# 自定义颜色映射
cmap = mcolors.LinearSegmentedColormap.from_list("custom", ["red", "yellow", "green", "blue"])# 绘制PCA结果3D散点图
fig = plt.figure(figsize=(16, 10))
ax = fig.add_subplot(111, projection='3d')# 绘制散点
sc = ax.scatter(pca_df['PC1'], pca_df['PC2'], pca_df['PC3'], c=pca_df['Energy'], cmap=cmap)# 添加颜色条
cbar = plt.colorbar(sc, ax=ax, pad=0.1)
cbar.set_label('Energy')# 设置轴标签
ax.set_xlabel('PC1')
ax.set_ylabel('PC2')
ax.set_zlabel('PC3')
ax.set_title('PCA of f-Orbital Occupations (3D)')plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/41380.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA 发送短信信息工具类(腾讯云)

发送短信信息工具类 import cn.hutool.core.collection.CollUtil; import com.tencentcloudapi.common.Credential; import com.tencentcloudapi.common.exception.TencentCloudSDKException; import com.tencentcloudapi.sms.v20210111.SmsClient; import com.tencentcloudapi…

pyecharts可视化案例大全(21~30)

pyecharts可视化案例大全(21~30) 二十一、直方图带标记线(最大值,平均值等)二十二、折线图带自定义标记点二十三、折线图带百分号显示二十四、象形图自定义图形二十五、水球图自定义图形二十六、GEO添加自定义坐标二十七、GEO 带涟漪效果散点图二十八、GEO热力图二十九、GEO…

关于一致性哈希

什么是一致性哈希? 定义和基本原理 一致性哈希(Consistent Hashing)是一种哈希算法,广泛应用于分布式系统中,主要用于解决动态节点变化(如节点增加或减少)时的数据分布和负载均衡问题。 定义…

基于Java中的SSM框架实现野生动物公益保护系统项目【项目源码+论文说明】计算机毕业设计

基于Java中的SSM框架实现野生动物公益保护系统演示 摘要 本系统按照网站系统设计的基本流程,遵循系统开发生命周期法和结构化方法,基于Java语言设计并实现了野生动物公益保护系统。该系统基于浏览器/服务器模式,采用JSP技术,后台…

MySQL之备份与恢复(六)

备份与恢复 文件系统快照 先决条件和配置 创建一个快照的消耗几乎微不足道,但还是需要确保系统配置可以让你获取在备份瞬间的所有需要的文件的一致性副本。首先,确保系统满足下面这些条件。 1.所有的InnoDB文件(InnoDB的表空间文件和InnoDB的事务日志…

C++学习第十三天——stack/queue的使用及底层剖析双端队列容器适配器

✨ 少年的旅途应是星辰大海 🌏 📃个人主页:island1314 🔥个人专栏:C学习 🚀 欢迎关注:👍点赞 👂&am…

学会python——用python制作一个绘图板(python实例十九)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.制作一个绘图板 3.1 代码构思 3.2 代码实例 3.3 运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可…

昇思25天学习打卡营第12天| 基于MindNLP+MusicGen生成自己的个性化音乐

之前都是看图文类的东西,今天体验一点不一样的。来点听力的内容。 mindspore有音乐生成模型MusicGen,MusicGen支持两种生成模式:贪心(greedy)和采样(sampling)。在实际执行过程中,采…

京东金融大数据分析平台总体架构:剖析和解读

京东金融大数据分析平台总体架构:剖析和解读 在现代金融行业中,大数据分析已成为决策支持和业务创新的重要工具。京东金融凭借其强大的大数据分析平台,成功地将海量数据转化为洞察力,为企业和用户提供优质服务。本文将深入探讨京…

代码随想录训练营第二十九天 134加油站 135分发糖果 860柠檬水找零 406根据身高重建队列

第一题: 原题链接:134. 加油站 - 力扣(LeetCode) 思路: 需要三个变量,一个变量start记录结果也就是出发的第一个加油站,一个变量curSum来记录此时加油耗油后剩余的油量,如果发现c…

微前端的需求有哪些?微前端的原理是怎么样的?为什么这么设计,及微前端的应用场景是什么?对有些客户,前端的重要性高于后端

微前端(Micro Frontends)是将前端应用拆分成多个独立、可部署的部分,每个部分可以由不同的团队独立开发、测试、部署和维护。这种架构类似于微服务在后端的应用,是为了应对复杂前端应用的维护和扩展问题而提出的。 来龙去脉 背景…

【吴恩达机器学习-week2】可选实验:使用 Scikit-Learn 进行线性回归

支持我的工作 🎉 📃亲爱的朋友们,感谢你们一直以来对我的关注和支持! 💪🏻 为了提供更优质的内容和更有趣的创作,我付出了大量的时间和精力。如果你觉得我的内容对你有帮助或带来了欢乐&#xf…

库表设计(基础)-实体与设计关系

实体关系分析 1 实体关系是指系统事务之间的联系。 2 实体关系需要双向分析。 3 实体关系决定表关系。 实体关系的种类 1 一对一 2 一对多 3 多对多 举例: 上面关系如下: 班级和学生 : 1:N 学生和课程:N : N 学生和学籍档案&a…

MISRA C 和MISRA C++:汽车软件安全的守护者

一、MISRA C与C语言 自1972年Dennis MacAlistair Ritchie在美国贝尔实验室创造C语言以来,它已成为当今最流行的编程语言之一。C语言以其使用的灵活性、功能的丰富性而广受欢迎,但同时也因其宽松的语法和不严格的数据类型给开发的产品带来了安全隐患。 …

如何批量给文件名添加编号?这个方法速度快!操作简单!

如何批量给文件名添加编号?这个方法速度快!操作简单!批量给文件重命名,这个是在工作中和生活中经常要用到的一个小技巧,许多人还不知道怎么操作,当然如果要按一定的格式和规律重命名大量的文件,…

Linux内核 -- 多核通信之RPMSG驱动使用

Linux Kernel RPMsg 驱动注册流程的高级用法与注意事项 在Linux Kernel中,RPMsg(Remote Processor Messaging)是一种用于不同处理器之间通信的机制,通常用于多核系统中的通信,如主处理器和协处理器之间的消息传递。了…

巴西电子游戏PWA借助海外快手kwai社交广告出海趋势解读

巴西电子游戏PWA借助海外快手kwai社交广告出海趋势解读 在数字化时代的浪潮中,电子游戏行业蓬勃发展,而广告投放策略也随之日新月异。特别是在巴西这样一个充满活力的市场,电子游戏的普及与流行程度不容小觑。在这样的背景下,在数…

java数据结构集合复习之ArrayList与顺序表

前言: 这是我最一年学习java的一部分的回顾总结 1.List 1.1什么是List? 在框架集合中,List是一个接口,继承自Collection。 Collection也是一个接口,该接口中规范了后序容器中常用的一些方法,具体如下所示 --------boolean add(E e)尾插 evoid a…

[pwn]静态编译

静态编译 1. 栈足够大的情况下 程序在ida打开后,左侧的函数栏目没有红色(系统调用的函数),而只有一些静态函数,通常这类文件的大小会必普通的pwn题程序要大得多。 这种静态编译的题没有调用库函数,也就没…

百度云智能媒体内容分析一体机(MCA)建设

导读 :本文主要介绍了百度智能云MCA产品的概念和应用。 媒体信息海量且复杂,采用人工的方式对视频进行分析处理,面临着效率低、成本高的困难。于是,MCA应运而生。它基于百度自研的视觉AI、ASR、NLP技术,为用户提供音视…