基于Python机器学习算法小分子药性预测(岭回归+随机森林回归+极端森林回归+加权平均融合模型)

news2024/11/26 3:24:22

目录

  • 前言
  • 总体设计
    • 系统整体结构图
    • 系统流程图
  • 运行环境
    • Python 环境
    • 配置工具包
  • 模块实现
    • 1. 数据预处理
    • 2. 创建模型并编译
    • 3. 模型训练
  • 系统测试
  • 工程源代码下载
  • 其它资料下载

在这里插入图片描述

前言

《麻省理工科技评论》于2020年发布了“十大突破性技术”预测,其中包括“AI药物分子发现”。该榜单解释了药物分子发现的挑战,指出药物分子的数量可能比太阳系中的原子还多。因此,从如此庞大的数量中找到有价值的分子是一项艰巨的任务,需要耗费大量的时间和资源。然而,借助机器学习和AI的帮助,我们能够加速候选药物的发现过程,降低成本。

本项目基于机器学习算法,通过对单模型和融合模型计算所得的指标进行对比,旨在实现对小分子在人体内清除率指标的预测。这项技术可以进行二次开发,为药物研发提供准确的预测结果,加速候选药物的筛选过程,为研发人员提供宝贵的指导,推动药物研发的进展。

总体设计

本部分包括系统整体结构图和系统流程图。

系统整体结构图

系统整体结构如图所示。
在这里插入图片描述

系统流程图

系统流程如图所示。

在这里插入图片描述

运行环境

本部分包括Python 环境和配置工具包。

Python 环境

需要 Python 3.6 及以上配置,在 mac 环境下推荐下载 miniconda 完成 Python 所需的配置,安装 Jupyter Notebook 或 Spyder。

安装 miniconda:进入 miniconda 官网根据需要下载

安装 jupyter:在命令行输入

 pip install jupyter notebook

安装 spyder:在命令行输入

pip install spyder

配置工具包

pip install sklearn 安装Scikit-learn 库。

如果采用 pip 安装,需要 matplotlib、numpy、pandas 安装包库,分别用来进行图表绘制和图片处理,采用 pip install x(x 为安装包)指令在命令行中运行即可。如果使用 conda,采用 conda install x(x 为安装包)在命令行运行即可。

模块实现

本项目包括 3 个模块:数据预处理,创建模型并编译,模型训练,下面分别给出各模块的功能介绍及相关代码。

1. 数据预处理

对数据集输出观察,可见数据集的特征列 Features 为 str 类型。因此,需要对原始数据做预处理,提取 Features 中的数字,重新生成 Dataframe,并与原始数据的 Dataframe 进行拼接,得到规范化的数据格式,相关代码如下:

import pandas as pd
import numpy as np
#开始清洗数据
data = pd.read_csv('train_0312.csv')
data = data.drop('ID',1)# 去掉ID
import numpy
#取出特征后合并
features_col = data['Features']
arrs = features_col.values
print(arrs.shape)
arrs_list = arrs.tolist()
feature = []
#用numpy.float64映射
for i in range(0,6924):
    strin = arrs_list[i]
    strin = strin[1:-1].split(',')
    strin = list(map(np.float64,strin))
    feature.append(strin)
features = pd.DataFrame(feature)
#将特征存储在.csv文件中
features.to_csv('features.csv',index=None)
#两个表进行连接
features = pd.read_csv('features.csv')
data = pd.read_csv('train_0312.csv')
data = data.drop('ID',1)# 去掉ID
data = data.drop('Features',1)#去掉处理前的特征
df = pd.concat([data,features],axis=1)
#保存最终的数据格式
df.to_csv('df.csv',index=0)

2. 创建模型并编译

1)数据特征观察

随机挑选一些有代表性的特征列,观察特征属性与 label 的散点图。

df.plot.scatter('Molecule_max_phase','Label')
df.plot.scatter('Molecular weight','Label')
df.plot.scatter('RO5_violations','Label')
df.plot.scatter('AlogP','Label')
df.plot.scatter('3161','Label')
df.plot.scatter('3162','Label')
df.plot.scatter('3163','Label')
df.plot.scatter('3164','Label')
df.plot.scatter('3165','Label')
df.plot.scatter('3166','Label')
df.plot.scatter('3167','Label')
df.plot.scatter('1','Label')
print(df.describe())

2)特征工程构建

模型训练前,对数据特征列进行筛选,通过对散点图的观察,有一部分特征列是稀疏的,变化不大,可以去掉方差接近于 0 的特征列。使用 PCA 将特征列降低到一个合适的维度。

import numpy as np
from sklearn.linear_model import Ridge
from sklearn.model_selection import train_test_split
from sklearn.decomposition import PCA
from sklearn.feature_selection import VarianceThreshold---
from sklearn.preprocessing import StandardScaler

