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

一、设计背景

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

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

二、设计目的和意义

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

三、数据探索与分析

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.mfbz.cn/a/776877.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTTP协议格式

目录 正文: 1.概述 2.主要特点 3.请求协议格式 4.响应协议格式 5.响应状态码 总结: 正文: 1.概述 HTTP 协议是用于传输超文本数据(如 HTML)的应用层协议,它建立在传输层协议 TCP/IP 之上。当我们在…

无人机运营合格证及无人机驾驶员合格证(AOPA)技术详解

无人机运营合格证及无人机驾驶员合格证(AOPA)技术详解如下: 一、无人机运营合格证 无人机运营合格证是无人机运营企业或个人必须获得的证书,以确保无人机在运营过程中符合相关法规和标准。对于无人机运营合格证的具体要求和申请…

【计算机毕业设计】020基于weixin小程序订餐系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

【Linux进阶】文件系统4——文件系统特性

1.磁盘组成与分区的复习 首先说明一下磁盘的物理组成,整块磁盘的组成主要有: 圆形的碟片(主要记录数据的部分);机械手臂,与在机械手臂上的磁头(可擦写碟片上的数据);主轴马达,可以…

Beats:使用 Filebeat 从 Python 应用程序中提取日志

本指南演示了如何从 Python 应用程序中提取日志并将其安全地传送到 Elasticsearch Service 部署中。你将设置 Filebeat 来监控具有标准 Elastic Common Schema (ECS) 格式字段的 JSON 结构日志文件,然后你将在 Kibana 中查看日志事件发生的实时可视化。虽然此示例使…

python基础语法 006 内置函数

1 内置函数 材料参考:内置函数 — Python 3.12.4 文档 Python 解释器内置了很多函数和类型,任何时候都能直接使用 内置函数有无返回值,是python自己定义,不能以偏概全说都有返回值 以下为较为常用的内置函数,欢迎补充…

【二】Ubuntu24虚拟机在Mac OS的VMware Fusion下无法联网问题

文章目录 1.环境背景2. 需求背景3. 解决方法3.1 在mac的终端查看虚拟机NAT网络3.2 查看unbuntu节点2的网络配置3.3 问题定位与解决3.3.1 检查是否有冲突3.3.2 冲突解决方法 4. 总结4.1 NAT 网关的原理4.2 VMware Fusion 的 NAT 模式4.3 为什么网关冲突会引起问题4.4 理解配置冲…

transformer初探

transformer初探 self-attentionmultihead-attentionencoderdecoder self-attention 其实就是三个矩阵, W q W_q Wq​、 W k W_k Wk​、 W v W_v Wv​,这三个矩阵就是需要训练的参数。分别得到每个token对应的 q q q k k k v v v,其中 q …

系统测试-测试方法学习

目录 (1)等价类 (2)边界值 (3)正交:(只用于确定排列组合,不确定具体内容) (4)判定表法 (5)流程分析法 (6&#xff0…

【vue组件库搭建04】使用vitepress搭建站点并部署到github

前言 基于vitePress搭建文档站点,使用github pages进行部署 安装VitePress 1.Node.js 18 及以上版本 2.npm add -D vitepress 3.npx vitepress init 4.将需要回答几个简单的问题: ┌ Welcome to VitePress! │ ◇ Where should VitePress initi…

Vue2基础 14:自定义指令

自定义指令 1 函数式1.1 案例--v-text放大10倍 2 对象式2.1 案例--v-fbind默认获取焦点(函数式)2.2 案例--v-fbind默认获取焦点(对象式) 3 自定义指令容易犯的错4 全局指令写法(参考过滤器写法)&#xff1a…

C51单片机程序及仿真(加减器)

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

AndroidKille更新apktool插件-cnblog

AndroidKiller不更新插件容易报错 apktool插件更新 网址 Releases iBotPeaches/Apktool (github.com) 找到apktool管理器 填入apktool位置,并输入apktool名字 选择默认的apktool版本 x掉,退出重启 可以看到反编译完成了 dex2jar 更新 网址 Release…

数据库-多表设计 多表查询

多表设计 一对多 一对多关系实现:在数据库表中多的一方,添加字段,来关联一的一方的主键 外键约束 -- 创建表时指定 create table 表名(字段名 数据类型,...[constraint] [外键名称] foreign key (外键字段名) references 主表…

帕金森患者饮食小贴士 满满的爱与关怀哦!

🍎 首先,要多吃水果和蔬菜!新鲜蔬果富含维生素和矿物质,对神经系统有很好的保护作用。🥦 特别是绿叶蔬菜,比如菠菜、生菜,它们都是健康的小天使!💚 🍲 其次&a…

vue2-vue3响应式原理

我们先来看一下响应式意味着什么?我们来看一段代码: m有一个初始化的值,有一段代码使用了这个值;那么在m有一个新的值时,这段代码可以自动重新执行; let m 20 console.log(m) console.log(m * 2)m 40上…

政策护航新能源助推绿色经济腾飞

随着全球气候变化问题日益严重,新能源行业的发展成为推动绿色经济腾飞的重要引擎。近年来,各国政府纷纷出台政策支持新能源产业,旨在激发行业活力,促进经济可持续发展。本文将从政策红利的角度,探讨新能源行业发展的现…

lnmp php7 安装ssh2扩展

安装ssh2扩展前必须安装libssh2包 下载地址: wget http://www.libssh2.org/download/libssh2-1.11.0.tar.gzwget http://pecl.php.net/get/ssh2-1.4.tgz (这里要换成最新的版本) 先安装 libssh2 再安装 SSH2: tar -zxvf libssh2-1.11.0.tar.gzcd libss…

【Linux进阶】ext2文件系统(inode)

1.再谈inode (1) 理解inode,要从文件储存说起。 文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。操作系统读取硬盘的时候,不会一个个…

方法引用 异常 file

一.方法引用 1.方法引用概述 eg: 表示引用run1类里面的sxxxx方法 把这个方法当做抽象方法的方法体 ::是方法引用符 //方法引用Integer[] arr{4,3,1,6,2,7,8,5};Arrays.sort(arr,run1::subtraction);System.out.println(Arrays.toString(arr));}publi…