Python数据分析-分子数据分析和预测

news2024/11/18 16:05:26

一、设计背景

分子结构设计与性质计算对研发新型高能量密度材料具有重要意义。机器学习作为一种大数据计算模型,可以避免复杂、危险的实验,大幅提高研发效率、降低设计和计算成本。本文基于机器学习的方法以及通过构建神经网络,实现对高能量密度化合物的分子设计、性质预测以及高通量筛选。

近来,机器学习在化学与化工生产中的应用也逐渐增多,在化学分子计算方面的应用尤为突出。因为机器学习擅长解决分子计算中化合物分子多、分子空间结构复杂、性质种类多等问题。。。。

二、设计目的和意义

机器学习有助于加速高能量密度化合物的分子设计、性质预测以及新型分子结构的高通量筛选。目前,机器学习和高能量密度化合物相结合的研究依然较少,自主设计公开的相关数据库也不多。直接由高能量密度化合物的分子结构预测其性质仍有很大研究空间。因此,构建高能量密度化合物分子结构-性质关系数据库并实现机器学习辅助数据挖掘具有重要研究意义。 。。。

三、数据探索与分析

EDA的技术手段主要包括:汇总统计、可视化,下面分别做介绍。

 汇总统计是量化的(如均值和方差等),用单个数和数的小集合来捕获数据集的特征,从统计学的观点看,这里所提的汇总统计过程就是对统计量的估计过程。可视化技术能够让人快速吸收大量可视化信息并发现其中的模式,是十分直接且有效的数据探索性分析方法,。。。

四、理论部分

决策树

分类决策树模型是一种描述对实例进行分类的树形结构。决策树由结点( node)和有向边( directed edge)组成。结点有两种类型:内部结点( internal node )和叶结点( leaf node )。

多层感知机模型

多层感知机(MLP,Multilayer Perceptron)也叫人工神经网络(ANN,Artificial Neural Network),除了输入输出层,它中间可以有多个隐层,最简单的MLP只含一个隐层,即三层的结构,如下图。

向量机模型

支持向量机(support vector machines,SVM)是一种二分类和多分类模型

五、实证分析

首先导入必要的包和数据集,注意这里的数据集是excel格式,而且有两个sheet,随后查看训练集和验证集数据前10行:

代码和数据

报告代码数据

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import seaborn as sns 
#引入Excel库的xlrd
import xlrd
import datetime
%matplotlib inline
plt.rcParams['font.sans-serif'] = ['KaiTi']  #中文
plt.rcParams['axes.unicode_minus'] = False   #负号
train_data=pd.read_excel('D:/例题/分子类型预测 for students.xlsx',sheet_name=0)
###查看数据前五行
train_data.head(10)
###由于验证集最后一列没有数据  故先不要
v_data=pd.read_excel('D:/例题/分子类型预测 for students.xlsx',usecols=['formula','C','H','O','N','S','group','AImod','DBE','MZ','OC','HC','SC','NC','NOSC','DBE.C','DBE.O','location','sample'],sheet_name=1)

接下来进行训练集和验证集描述性统计分析:

从上可以看出,describe()函数可以展示出数据的总数、最大最小值,均值和标准差以及分位数等等指标。

train_data.describe()
v_data.describe()

在推断完数据类型之后,分别查看训练集和测试集的数据的不同类型:

 

接下来使用缺失值的可视化函数来查看数据中是否包含缺失值的存在具体结果如下:

 从上面可以看出,无论是训练集还是测试集 数据较为完整,从图上可以看出,每个变量均没有缺失值,故数据较为“干净”,在此验证集v_data不作展示。

进一步数据预处理

所以这里要进行进一步处理,

#删除formula序号
train_data.drop('formula',axis=1,inplace=True)
formula=v_data['formula']

#若是有一行全为空值就删除
train_data.dropna(how='all',inplace=True)
v_data.dropna(how='all',inplace=True)

#取值唯一的变量删除
for col in train_data.columns:
    if len(train_data[col].value_counts())==1:
        print(col)
        train_data.drop(col,axis=1,inplace=True)

miss_ratio=0.15
for col in train_data.columns:
    if  train_data[col].isnull().sum()>train_data.shape[0]*miss_ratio:
        print(col)
        train_data.drop(col,axis=1,inplace=True)

填充缺失值,缺失值有很多填充方式,可以用中位数,均值,众数。也可以就采用那一行前面一个或者后面一个有效值去填充空的(本实验是用均值向前填充)。

