DeepChem教程1生命科学深度学习的基础工具

DeepChem教程1: 生命科学深度学习的基础工具

欢迎阅读DeepChem针对生命科学领域深度学习的引导性教程。本系列教程将一步一步指导你了解生命科学领域深度学习所需的工具和技术。

我们从基础开始,假定你是机器学习和生命科学领域的新手,构建你从事生命科学的有意义的工作所需的工具和技术仓库。

范围:本教程包括构建生命科学领域深度学习系统所需的机器学习和数据处理。

为什么需要这个DeepChem教程?

1) 职业生涯的提升:当今在生命科学领域使用AI是火爆的行业。大的制药公司和生物技术公司都在组建AI部门。学习和精通DeepChem将带你进入这一领域并为你的职业生涯作准备。

2) 人道主义的考虑:疾病是人类痛苦的古老根源。自有人类文明以来,人类就饱受病原,癌症,神经疾病之苦。最近几个世纪的伟大成就之一就是对某些疾病的有效治疗。通过撑握本教程的技能,你可以站有巨人的肩膀上开发新药。

3)降低药物的成本:当今只有一小部分的专家能很好的撑握新药开发的艺术。通过开源的新药发现工具的发展,你可以普及这些技能让更多的竞争者参与新药发现。增加竟争自然会降低药物的成本。

前提

本系列教程假定你熟悉Python数据科学生态。我们假定你已熟悉Numpy, Pandas和TensorFlow。我们将通过都过教程简单的回顾一下这些库,所以不用担心你还不是专家。

设置

首先要安装和运行DeepChem。我们推荐用Google Colab来运行本系列教程。你可以执行下以命令以将DeepChem安装到你的colab记事本中。注意这将花费5分钟来运行你的实例。

!curl -Lo conda_installer.py

https://raw.githubusercontent.com/deepchem/deepchem/master/scripts/colab_install.py

import conda_installer

conda_installer.install()

!/root/miniconda/bin/conda info -e

!pip install --pre deepchem

当然你也可以在本地运行教程,如果你喜欢。这种情况下, 不要运行上面的命令,因为将要下载和安装Anaconda到你的本地机器。

两种情况下,你都可以导入deepchem包进行偿试。

In [1]:

import deepchem as dc

dc.__version__

Out[1]:

'2.4.0-rc1.dev'

用DeepChem训练你的模型:第一个例子

深度学习可以解决许多问题目,但基本的工作流程都是相似的。以下是典型的步骤:

选择你要用来训练模型的数据(或者生成数据集,如果没有合适的数据集的话)。

创建模型。

用独立的测试集来评估模型工作的好坏。

使用模型对新的数据进行预测。

使用DeepChem,以上每个步骤只需要一两行Python代码。本教程我们将运行一下简单的例子来展示一下解决实际科学问题的完整流程。

我们要解决的问题是对于给定的化学式我们来预测小分子化合物的溶解度。

溶解度是药物开发的一个重要特性:如果申请的药物的溶解度不足,病人的血液中很可能没有足够的药物来达到疗效。

首先,我们要有一个真实的分子测定的溶解度数据集。DeepChem的核心组成之一是MoleculeNet,它是多个化学和分子的数据集的集合。本教程我们使用Delaney溶解度数据集。

In [2]:

tasks, datasets, transformers = dc.molnet.load_delaney(featurizer='GraphConv')

train_dataset, valid_dataset, test_dataset = datasets

这行代码我现在不过多解释。后面的教程有很多相似的例子。我要提醒你两个细节。首先,注意传递给load_delaney() 函数的特征化器( featurizer)参数。

分子可以用多种方法表示。因此我们要告诉函数我们要用的表示方法,或者用更术语化的语言来说,如何“特征”化数据。第二点是,我们实际上得到了三个数据集:训练集、验证集、测试集。这些在标准的深度学习工作流程中都对应不同的函数。

现在我们有了数据,下一步是创建模型。我们使用一个特殊的模型是"graph convolutional network",或者简称"graphconv" 。

In [3]:

model = dc.models.GraphConvModel(n_tasks=1, mode='regression', dropout=0.2)

对于这行代码我还是不多解释。后面的教程有更多的关于GraphConvModel以及其它DeepChem提供的模型的信息。

我们需要用数据集来训练模型。我们简单的提供数据集,并指示训练要进行多少个 epochs(即,要经过多少次完整的数据传递)

In [4]:

model.fit(train_dataset, nb_epoch=100)

/Users/peastman/miniconda3/envs/tf2/lib/python3.7/site-packages/tensorflow/python/framework/indexed_slices.py:434: UserWarning: Converting sparse IndexedSlices to a dense Tensor of unknown shape. This may consume a large amount of memory.

  "Converting sparse IndexedSlices to a dense Tensor of unknown shape. "

Out[4]:

0.1147727108001709

如果一切顺利,我们就得到了一个完整的训练模型了!我们得到了吗?要知道结果,我们必须用测试集来评估模型。

我们通过评估量度的选择来实现,对模型调用evaluate()函数。对于这个例子, 我们使用皮尔逊相关系数,也称为r2,作为我们的量度。我们可以拿它来评估训练集和测试集。

In [5]:

metric = dc.metrics.Metric(dc.metrics.pearson_r2_score)

print("Training set score:", model.evaluate(train_dataset, [metric], transformers))

print("Test set score:", model.evaluate(test_dataset, [metric], transformers))

Training set score: {'pearson_r2_score': 0.8914309123616354}

Test set score: {'pearson_r2_score': 0.7744246373275885}

注意训练集的分值比测试集高。训练数据的模型表现通常比其它独立的数据好。这叫"overfitting",这就是你要用独立的测试集来评估模型的重要原因。

我们的模型对于测试集的表现还可以更好。为了比较,一个模型的相关系数为0将产生完全随机的输出,如果模型的相关系数为1的话,就会很好的预测结果。我们的模型表现尚可,所以我们可以对其它我们关心的分子进行预测了。

由于仅作为教程,我们不拿其它的分子来预测了,我们用测试集中的前10个分子来预测。每个分子我们输出化学结构(以SMILES字表示和预测的溶解度。

In [6]:

solubilities = model.predict_on_batch(test_dataset.X[:10])

for molecule, solubility in zip(test_dataset.ids, solubilities):

    print(solubility, molecule)

[-1.4806377] C1c2ccccc2c3ccc4ccccc4c13

[0.37774816] COc1ccccc1Cl

[-1.3225354] COP(=S)(OC)Oc1cc(Cl)c(Br)cc1Cl

[-0.590009] ClC(Cl)CC(=O)NC2=C(Cl)C(=O)c1ccccc1C2=O

[-2.0383604] ClC(Cl)C(c1ccc(Cl)cc1)c2ccc(Cl)cc2

[2.0883522] COC(=O)C=C

[-0.25627953] CN(C)C(=O)Nc2ccc(Oc1ccc(Cl)cc1)cc2

[0.97384584] N(=Nc1ccccc1)c2ccccc2

[-0.40858203] CC(C)c1ccc(C)cc1

[1.1107407] Oc1c(Cl)cccc1Cl

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值