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


'''

by wufeil

分子指纹

在深度学习中,模型的输入往往是矩阵化的数组,甚至需要相同的长度。

由于分子的原子数量不同,将分子直接转别成相同长度的数组很有难度。但,这一问题已经得到解决。

当前,在深度学习中,表示化学结构的方法有很多种,这里要介绍的分子指纹是其中较为简单的一种,经常用于表示有药性的分子。

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

DeepChem支持一种特殊类型的指纹,称为“扩展连接指纹”或简称“ ECFP”。
它们有时也称为“圆形指纹”。 ECFP算法首先根据原子的直接特性和键对其进行分类。 每个独特的模式都是一个功能。
例如,“与两个氢和两个重原子键合的碳原子”将是一个特征,并且对于包含该特征的任何分子,指纹的特定元素均设置为1。
然后,通过查看较大的圆形邻域来迭代地标识新特征。

与其他两个特定特征绑定的一个特定特征变为更高级别的特征,并且为包含该特征的任何分子设置了相应的元素。
这会持续进行固定数量的迭代,通常是两次。

因此,分子指纹实质上是一种将分子特征化的方法,提取特征的方法是人为认定的。

'''

import deepchem as dc
print(dc.__version__)


'''
加载数据
通过featurizer参数,将加载的特征为:ECFP, 即用ECFP表示分子
需要一定的数据加载时间
'''
tasks, datasets, transformer = dc.molnet.load_chembl(featurizer='ECFP')
train_set, valid_set, test_set = datasets
print(train_set)
print(tasks)

'''
另外一个数据集
'''
tasks, datasets, transformer = dc.molnet.load_tox21(featurizer='ECFP')
train_set, valid_set, test_set = datasets
print(train_set)
print(tasks)


'''
分子使用GraphConv来表示
'''
tasks_1, datasets_1, transformer_1 = dc.molnet.load_tox21(featurizer='GraphConv')
train_set_1, valid_set_1, test_set_1 = datasets_1
print(train_set)
print(tasks_1)


'''
查看数据

train_set.itersamples() —— 逐条数据读取

train_set.X, trian_set.y, train_set.w, train_set.ids —— 分别为数据集的特征,标签,样本权重,ID(识别号)
'''
for sample in train_set.itersamples():
    print(list(sample))


'''
接下来尝试将特征化的tox21数据集进行模型的训练,使用deepchem中的方法

首先,查看数据集中特征的形状,以便正确设定模型的参数 —— train_set.get_shape()
然后,引用deepchem中的模型 —— dc.models.MultitaskClassifier
fit之后,进行预测
'''
print(train_set.get_shape())
print(len(tasks))
model = dc.models.MultitaskClassifier(n_tasks=12, n_features=1024, layer_sizes=[1000])
model.fit(train_set, nb_epoch=10)
metric=dc.metrics.Metric(dc.metrics.roc_auc_score)

print('training set score:', model.evaluate(train_set, [metric], transformer))
print('test_set score:', model.evaluate( test_set,[metric], transformer))
print('valid_set score:', model.evaluate(valid_set,[metric], transformer))

'''
总的来看,deepchem封装了一些简单的模型,并提供了简单调用的API接口,以便快速的使用
模型的构建和数据的预处理,较为简单。
当然,模型也很简单。
'''

你可能感兴趣的:(图神经网络,药物设计,人工智能,深度学习,机器学习,python)