train_data.fillna(train_data.median(),inplace=True)   #mode,mean
train_data.fillna(method='ffill',inplace=True)   #pad,bfill/backfill
 
v_data.fillna(v_data.median(),inplace=True)   
v_data.fillna(method='ffill',inplace=True)

独热编码处理其他数据处理:

处理完成之后还可以再次查看数据的情况:

特征变量的箱线图分布情况,查看其是否有离群点:

dis_cols = 7                   #一行几个
dis_rows = len(columns)
plt.figure(figsize=(4 * dis_cols, 4 * dis_rows))
 
for i in range(len(columns)):
    plt.subplot(dis_rows,dis_cols,i+1)
    sns.boxplot(data=train_data[columns[i]], orient="v",width=0.5,palette="Set1")
    plt.xlabel(columns[i],fontsize = 20)
plt.tight_layout()
#plt.savefig('特征变量箱线图',formate='png',dpi=500)
plt.show()

从上面看出,有的特征变量还是存在离群点,比如说SC、NC,后续解决。接下来画出训练集和验证集的特征分布情况。总体上来看,训练集和验证集特征分布较为一致,特征分别较为相识。

plt.figure(figsize=(4 * dis_cols, 4 * dis_rows))
 
for i in range(len(columns)):
    ax = plt.subplot(dis_rows, dis_cols, i+1)
    ax = sns.kdeplot(train_data[columns[i]], color="red" ,shade=True)
    ax = sns.kdeplot(v_data[columns[i]], color="pink",shade=True)
    ax.set_xlabel(columns[i],fontsize = 20)
    ax.set_ylabel("Frequency",fontsize = 18)
    ax = ax.legend(["train", "test"])
plt.tight_layout()
#plt.savefig('训练测试特征变量核密度图',formate='png',dpi=500)
plt.show()

 接下来画出相关系数热力图,故可以从下看出各个特征间的相关系数:

corr = plt.subplots(figsize = (20,16),dpi=128)
corr= sns.heatmap(train_data.assign(Y=y1).corr(method='spearman'),annot=True,cmap="hot",square=True)

y值分布为:

plt.figure(figsize=(6,2),dpi=128)
plt.subplot(1,3,1)
y1.plot.box(title='响应变量箱线图')
plt.subplot(1,3,2)
y1.plot.hist(title='响应变量直方图')
plt.subplot(1,3,3)
y1.plot.kde(title='响应变量核密度图')
#sns.kdeplot(y, color='Red', shade=True)
#plt.savefig('响应变量.png')
plt.tight_layout()
plt.show()

接下来便进入机器学习:

首先划分训练集和验证集,本文的比例是0.2

随后将数据标准化,规范到同一量纲下并查看其形状:

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X_train)
X_train_s = scaler.transform(X_train)
X_val_s = scaler.transform(X_val)
X2_s=scaler.transform(v_data)

随后分别采用决策树、MLP和支持向量机进行预测分析,如下:

from sklearn.tree import DecisionTreeClassifier
modelA = DecisionTreeClassifier()
modelA.fit(X_train_s, y_train)
modelA.score(X_val_s, y_val)

#多层感知机MLP
from sklearn.neural_network import MLPClassifier
modelB = MLPClassifier(hidden_layer_sizes=(16,8), random_state=77, max_iter=10000)
modelB.fit(X_train_s, y_train)
modelB.score(X_val_s, y_val)

#支持向量机
from sklearn.svm import SVC
from sklearn.svm import LinearSVC
modelC = SVC(kernel="linear", random_state=123)
modelC.fit(X_val_s, y_val)
modelC.score(X_val_s, y_val)

决策树方法在验证集的准确率为:0.7991666666666667

多层感知机方法在验证集的准确率为:0.8394444444444444

支持向量机方法在验证集的准确率为:0.6713888888888889

从上面可以看出在这3种方法中,多层感知机的预测准确度最高,决策树次之,最后是支持向量机。选择最优模型进行分子类型预测:

随后计算出相应的准确率、精确率、召回率、F1指标

df_eval=pd.DataFrame(columns=['Accuracy','Precision','Recall','F1_score'])
for i in range(3):
    model_C=model_list[i]
    name=model_name[i]
    model_C.fit(X_train_s, y_train)
    pred=model_C.predict(X_val_s)
    s=classification_report(y_val, pred)
    s=evaluation(y_val,pred)
    df_eval.loc[name,:]=list(s)

总结与反思