#过滤没有变化的特征
df_withoutLabel = df.drop('Label',1)
newcolumn = (df_withoutLabel.max(axis=0)!=df_withoutLabel.min(axis=0))
newcolumn = np.array(newcolumn)
df_withoutLabel = np.array(df_withoutLabel)
newdf = df_withoutLabel[:,newcolumn]

#特征标准化
newdf[np.isnan(newdf)]=0
stdScale = StandardScaler().fit(newdf)
newdfnorm =  stdScale.transform(newdf)
#删除低方差特征
sel = VarianceThreshold(threshold = 0.05*0.95)
newdfs = sel.fit_transform(newdf)
print(newdfs.shape)
#PCA降维
pca = PCA(n_components=1000)
pca_x = pca.fit_transform(newdfs)
pca_x = pd.DataFrame(pca_x)
label = df['Label']
newdfnorm1_pca = pd.DataFrame(pca_x)
X_pca = newdfnorm1_pca
x_train,x_test,y_train,y_test = train_test_split(X_pca,label,test_size=0.2,random_state=2)

3. 模型训练

定义模型架构和编译之后,使用训练集训练模型。

1)单模型训练

训练岭回归模型。

#定义评价函数
def calc_rmse(y_pred, y_true):
    return np.sqrt(((y_pred - y_true) ** 2).mean())
#岭回归
from sklearn.linear_model import Ridge
ridge_clf = Ridge(alpha=45)
ridge_clf.fit(x_train,y_train)
test_pred = ridge_clf.predict(x_test)
def calc_rmse(y_pred, y_true):
    return np.sqrt(((y_pred - y_true) ** 2).mean())
rmse = calc_rmse(test_pred,y_test)
print(rmse)
#随机森林模型和极端森林模型
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import ExtraTreesRegressor
rf2 = RandomForestRegressor(n_estimators=100)
rf3 = ExtraTreesRegressor()
#预测
test_pre_rf2 = rf2.fit(x_train,y_train).predict(x_test)
test_pre_rf3 = rf3.fit(x_train,y_train).predict(x_test)
rmse2 = calc_rmse(test_pre_rf2,y_test)
rmse3 = calc_rmse(test_pre_rf3,y_test)
print(rmse2)
print(rmse3)

2)多模型加权平均

回归问题最简单的模型融合方式,取加权平均,对最优的两个模型进行不同权值的平均,最终输出最优的权值结果。

#加权平均得分
for i in range(0,11):
    aver = (test_pre_rf2*i+test_pred1*(10-i))/10
    rmse_aver = calc_rmse(aver,y_test)
    print(i,':',rmse_aver)

系统测试

不同模型的评价指标结果如下表所示。

模型rmse
岭回归3.1261499944709707
随机森林回归3.1396073457088436
极端森林回归3.2168531420960655
融合模型2.698796237546118

工程源代码下载

详见本人博客资源下载页

其它资料下载

如果大家想继续了解人工智能相关学习路线和知识体系,欢迎大家翻阅我的另外一篇博客《重磅 | 完备的人工智能AI 学习——基础知识学习路线,所有资料免关注免套路直接网盘下载》
这篇博客参考了Github知名开源平台,AI技术平台以及相关领域专家:Datawhale,ApacheCN,AI有道和黄海广博士等约有近100G相关资料,希望能帮助到所有小伙伴们。

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

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

相关文章

一文说透!华熙生物如何步步为营炼就品牌势能?

据华熙生物2022年财报,华熙生物2022年营收同比增长28.53%,净利润同比增长24%,成为全球最大的。同时,近年来也在C端也大展身手。华熙生物此前与故宫博物院合作,推出6 款故宫国宝色口红和2款“故宫美人面膜”。凭借精美的…

中小型企业需要官网和帮助中心吗?为何这样说?

随着互联网技术的不断发展,越来越多的中小型企业开始重视拥有自己的官网和帮助中心。但是,对于许多刚刚起步的中小型企业来说,官网和帮助中心的建设可能需要一定的成本和时间投入。那么,中小型企业是否需要官网和帮助中心呢&#…

python(11):python读取excel、csv文件

1.python读取excel文件 要读取Excel表格的指定行和列范围,可以使用Python中的第三方库pandas。pandas库提供了强大的数据分析和处理工具,包括读取和处理Excel文件的功能。以下是一个示例代码,演示了如何使用pandas库读取Excel表格中的指定行…

[Go]-Go语言第一课

1-1 Go语言特点 特点: 1. 静态类型,编译开源语言2. 脚本化的语法,支持多种编程范式(函数式,面向对象)3. 原生,给力的并发支持并发编程1-2 Go语言优势与劣势 Go语言的优势: 1.脚本化…

软考A计划-系统集成项目管理工程师-信息化知识(三)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

加密市场与上一轮周期有何异同?五大因素探讨加密市场未来之路

