分子可以用多种方法表示。本教程介绍一种方法叫做"分子指纹(molecular fingerprint)",这是一种简单的表示主法,对于小分子类药物来说通常工作得很好。

In [1]:

import deepchem as dc

dc.__version__

Out[1]:

'2.4.0-rc1.dev'

什么叫指纹?

深度学习几乎总是以数组作为它们的输入。如果我们要用深度学习来处理它们,我们需要一个或多个数组来表示分子。许多(不是所有)的模型要求它们的输入是固定大小的。这对分子来说是很有挑战的。因为不同的分子有不同的原子数。如果我们想要使用这些类型的模型,我们要用固定大小的数组表示不同大小的分子。指纹为处理这个问题而产生。指纹是固定大小的数组,不同的元素表示不同的特征的存在与否。如果两个分子有相似的指纹,提示它们有许多相似的特征,因此有相似的化学性质。DeepChem支持特殊的指纹叫做"Extended Connectivity Fingerprint",缩写为"ECFP"。它们有时也称为"circular fingerprints"。 ECFP算法由分类原子开始,基于原子的直接特征和键。每个唯一的模式都有一个特征,例如,“碳原子与两个氢原子键合并与两个重原子键合”可能是一个特征,当含有某一特征时一个特定的指纹元素设定为1。然后再迭代识别新的特征通过查找大的圆形周围。一个指定的特征与另两个指定的特征形成更高水平的特征,相应的元素被设置。这持续到指定数量的迭代,通常为2。我们来看一下已经用ECFP特征化的数据集。

In [2]:

tasks, datasets, transformers = dc.molnet.load_tox21(featurizer='ECFP')

train_dataset, valid_dataset, test_dataset = datasets

print(train_dataset)

<DiskDataset X.shape: (6264, 1024), y.shape: (6264, 12), w.shape: (6264, 12), task_names: ['NR-AR' 'NR-AR-LBD' 'NR-AhR' ... 'SR-HSE' 'SR-MMP' 'SR-p53']>

特征数组X的形状为 (6264, 1024) 。即有训练集中有 6264个样本,每个样本的指纹长度为 1024。也要注意标签数组的形状 (6264, 12):这是个多任务数据集。Tox21包含分子毒性的信息。用12个不同的测定来查找毒性信号。数据集记录12个测定结果,每个对应一个任务。

我们也看一下权重数组。

In [3]:

train_dataset.w

Out[3]:

array([[1.0433141624730409, 1.0369942196531792, 8.53921568627451, ...,

1.060388945752303, 1.1895710249165168, 1.0700990099009902],

[1.0433141624730409, 1.0369942196531792, 1.1326397919375812, ...,

0.0, 1.1895710249165168, 1.0700990099009902],

[0.0, 0.0, 0.0, ..., 1.060388945752303, 0.0, 0.0],

...,

[0.0, 0.0, 0.0, ..., 0.0, 0.0, 0.0],

[1.0433141624730409, 1.0369942196531792, 8.53921568627451, ...,

1.060388945752303, 0.0, 0.0],

[1.0433141624730409, 1.0369942196531792, 1.1326397919375812, ...,

1.060388945752303, 1.1895710249165168, 1.0700990099009902]],

dtype=object)

注意,有些元素为0。用权重来指示缺失的数据。不是每一分子都进行了实际的测定。一个样本的权重为0或样本任务对为0将会导致它在训练和评估时被忽略。它对损失函数或其它量度无影响。大部分的权重约为1,但不是正好为1.这样可以平衡每个任务的正负样本的权重。当训练模型时,我们希望12任务中每个任务分配均衡。对于正负样本我们希望每个任务的权重均衡。否则,模型会只学习一些无毒性的样本,因些会偏向于识别无毒性的分子。

用指纹来训练一个模型

让我们来训练模型。之前的教程我们使用GraphConvModel,它是相当复杂的架构,输入复杂。由于指纹简单,只是一个固定大小的数组,我们可以使用更简单的模型。

In [4]:

model = dc.models.MultitaskClassifier(n_tasks=12, n_features=1024, layer_sizes=[1000])

多任务分类器是全链接层的简单的堆叠。这个例子中我们告诉它使用的隐藏层大小为1000。我们也告诉它每个输入有1024个特征,它要预测12个不同任务。为什不对每一个任务进行训练呢?我们可以这样做,但是事实证明为多个任务训练一个模型工作得更好。我们将在后面的教程中看到一个例子。

我们来训练和评估模型

In [5]:

import numpy as np

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))

training set score: {'roc_auc_score': 0.9550063590563469}

test set score: {'roc_auc_score': 0.7781819573695475}