本次大数据分析主要是针对给定的分子数据集,在预处理的基础之上,对不同的分子类型预测等工作,其中使用了两种机器学习模型支持向量机和决策树,使用了一种神经网络模型(多层感知机模型),最终实验发现,多层感知机在分子类型预测准确度表现方面最优,其得分均高于其他两种机器学习模型。

参考文献

  1. 侯放. 基于机器学习的高能化合物分子设计与性质预测[D].天津大学,2020.DOI:10.27356/d.cnki.gtjdu.2020.000725.
  2. 杨正飞. 基于机器学习的多层次甜味预测系统的构建研究[D].中南林业科技大学,2021.DOI:10.27662/d.cnki.gznlc.2021.000795.  
  3. 刘苗. 基于机器学习和分子指纹的化合物hERG心脏毒性预测研究[D].辽宁大学,2021.DOI:10.27209/d.cnki.glniu.2021.001009.
  4. 方坚松,庞晓丛,杨然耀,刘艾林,杜冠华. 基于机器学习策略预测抗阿尔滋海默症的小分子与蛋白相互作用[C]//.中国化学会第29届学术年会摘要集——第19分会:化学信息学与化学计量学.[出版者不详],2014:71.

创作不易,希望大家多点赞关注评论!!!(类似代码或报告定制可以私信)

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

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

相关文章

网络基础:IS-IS协议

IS-IS(Intermediate System to Intermediate System)是一种链路状态路由协议,最初由 ISO(International Organization for Standardization)为 CLNS(Connectionless Network Service)网络设计。…

TP8/6 子域名绑定应用

原www.xxx.com/admin改为admincms.xxx.com config/app.php 官方文档:ThinkPHP官方手册

fastadmin 如何给页面添加水印

偶然发现fastadmin框架有个水印插件&#xff0c;看起来漂亮&#xff0c;就想也实现这样的功能&#xff0c;看到需要费用。但是现成的插件需要费用&#xff0c;自己动手丰衣足食。说干就干。 1. 找到watermark.js &#xff0c;放到assets/js/ 下面 2.具体页面引入 <script…

基于单片机的粉尘检测报警防护系统研究

摘要 &#xff1a; 粉尘检测是环境保护的重要环节&#xff0c;传统的粉尘检测防护系统的预防方式较为单一。本文设计了一种基于单片机的粉尘检测报警防护系统&#xff0c;能有效地检测粉尘浓度&#xff0c;进行多种方式的报警防护&#xff0c;以保证工作人员的生命健康和安全。…

平价猫粮新选择!福派斯鲜肉猫粮,让猫咪享受美味大餐!

福派斯鲜肉猫粮&#xff0c;作为一款备受铲屎官们青睐的猫粮品牌&#xff0c;凭借其卓越的品质和高性价比&#xff0c;为众多猫主带来了健康与美味的双重享受。接下来&#xff0c;我们将从多个维度对这款猫粮进行解析&#xff0c;让各位铲屎官更加全面地了解它的魅力所在。 1️…

强大的文档编辑工具——坤Tools正式版 V0.4.4【免费的Word转PDF、PDF转Word、替换内容、转换图片、合并图片工具】

在这个信息爆炸的时代&#xff0c;我们每个人都像是一名勇敢的探险家&#xff0c;在茫茫的数据海洋中寻找着属于自己的宝藏。 软件链接&#xff1a;吾爱原创 | 全功能批量处理器&#xff0c;绿色版本&#xff01; 今天给大家带来一款功能强大的文档编辑工具——坤Tools正式版…

孙溟㠭篆刻《睡片原谅一切,醒来不问过往》

孙溟㠭篆刻《睡片原谅一切&#xff0c;醒来不问过往》 佛陀言&#xff1a;睡前原谅一切&#xff0c;醒来不问过往&#xff0c;珍惜所有不期而遇&#xff0c;看淡所有不辞而别甲辰夏溟㠭于寒舍小窗下刊。

Hadoop-15-Hive 元数据管理与存储 Metadata 内嵌模式 本地模式 远程模式 集群规划配置 启动服务 3节点云服务器实测

章节内容 上一节我们完成了&#xff1a; Hive中数据导出&#xff1a;HDFSHQL操作上传内容至Hive、增删改查等操作 背景介绍 这里是三台公网云服务器&#xff0c;每台 2C4G&#xff0c;搭建一个Hadoop的学习环境&#xff0c;供我学习。 之前已经在 VM 虚拟机上搭建过一次&am…

KIVY 3D Rotating Monkey Head¶