数字资产市场在一季度表现不俗,但二季度的表现却出现了相反的情况。数据显示,BTC 在一季度累计上涨了 71.69%,而二季度截至目前下跌了 7.31%。这样的变化主要是由金融监管机构针对整个数字资产行业采取的监管行动造成的。虽然 BTC 今年以来仍…

uniapp中uni-popup的用法——实例讲解

uni-pop弹出层组件,在应用中弹出一个消息提示窗口、提示框等,可以设置弹出层的位置,是中间、底部、还是顶部。 如下图效果所示:白色区域则为弹出的pop层。 一、 创建一个自定义组件: 1.项目中安装下载uni-pop插件。 2.把pop内容…

2023.6.19项目部署(一)前端项目部署

文章目录 项目部署(一)前端项目一、安装宝塔面板1、安装宝塔面板2、放行端口3、安装相关软件4、添加站点 二、项目打包1、Springboot打包2、vue项目打包 三、前端项目部署1、安装nginx2、修改配置文件 项目部署(一)前端项目 将开…

SQL优化的几种方法

目录 避免使用select *用union all代替union小表驱动大表批量操作多用limitSQL查找是否"存在",别再count了!in中值太多增量查询高效的分页用连接查询代替子查询join的表不宜过多join时要注意控制索引的数量选择合理的字段类型提升group by的效…

HTTPHTTPS协议详解

目录 一、HTTP是什么? 理解 "应用层协议" 理解 HTTP 协议的工作过程 二、HTTP 协议格式 抓包工具的使用 抓包工具的原理 抓包结果 协议格式总结 三、HTTP 请求 (Request) 认识 URL URL 基本格式 认识 "方法" (method) 认识请求 &quo…

使用Java设计实现一个高效可伸缩的计算结果缓存

目录 概述1.缓存实现1.1 使用HashMapSynchronized实现缓存1.2 使用ConcurrentHashMap代替HashMap改进缓存的并发1.3 完成可伸缩性高效缓存的最终方案1.4 测试代码 2.并发技巧总结 概述 现在的软件开发中几乎所有的应用都会用到某种形式的缓存,重用之前的计算结果能…

回收站数据恢复方法有哪些?五招走起,趁早上手

回收站数据恢复方法是我们在日常操作电脑时不可避免需要面对的问题。本文将对几种常用的回收站数据恢复方法进行介绍,为大家解决恢复回收站数据的常见问题。 一、使用快捷键恢复回收站文件 在我们的电脑中,有很多实用的快捷键,其中有效地恢…

分享干货,多编程语言代码生成神器 CodeGeeX,编码效率提升十倍

CodeGeeX 是一个具有 130 亿参数的多编程语言代码生成预训练模型,采用华为 MindSpore 框架实现,在鹏城实验室“鹏城云脑 II”上使用 1536 个国产昇腾 910 AI 处理器训练而成。 CodeGeexX 支持十多种主流编程语言的高精度代码生成、跨语言代码翻译等功能&…

Django网络空间微博管理信息系统-计算机毕设 附源码85633

Django网络空间微博管理信息系统 摘 要 本论文主要论述了如何使用django框架开发一个网络空间微博管理信息系统,本系统将严格按照软件开发流程进行各个阶段的工作,面向对象编程思想进行项目开发。在引言中,作者将论述该系统的当前背景以及系统…

MidJourney使用教程:一 第一次怎么用Midjourney

实际我是先写的prompts提示这部分,觉得Midjurney使用的方式,市面上已经有一大把文章了,另一方面觉得也没什么可写的。注册一个discard账号写个prompts描述出图就可以了,但其实有很多点其实忽略掉。比如图出来了,这四幅…

cesium封装实现卫星视锥扫描效果

废话不多说,先看效果 先封装视锥效果函数 // 绘制卫星锥体const radarScanner = (position,height,radarId,bottomRadius,color) => {viewer.entities.add({

基于Springboot+vue的垃圾分类网站设计与实现

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

学生速看!免费领取一台阿里云服务器申请全流程

阿里云学生服务器优惠活动:高效计划,可以免费领取一台阿里云服务器,如果你是一名高校学生,想搭建一个linux学习环境、git代码托管服务器,或者创建个人博客网站记录自己的学习成长历程,拥有一台云服务器是很…

MT4开户平台交易注意事项有哪些?

很多投资者都会选择MT4平台进行开户交易,毕竟MT4平台的起步时间比较早,对一些关注资金安全的投资者来说,MT4平台无疑是他们最佳的选择,那么,在MT4开户平台交易就一定不会发生失误吗?答案就是:不…

红帽考试常见问题解答

问:红帽考试结束后,何时可以收到成绩? 答:美国认证中心会在 3~5 个工作日内将成绩通知邮件发给考生,请注意提供正确的联系信息。例外情况:一些邮件服务器会错误地将结果电子邮件作为垃圾邮件处…