'''by wufeil进一步认识分子特征化:将化学分子结构作为到随机森林\CNN\RNN\GNN等机器学习模型的输入如何将一个分子SMile表示的分子输入到机器学习/深度学习中呢?例如:CH3CH3CH3这里将进行介绍。使用机器学习处理分子数据最重要的一步就是将分子转换成机器学习算法可以处理的数据格式。deepchem特征化分子的方法为Featurizer类。有三种方式的特征化分子:(1) 直接使用molnet内置数据集的时候,只需要转递特征化的名字即可,例如:featurizer='ECFP'或者featurizer='GraphConv'(2) 直接创立一个特征器featurer,应用与分子,如下代码:'''import rdkit
from rdkit import Chem
import deepchem as dc'''
查看deepchem和rdkit的版本
'''
print('Rdkit version:', rdkit.__version__)
print('Deepchem version', dc.__version__)'''
使用RDKIT使用分子的SMILES构建分子,详见:https://www.rdkit.org/docs/source/rdkit.Chem.rdmolfiles.html
返回一个mol对象。
'''
testsmi = 'CC(C1=C(C=CC(=C1Cl)F)Cl)OC2=C(N=CC(=C2)C3=CN(N=C3)C4CCNCC4)N'
mol = Chem.MolFromSmiles(testsmi)
print(mol)'''
这里必须要说明的是:deepchem中的dc.feat.CircularFingerprint()特征化方法,按照文档的说法,可以输入SMILES,直接特征化。但是在实际使用中发生报错:Boost.Python.ArgumentError: Python argument types inrdkit.Chem.rdMolDescriptors.GetMorganFingerprintAsBitVect(str, int) did not match C++ signature不管是百度或者Google,都没有明确的说法,大部分是认为是与C++有关的boost模块发生了兼容问题,但是都没有有效的解决方法。经过我测试发现,其实这是因为输入类型错误导致的。虽然在deepchem的文档例子中,dc.feat.CircularFingerprint()是可以输入Simles,但是实际不行,如果先使用RDKit将SMILE转换为Mol对象以后则不会出现该问题。其他的类型错误也是会报上述错误。当然这也可能是因为我RDKIT与deepchem的版本不匹配的问题。
'''
smiles = ['O=Cc1ccc(O)c(OC)c1','CN1CCC[C@H]1c2cccnc2','C1CCCCC1','c1ccccc1','CC(=O)O',
]
SIMLES =[]
for smile in smiles:SIMLES.append(Chem.MolFromSmiles(smile))
'''
CircularFingerprint特征化在加载数据时,可以使用这个对象,将分子统一进行特征化处理。当然,SIMLES也要生成不同的构象,可以使用deepchem.utils.conformers进行处理
'''
featurizer = dc.feat.CircularFingerprint(size=1024)
ecfp = featurizer.featurize(SIMLES)
print(ecfp)
print(len(ecfp))'''
RDKitDescriptors特征化RDKitDescriptors特征化的方法是使用RDKIT包,计算分子chemical discrptors的值。这些是基本的物理和化学特性:分子量,极性表面积,氢键供体和受体的数量等。这对于预测依赖于这些高级特性而不是详细分子结构的事物最有用。
'''
rdkit_featurizer = dc.feat.RDKitDescriptors()
mol = Chem.MolFromSmiles('CCC') #先将Smiles转换为Mol对象
features = rdkit_featurizer([mol])[0] #[0]是因为返回是各分子的列表print('The number of descriptors present is: ', len(features), '\n')
'''
111个描述器(descriptors)
因此features = rdkit_featurizer([mol])返回的shape是(n,111), n为分子数
'''
for feature, descriptor in zip(features, rdkit_featurizer.descriptors):'''逐一打印描述器及其特征值'''print(feature, ' ' ,descriptor)'''
WeaveFeaturizer and MolGraphConvFeaturizer特征化WeaveFeaturizer and MolGraphConvFeaturizer特征化主要是适用于图神经网络。正如我们之前的关于内置数据集的内容,将图神经网络应用于分子的时候,使用ConvMolFeaturizer方法将分子转换成ConvMol/WeaveMol对象。在这个对象里面,我们可以提取出邻接矩阵、节点矩阵等图神经网络需要的输入将分子用一张图来代表。DeepChem支持许多不同的基于图形的模型。 其中一些要求分子以稍微不同的方式进行特征化。 因此,另外还有两个适用于图神经网络的分子转换器,称为WeaveFeaturizer和MolGraphConvFeaturizer。他们返回的是ConvMol对象。更具体一点,WeaveFeaturizer返回的是WeaveMol对象,MolGraphConvFeaturizer返回的是ConvMol对象它们各自将分子转换为特定模型使用的不同类型的Python对象。 使用任何基于图形的模型时,只需查看文档以查看需要与之配合使用的特征化器。当然,如果是不使用deepchem里面的图神经网络模型,那么只需要利用WeaveFeaturizer和MolGraphConvFeaturizer转换器生成ConvMol对象,然后从ConvMol对象中提取出连接矩阵等信息。具体用法请参考:https://deepchem.readthedocs.io/en/latest/api_reference/dataclasses.html?highlight=WeaveMol#deepchem.feat.mol_graphs.WeaveMol
'''
featurizer = dc.feat.ConvMolFeaturizer()
X = featurizer.featurize([mol])
print(type(X[0]))
print(X)
print(X[0].get_atom_features())
print(X[0].get_atoms_with_deg(2))
print(X[0].get_num_atoms_with_deg(2))
print(X[0].get_adjacency_list())featurizer = dc.feat.WeaveFeaturizer()
X = featurizer.featurize([mol])
print(type(X[0]))
print(X[0])
print(X[0].get_atom_features())
'''
注意:WeaveMol对象没有get_atoms_with_deg/get_num_atoms_with_deg/get_adjacency_list等属性。
''''''
CoulombMatrix
库伦矩阵到目前为止,我们研究的所有模型都只考虑了分子的固有特性:组成该分子的原子列表和连接它们的键。
当使用柔性分子时,您可能还需要考虑分子可以呈现的不同构象。 例如,当药物分子与蛋白质结合时,
结合强度取决于原子对之间的特定相互作用。 为了预测结合强度,您可能需要考虑各种可能的构象,并使用在进行预测时将它们考虑在内的模型。库仑矩阵是分子构象的一种流行特征。两个电荷之间的静电库仑相互作用与q_1 q_2 / r 成正比,其中 q_1 和 q_2 是电荷, r 是它们之间的距离。
对于具有N个原子的分子,库仑矩阵是N×N的矩阵,其中每个元素给出两个原子之间静电相互作用的强度。 它包含有关原子上的电荷以及原子之间的距离的信息。要应用这种特征化方法,我们首先需要分子的一系列构象。
我们可以使用ConformerGenerator类来执行此操作。
它需要一个RDKit分子,生成一组能量最小的构象异构体,然后将其修剪为仅包括彼此显着不同的构象异构体。
让我们尝试将其用于丙烷。
'''
from rdkit import Chem
from deepchem.utils import conformers
generator = conformers.ConformerGenerator(max_conformers=5)
butane_mol = generator.generate_conformers(Chem.MolFromSmiles('CCCC'))'''
butane_mol.GetConformers()生成构象的rdkit.Chem.rdchem.Conformer对象
'''
print(butane_mol.GetConformers())
conformers_mols = butane_mol.GetConformers()
print(type(conformers_mols[0]))'''
dc.feat.CoulombMatrix生成库伦矩阵关于shape:features里面有很多0,这是因为使用20个原子来做库伦矩阵,如果不足20个原子则会用0补足这里最后的矩阵形状为:(1, 3, 20, 20) 1是[],3是’CCCC‘的3个构象,20*20是库伦矩阵
'''
coulomb_mat = dc.feat.CoulombMatrix(max_atoms=20)
features = coulomb_mat([butane_mol])
print(features)
print(features.shape)for i, j in zip(features[0,1,:,:].flat, features[0,2,:,:].flat):if i != j :print('XXX')
'''
有输出,说明两个构象的库伦矩阵真的不一致。
''''''
CoulombMatrixEig
库伦特征值矩阵库仑矩阵的一个重要特征是它们对于分子的旋转和平移是无关的,因为原子间的距离和原子序数不变。
这使学习变得容易。 因为,旋转分子不会改变其物理性质。
如果特征确实发生了变化,则模型将被迫学习旋转并不重要,但是如果特征不变,则模型将自动获得此属性。库仑矩阵在另一个重要的对称性上是不变的:原子指数的排列。 分子的物理性质并不取决于我们称哪个原子为“原子1”,而库仑矩阵则取决于。为了解决这个问题,我们引入了CoulumbMatrixEig功能化器,该功能器使用了Coulumb矩阵的特征值谱,并且对于原子索引的随机排列是不变的。 这种特征化的缺点是它包含的信息要少得多(N 个特征值而不是N 乘以N 的矩阵),因此模型在学习方面将受到更多的限制。oulombMatrixEig继承自CoulombMatrix,并通过首先计算分子的不同构象异构体的库仑矩阵,然后计算每个库仑矩阵的特征值来使分子特征化。 然后填充这些特征值到20(设定的原子数)。
'''
coulomb_mat_eig = dc.feat.CoulombMatrixEig(max_atoms=20)
features = coulomb_mat_eig([butane_mol])
print(features)''''
总结:有三种方法将分子特征化,使之适合机器学习/深度学习模型:(1)对于内置的数据集,可以直接使用featurizer = dc.feat.CircularFingerprint()等一些系列特征化方法,将SMILES的list转化为特征,这种方法适合与RNN\CNN\Randomforest等方法;输入是:Mol对象list,输出是numpy矩阵(2)RDKitDescriptors:rdkit_featurizer = dc.feat.RDKitDescriptors()基于性质的特征,例如分子质量等;这种方法适合与RNN\CNN\Randomforest等方法;输入是Mol对象list,输出是numpy矩阵(3) 适合图神经网络的WeaveFeaturizer and MolGraphConvFeaturizer:featurizer = dc.feat.WeaveFeaturizer()featurizer = dc.feat.ConvMolFeaturizer()    基于原子结构的特征:输入是Mol对象list,输出是:ConvMol/WeaveMol对象。(4) 与构象有关的库伦矩阵输入的是:rdkit.Chem.rdchem.Conformer对象,由generator = conformers.ConformerGenerator(max_conformers=5);butane_mol = generator.generate_conformers(Chem.MolFromSmiles('CCCC'))生成。输出是:numpy矩阵coulomb_mat = dc.feat.CoulombMatrix(max_atoms=20)features = coulomb_mat([butane_mol])当然也可以库伦矩阵的特征值:coulomb_mat_eig = dc.feat.CoulombMatrixEig(max_atoms=20)features = coulomb_mat_eig([butane_mol])现在还存在一个关键问题:图神经网络能否输入不同的构象信息呢?这取决于保存构象的rdkit.Chem.rdchem.Conformer对象能否转换成ConvMol/WeaveMol对象,如果能,在转换以后是否还有构象的信息?这个问题留到以后解决。
'''

