分享

DeepChem:分子指纹

 翌然生物 2023-04-10 发布于广东

分子指纹是一个固定长度的数组,其中不同的元素表示分子中存在不同的特征。如果两个分子具有相似的指纹,则表明它们包含许多相同的特征,因此很可能具有相似的化学性质。

DeepChem支持一种特殊类型的指纹,称为“扩展连接指纹”,简称“ECFP”。它们有时也被称为“圆形指纹”。ECFP 算法首先仅根据原子的直接属性和键对原子进行分类。每个独特的图案都是一个特征。例如,“与两个氢和两个重原子结合的碳原子”将是一个特征,对于包含该特征的任何分子,指纹的特定元素设置为 1。然后,它通过查看更大的圆形邻域来迭代识别新特征。与其他两个特定特征结合的一个特定特征成为更高级别的特征,并且为包含它的任何分子设置相应的元素。这会持续进行固定次数的迭代,通常是两次。

图1 ECFP指纹的示意图生成

环形指纹(circular fingerprints)是目前被广泛应用的分子表示方式。在这种方法中,算法会检测每个原子及其与它相邻距离为1、2、3等。不是按照预定义的化学概念,每个这样的局部模式都会根据哈希函数打开一位。典型的位向量大小为1024。扩展环形指纹(ECFPx)是一种标准实现方法,其中x表示最大直径;例如,ECFP4表示半径为2个化学键。使用Tanimoto系数(在其他领域中也称为Jaccard指数)可以估算两个分子之间的相似度,即两个分子中同时为1的位的数量除以两个分子中所有为1的位的数量之和。环形指纹最初的动机是用于数据库的相似性搜索,因为可以通过位运算非常高效地实现。但后来也有助于灵活地扩展机器学习中的分子特征数量;

总之,ECFP是一种广泛应用于化学和分子机器学习领域的分子指纹方法,能够有效地表示化学物质的相似性和性质。DeepChem库提供了ECFP指纹生成和处理的工具,可以帮助研究人员在化学品的设计、药物发现和材料科学等领域中进行高效的分子分析和比较。

下面以tox21数据集为例来看一下用ECFP的方法特征化之后的数据:

import deepchem as dctasks, datasets, transformers = dc.molnet.load_tox21(featurizer='ECFP') train_dataset, valid_dataset, test_dataset = datasets print(train_dataset.X[20:30,40:60])

图2 利用ECFP处理之后的数据

import deepchem as dcimport numpy as np

model = dc.models.MultitaskClassifier(n_tasks=12, n_features=1024, layer_sizes=[1000])model.fit(train_dataset, nb_epoch=10)metric = dc.metrics.Metric(dc.metrics.roc_auc_score)print('training set score:', model.evaluate(train_dataset, [metric], transformers))print('test set score:', model.evaluate(test_dataset, [metric], transformers))

对于这样一个简单的模型和特征化来说,表现还算不错。更复杂的模型在这个数据集上表现会好一些,但差距并不是非常大。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多