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

2023-11-09

在这里插入图片描述

前言

《麻省理工科技评论》于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相关资料,希望能帮助到所有小伙伴们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 华为OD机考-模拟消息队列(C,python)

    题目描述 让我们来模拟一个消息队列的运作 有一个发布者和若干消费者 发布者会在给定的时刻向消息队列发送消息 若此时消息队列有消费者订阅 这个消息会被发送到订阅的消费者中优先级最高 输入中消费者按优先级升序排列 的一个 若此时没有订阅的消费者
  • urldecode 报错 Malformed UTF-8 characters, possibly incorrectly encoded

    使用urlencode 编码了一段字符串写入数据库 读取的时候使用urldecode 解码报错 Malformed UTF 8 characters possibly incorrectly encoded 解决方案 检查一下是否保存到数据
  • ajax不弹出新页面问题

    ajax默认是异步请求 做局部刷新的 指的是当前页数据渲染的 如果后台是转发或者重定向了 如果用ajax的话是不会弹出新的页面的 from提交的话 如果后台是转发或者重定向了 是可以打开新的页面的
  • 【人脸识别】【python】Object arrays cannot be loaded when allow_pickle=False解决方案

    2020年2月11日 0次阅读 共1625个字 0条评论 0人点赞 QueenDekimZ mtcnn debug 用mtcnn对LFW人脸数据集进行人脸检测与关键点对齐 并裁剪到160 160维 为后续facenet训练作training
  • wx.login wx.getUserProfile 获取登录凭证

    wx login 调用接口获取登录凭证 code 通过凭证进而换取用户登录态信息 包括用户在当前小程序的唯一标识 openid 微信开放平台帐号下的唯一标识 unionid 若当前小程序已绑定到微信开放平台帐号 及本次登录的会话密钥 ses
  • 通过hexo快速搭建个人博客

    个人博客预览点击这里 菜卷的博客 快速搭建一个博客 一 需要安装的工具 二 开始安装Hexo 三 安装完成后 初始化项目 四 在项目根目录下执行命令 五 启动项目 六 部署到github 七 配置文件 八 安装next主题 九 优化next
  • C语言程序实训--实验设备管理系统

    之前学校c语言程序实训课要求写的 如果程序有错误或可以改进的地方 希望各位指出 开发环境 IDE Visual Studio Code Dev C 处理器 AMD Ryzen 7 PRO 6850HS with Radeon Graphic
  • 73家!华为鸿蒙OS合作伙伴汇总

    6月2日 华为发布了最新版的鸿蒙操作系统 HarmonyOS 2 0 以及一系列搭载鸿蒙的硬件产品 比如手机 手表 平板 耳机 显示器等等 如今的智能终端越来越多 厂商不可能为每个设备单独准备一个系统 因为这不仅让开发者工作量倍增 消费者用
  • Flask网站中使用Keras时报错“Tensor Tensor(*) is not an element of this graph”

    HyperLPR车牌识别程序本地中能进行正常识别 但将其放到flask搭建的网站中进行识别 不能运行 并报错 Tensor Tensor is not an element of this graph HyperLPR中的识别模型采用的是K
  • Mask掩码

    Python中Mask的用法 引例 Numpy的MaskedArray模块 小于 或小于等于 给定数值 大于 或大于等于 给定数值 在给定范围内 超出给定范围 在算术运算期间忽略NaN和 或infinite值 All men are scu
  • Count Color

    http poj org problem id 2777 Description Chosen Problem Solving and Program design as an optional course you are require
  • 【QT】——布局

    目录 1 在UI窗口中布局 2 API设置布局 2 1 QLayout 2 2 QHBoxLayout 2 3 QVBoxLayout 2 4 QGirdLayout 注意 示例 Qt 窗口布局是指将多个子窗口按照某种排列方式将其全部展示到
  • Apifox—诠释国产接口管理工具新高度

    揭开Apifox的神秘面纱 曾经在对于接口管理和调试工作上 大量的开发者往往会选择使用Swagger做接口文档管理 用Postman做接口调试工具 然而这样使用的痛处其实也不言而喻 原本同一类型的工作却被放置在不同的软件工具上 并且对于接口
  • 图像二值化方法--OTSU(最大类间方差法)

    前面学习了直方图双峰法 图像二值化方法中的阈值法 最大类间方差法 OTSU 是找到自适应阈值的常用方法 原理参考了冈萨雷斯的 数字图像处理 以下是自己写的函数 获取灰度图in的OTSU阈值 int Segment otsuMat Mat i
  • [译] Scratch 平台的神经网络实现(R 语言)

    原文地址 Neural Networks from Scratch in R 原文作者 Ilia Karmanov 译文出自 掘金翻译计划 本文永久链接 github com xitu gold m 译者 CACppuccino 校对者 I
  • 【通信协议】笔记之Redis协议抓取分析

    RESP Redis序列化协议 概念 Redis底层使用的通信协议是RESP Redis Serialization Protocol的缩写 RESP协议可以序列化多种类型 比如Simple Strings 简单字符串 Errors 错误类
  • FreeRTOS记录(九、一个裸机工程转FreeRTOS的实例)

    记录一下一个实际项目由裸机程序改成FreeRTOS 以前产品的平台还是C8051单片机上面的程序 硬件平台改成了STM32L051 同时使用STM32CubeMX生成的工程 使用FreeRTOS系统 EEPROM数据存储读取函数修改更新 2
  • 数学建模第二天:数学建模工具课之MATLAB绘图操作

    目录 一 前言 二 二维绘图 1 曲线图 散点图plot 2 隐函数 显函数与参数方程的绘图 ezplot fplot 三 三维绘图 1 单曲线plot3 2 多曲线plot3 3 曲面 实曲面surf 网格曲面mesh 四 特殊的二维 三
  • 9.Linux虚拟机下Hive的安装配置

    hadoop 3 1 3 jdk 8u162 linux x64 apache hive 3 1 2 bin 本案例软件包 链接 https pan baidu com s 1ighxbTNAWqobGpsX0qkD8w 提取码 lkjh
  • 基于Python机器学习算法小分子药性预测(岭回归+随机森林回归+极端森林回归+加权平均融合模型)

    目录 前言 总体设计 系统整体结构图 系统流程图 运行环境 Python 环境 配置工具包 模块实现 1 数据预处理 2 创建模型并编译 3 模型训练 系统测试 工程源代码下载 其它资料下载 前言 麻省理工科技评论 于2020年发布了 十大