进一步认识Deepchem的分子特征化: 将化学分子结构作为到随机森林\CNN\RNN\GNN等机器学习模型输入的三种方法相关推荐

  1. 计算机模拟多孔碳,多孔碳材料分子设计的三种方法

    原标题:多孔碳材料分子设计的三种方法 多孔固体分子设计在过去二十年里中取得了巨大的成功.得益于其独特的性质,多孔碳材料(尤其是活性碳 )由于其独特的性质已可作为分离介质持续使用.这篇发表于Elsevi ...

  2. 独家 | 将时间信息编码用于机器学习模型的三种编码时间信息作为特征的三种方法...

    作者:Eryk Lewinson 翻译:汪桉旭 校对:zrx本文约4400字,建议阅读5分钟 本文研究了三种使用日期相关的信息如何创造有意义特征的方法. 标签:时间帧,机器学习,Python,技术演示 ...

  3. 图像灰度化的三种方法(matlab、C++、Python实现)

    灰度化处理就是将一幅色彩图像转化为灰度图像的过程.彩色图像分为R,G,B三个分量,分别显示出红绿蓝等各种颜色,灰度化就是使彩色的R,G,B分量相等的过程.灰度值大的像素点比较亮(像素值最大为255,为 ...

  4. 二次型化标准形的三种方法

    二次型化标准形的三种方法 将二次型化为标准形有利于我们了解二次型的简单形式.二次型的各种参数如正负惯性指数.得到二次型的规范形.对称矩阵合同的简单形等等.另外,化标准形也是解析几何化简二次曲线和二次曲 ...

  5. ML之R:通过数据预处理利用LiR/XGBoost等(特征重要性/交叉训练曲线可视化/线性和非线性算法对比/三种模型调参/三种模型融合)实现二手汽车产品交易价格回归预测之详细攻略

    ML之R:通过数据预处理利用LiR/XGBoost等(特征重要性/交叉训练曲线可视化/线性和非线性算法对比/三种模型调参/三种模型融合)实现二手汽车产品交易价格回归预测之详细攻略 目录 三.模型训练 ...

  6. 【图像处理】——图像的灰度化处理(Python实现三种方法——最大值法、平均值法、加权均值法、gamma校正)

    目录 一.什么是图像的灰度化? 二.灰度化的几种方法(最大值法.平均值法.加权均值法.gamma校正) 1.直接调用函数:cv2.cvtColor() 图像颜色空间转换 2.最大值法 (1)概念 (2 ...

  7. 【竞赛相关】特征/模型存储的5种方法

    Hello大家好,我是Coggle菌.今天我将继续和大家一起学习竞赛中的各种基础知识点,从基础库使用到具体的比赛案例. 今天将介绍的比赛中存储特征的几种方法,供大家学习和选择. 方法1:csv/txt ...

  8. matlab实现彩色图像灰度化的三种方法

    一.概要 将彩色图像转换为灰度图像的过程称为灰度化处理. 对于图像而言,灰度化处理就是使彩色的R,G,B分量值相等的过程. 灰度化处理的方法主要有如下3种: 最大值法:使R,G,B的值等于3值中最大的 ...

  9. Python三种方法计算皮尔逊相关系数以及实现给定数据集,返回数据集中每个特征和标签的相关系数

    特征预处理完之后,我们需要选择有意义的特征作为输入机器学习的算法和模型进行训练 在统计学中,皮尔逊相关系数( Pearson correlation coefficient),又称皮尔逊积矩相关系数( ...

最新文章

  1. CodeSmith输错license后的解决办法
  2. 学习笔记27—python中numpy.ravel() 和 flatten()函数
  3. Revenue Cloud答疑
  4. 基于Jenkins的开发测试全流程持续集成实践
  5. android layout 层次感,FrameLayout的层次问题
  6. C++中 栈的简单封装
  7. Nginx安装,目录结构与配置文件详解
  8. EmacsLisp学习
  9. Django 创建model的一些注意事项
  10. C语言的sqrt函数的调用
  11. 各种数据库之间数据迁移工具
  12. linux c++ 时间戳转换,C++时间戳转换成日期时间的步骤和示例代码
  13. Rational Rose安装教程
  14. BMC远程管理服务器
  15. 使用moy快速开发后台管理系统(一)
  16. 《实变函数简明教程》,第三章:可测函数,连续函数复合可测函数是可测函数
  17. 爬虫【11】易班刷网薪系统
  18. android平台支付宝快捷支付
  19. 2020美容师(初级)考试题库及美容师(初级)模拟考试
  20. 学计算机这么课最大的收获是啥,计算机课程学习心得范文

热门文章

  1. win10输入法频繁自动中英文切换的问题
  2. HTML5期末作业:明星网站设计与实现——明星薛之谦介绍网页设计7个页面HTML+CSS+JavaScript
  3. 如何用计算机算p,‎App Store 上的“计算器++P”
  4. NOIP历年第二轮入门组真题集合
  5. /Users/xxxx/.zshrc:export:101: not valid in this context: /Users/xxxx/xxxx
  6. wps透视表列总计移到顶部_数据透视表总计中的错误
  7. 2022跨年烟花代码(六)HTML5鼠标点击页面放烟花特效
  8. python+selenium自动登录163邮箱代码提示错误解决方案(如:NoSuchFrameException: Message: no such frame)
  9. 一篇好文之Android数据库 SQLite全解析
  10. 多开分身苹果版_【苹果/安卓】影分身,我们每个人都会!