#Datawhale AI夏令营 #物质科学赛道 #机器学习思路 #AutoGluon自动学习方法 #TOP5%解法
本文从一个学习者的视角,详细叙述物质科学赛道的研究背景与研究方法,并着重介绍自动机器学习autogluon的基本原理和基于autogluon自动机器学习进行产率预测的实现方法
你好! 这是我第一次参加AI相关的赛事,和很多刚刚接触AI赛事的小白一样,在面对Task1的时候,一开始我也是一脸懵逼的。
在经历了两天左右的探索之后,我了解到了物质科学赛道产率预测的实践背景,并尝试使用了多种机器学习方法进行预测,单个机器学习方法虽然有效但在大佬云集的排行榜上则略显逊色了。之后,我尝试进行了基于贝叶斯优化的超参数调优和模型集成,但还是难以与诸位大佬的深度强化学习DNN方法,大模型方法等高级方法一较高下。
在此基础上,我尝试进一步使用自动机器学习方法,综合超参数调优,模型集成等方法的优势,使用传统的机器学习方法,结合自动机器学习技术,在计算性能受限,模型层数受到严重限制的条件下(没钱,免费的老是爆内存爆显存。。。),仍然取得了前5%的排名。在此,我希望与你分享我在Task1上的探索过程。
下面,本文将分为四个部分介绍本次比赛的探索内容,主要分为研究背景,baseline代码详解,autogluon自动机器学习的原理,基于autogluon自动机器学习和分子指纹的产率预测的代码详解。
研究背景
碳氮成键反应、Diels-Alder环加成反应等一系列催化合成反应,被广泛应用于在各类药物的生产合成过程中。研究人员与产业界在针对特定反应类型开发新的催化合成方法时,往往追求以高产率获得目标产物,也即开发高活性的催化反应体系,以提升原子经济性,减少资源的浪费与环境污染。然而,开发具有高活性的催化反应体系通常需要对包括催化剂和溶剂在内的多种反应条件进行详尽的探索,这导致了它成为了一项极为耗时且资源密集的任务。这要求对包括催化剂和溶剂在内的多种反应条件进行详尽的探索。目前,反应条件的筛选在很大程度上依赖于经验判断和偶然发现,导致催化反应条件的优化过程既耗时又费力,并且严重制约了新的高效催化合成策略的开发。
反应底物和反应条件是决定其产率的关键因素。因此,我们可以利用AI模型来捕捉底物、条件与产率之间的内在联系。借助产率预测AI模型,仅需输入底物和条件的信息,我们就能够预测该反应组合下的产率,从而有效提升催化反应的条件筛选效率。
引用:http://competition.sais.com.cn/competitionDetail/532233/competitionData
baseline代码详解
1.安装依赖
安装依赖就不用说了,主要是rdkit不是很熟悉,在这里,安装rdkit主要是为了把SMILES化学式转化为分子指纹,从而进一步作为训练预测器的训练数据。(emm,化学领域分子特征提取优化方法其实不是特别懂,有更好的方法嘛,欢迎化学专业大佬在评论区留言)
!pip install pandas
!pip install -U scikit-learn
!pip install rdkit
# 首先,导入库
import pickle
import pandas as pd
from tqdm import tqdm
from sklearn.ensemble import RandomForestRegressor
from rdkit.Chem import rdMolDescriptors
from rdkit import RDLogger,Chem
import numpy as np
RDLogger.DisableLog('rdApp.*')
2.读取数据,将SMILES化学式转化为分子指纹
就是用pandas读入数据,然后用rdkit转化为分子指纹就好了
SMILES
SMILES,全称是Simplified Molecular Input Line Entry System,是一种将化学分子用ASCII字符表示的方法,是化学信息学领域非常重要的工具。
由于Reactant1,Reactant2,Product,Additive,Solvent都是由SMILES表示。所以,可以使用rdkit工具直接提取SMILES的分子指纹(向量),作为特征。
Morgan fingerprint
位向量(bit ector)形式的特征,即由0,1组成的向量。
RDKit
化学信息学中主要的工具,开源。网址:http://www.rdkit.org,支持WIN\MAC\Linux,可以被python、Java、C调用。几乎所有的与化学信息学相关的内容都可以在上面找到。
引用:Datawhale的 baseline代码说明
(1)定义转化函数
def mfgen(mol,nBits=2048, radius=2):
'''
Parameters
----------
mol : mol
RDKit mol object.
nBits : int
Number of bits for the fingerprint.
radius : int
Radius of the Morgan fingerprint.
Returns
-------
mf_desc_map : ndarray
ndarray of molecular fingerprint descriptors.
'''
# 返回分子的位向量形式的Morgan fingerprint
fp = rdMolDescriptors.GetMorganFingerprintAsBitVect(mol,radius=radius,nBits=nBits)
return np