3D Rotating Monkey Head — Kivy 2.3.0 documentation KIVY 3D Rotating Monkey Head kivy 3D 旋转猴子头 This example demonstrates using OpenGL to display a rotating monkey head. This includes loading a Blender OBJ file, shaders written in OpenGL’s Shading…

机器学习筑基篇,​Ubuntu 24.04 快速安装 PyCharm IDE 工具,无需激活!

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] Ubuntu 24.04 快速安装 PyCharm IDE 工具 描述&#xff1a;虽然在之前我们安装了VScode&#xff0c;但是其对于使用Python来写大型项目以及各类配置还是比较复杂的&#xff0c;所以这里我们还是推…

docker buildx 交叉编译设置

dockerd配置文件 /etc/docker/daemon.json设置&#xff1a; rootubuntu:/etc/docker# cat daemon.json {"insecure-registries":["localhost:5000","127.0.0.1:5000","172.16.67.111:5000"],"features": {"buildkit&…

三、数据库系统(考点篇)

1、三级模式一两级映像 内模式&#xff1a;管理如何存储物理的 数据 &#xff0c;对数据的存储方式、优化、存放等。 模式&#xff1a;又称为概念模式&#xff0c; 就是我们通常使用的表这个级别 &#xff0c;根据应用、需求将物理数据划分成一 张张表。 外模式&#xff1a;…

springboot出租房租赁系统-计算机毕业设计源码80250

摘 要 随着城市化进程的不断推进&#xff0c;人口流动日益频繁&#xff0c;住房租赁需求逐渐增加。为了更好地满足人们对住房租赁服务的需求&#xff0c;本论文基于Spring Boot框架&#xff0c;设计并实现了一套出租房租赁系统。 首先&#xff0c;通过对市场需求和现有系统的调…

职升网:中级统计师是否属于中级职称?

中级统计师确实属于中级职称。 在统计专业人员的职称体系中&#xff0c;中级统计师占据了重要的位置&#xff0c;它属于中级职称范畴。这个职称体系包括初级、中级、高级和正高级四个层次&#xff0c;每个层次都对应着不同的专业技术岗位等级。初级职称只设助理级&#xff0c;…

Podman 深度解析

目录 引言Podman 的定义Podman 的架构Podman 的工作原理Podman 的应用场景Podman 在 CentOS 上的常见命令实验场景模拟总结 1. 引言 随着容器化技术的发展&#xff0c;Docker 已成为容器管理的代名词。然而&#xff0c;由于 Docker 的一些局限性&#xff0c;如需要守护进程和 …

昇思25天学习打卡营第08天|模型训练

模型训练 模型训练一般分为四个步骤&#xff1a; 构建数据集。定义神经网络模型。定义超参、损失函数及优化器。输入数据集进行训练与评估。 现在我们有了数据集和模型后&#xff0c;可以进行模型的训练与评估。 ps&#xff1a;这里的训练和Stable Diffusion中的训练是一样…

BUUCTF - Basic

文章目录 1. Linux Labs 【SSH连接漏洞】2. BUU LFI COURSE【文件包含漏洞】3. BUU BRUTE【暴力破解用户名密码】4. BUU SQL COURSE【SQL注入-当前数据库】5. Upload-Labs-Linux 1【文件上传漏洞】7. Buu Upload Course 1【文件上传包含漏洞】8. sqli-labs 1【SQL注入-服务器上…

【论文笔记】BEVCar: Camera-Radar Fusion for BEV Map and Object Segmentation

原文链接&#xff1a;https://arxiv.org/abs/2403.11761 0. 概述 本文的BEVCar模型是基于环视图像和雷达融合的BEV目标检测和地图分割模型&#xff0c;如图所示。模型的图像分支利用可变形注意力&#xff0c;将图像特征提升到BEV空间中&#xff0c;其中雷达数据用于初始化查询…

Linux 进程间的信号

1.信号的初认识 信号是进程之间事件异步通知的一种方式&#xff0c;属于软中断。通俗来说信号就是让用户或进程给其他用户和进程发生异步信息的一种方式。对于信号我们可以根据实际生活&#xff0c;对他有以下几点认识&#xff1a;1.在没有产生信号时我们就知道产生信号要怎么处…

C++:特殊类的设计(无线程)

目录 一、设计一个不能拷贝类 二、设计一个只能在堆上创建对象的类 方法一&#xff1a;析构函数私有化 方法二&#xff1a;构造函数私有化 三、设计一个只能在栈上创建对象的类 四、设计一个类不能被继承 五、设计一个只能创建一个对象的类&#xff08;单例模式&#xf…