对于这个简单的模型和特征来说模型的表现不错。更复杂的模型对于这个数据集的表现更好,但不会好很多。

DeepChem教程4:分子指纹相关推荐

  1. Deepchem构建基于分子指纹的神经网络模型

    '''by wufeil分子指纹在深度学习中,模型的输入往往是矩阵化的数组,甚至需要相同的长度.由于分子的原子数量不同,将分子直接转别成相同长度的数组很有难度.但,这一问题已经得到解决.当前,在深度学 ...

  2. RDKit入门教程(2)——利用RDKit获取分子指纹

    基于RDKit 获取分子指纹 分子指纹(化学指纹,Chemical Fingerprinting): 将化学分子的特征利用二进制表示,如MDL公司开发的MACCSkeys指纹. MACCSkeys共有 ...

  3. 谷本系数/相似度的计算和分子指纹

    查阅起点来自<A Deep Learning Approach to Antibiotic Discovery> Tanimoto coefficient 即谷本系数的计算公式是: T s ...

  4. RDKit | 基于分子指纹可视化化学空间

    根据化学结构可视化化合物空间 方法 计算分子指纹 为每种化合物生成一个指纹并减小其尺寸,以便可以将其绘制在平面上.根据相似性原理,"相似的化合物具有相似的性质",具有相似结构和性质 ...

  5. 薛定谔教程--Glide分子对接 | Ligand Docking

    薛定谔教程–Glide分子对接 | Ligand Docking Ligand Docking功能模块 Ligands Receptor grid:From file 上传受体文件形式 Use lig ...

  6. RDKit|分子指纹提取、相似性比较及应用

    文章目录 一.分子指纹提取 1.Topological Fingerprints 2.MACCS 3.Atom Pairs and Topological Torsions 4.Morgan Fing ...

  7. RDKit|摩根分子指纹计算、提取与可视化

    文章目录 一.摩根分子指纹计算 1.简介 2.SparseIntVects 3.ExplicitBitVects 4.FCFPs 5.更多泛化 二.摩根分子指纹提取 1.提取方法一 2.提取方法二 三 ...

  8. rdkit分子指纹生成;相似性检索

    1.分子指纹生成 常见生成的方法: a.smiles2fp simles转分子指纹,支持morgan: Morgan fingerprint. * maccs: MACCS keys. * rdkit ...

  9. RDKit | 基于分子指纹的分子相似性

    分子相似性: 相似性原理(similar property principle)指出,总体相似的分子应具有相似的生物活性. 相似性评估 化合物的指纹对于使用计算机考虑化合物的相似性是必需的.已经提出了 ...

最新文章

  1. 12 个超燃的 IntelliJ IDEA 插件!
  2. 希尔排序 - 数据结构和算法91
  3. 线性筛素数(欧拉筛)
  4. 主键和索引哪个快_数据库两大神器【索引和锁】
  5. C++ 11 创建和使用共享 weak_ptr
  6. colab从CPU切换到GPU以及配置查看
  7. centos7中无法确定光盘权限怎么办_图解KVM安装CentOS7.6操作系统
  8. 通读AFN①--从创建manager到数据解析完毕
  9. Qt4小技巧——QTextEdit自动滚屏
  10. Mysql数据库重命名
  11. Java 8 API Stream让List操作更便捷
  12. VMM2012应用指南之11-将虚拟机转换为模板
  13. ELK下Elasticsearch优化
  14. 【坐在马桶上看算法】算法3:最常用的排序——快速排序
  15. Net平台下的Mock工具---Rhino Mocks
  16. ansys大变形开关要不要打开_ANSYS与ABAQUS比较之实例7橡胶垫圈的受压分析
  17. 推荐一款固定资产管理软件
  18. 数字图像处理 冈萨雷斯 第三版 书中配套图片下载地址
  19. 处理IOStream异常
  20. 我解决了net framework 4安装失败,提示找不到指定文件的问题

热门文章

  1. 网易互娱人工智能工程师笔试题
  2. 2019秋季PAT甲级考试总结:努力+策略+运气
  3. Effective Modern C++ 条款1 理解模板类型推断
  4. 庞加莱 (Jules Henri Poincaré)
  5. Proxmox VE(PVE)连接WiFi及一些配置
  6. unity中请问如何点击一下image(image加了button项)变红色再点击一下按钮变成绿色。一直这么循环变色?急求,望大佬指点emmm。c#代码
  7. [转帖]浪潮信息最大供应商英特尔(Intel):2018 年采购额 145.76 亿元
  8. C语言--汉诺塔小游戏
  9. Kmeans聚类及图像分割
  10. 创业公司如何分配股份与期权