Deepchem-Dataset数据结构理解

写在前面

DeepChem是一个用于科研的机器学习库。DeepChem最初专注于化学分子的研究,但随着版本更迭,现在其已能更广泛地支持所有类型的科学应用。我觉得这个模块做的比较好的几点在于:

  • 能够方便地将化学分子用统一长度的向量或矩阵表示,便于机器学习数据输入;
  • 提供方便使用的机器学习接口,你可以不必专门学习机器学习库(如Tensorflow 、Pytorch等);
  • 封装化程度高,上手容易。但对于需要个性化参数调整的需求就不是很方便了,这个时候就需要查阅源码,在理解的基础上进行调整。

从本期开始,我将从以下几个方面分期介绍,算是记录一下自己的学习过程吧。

  • Dataset数据结构理解;
  • Featurizer分类;
  • Dataset手动创建及读取;
  • 机器学习Model搭建;
  • protein-ligand亲和力学习模型搭建。

Dataset数据结构理解

在理解Dataset之前,有必要介绍一下deepchem内置的数据集。

  1. 导入模块
import deepchem as dc  #导入模块
  1. 内置数据
    Deepchem模块本身带有十分丰富的示例数据,它们都存放在dc.molnet方法下, 包含各种数据类型:

  2. 载入内置数据

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

从读入内置数据集的命令可以推知,内置数据集由三部分组成,分别是task、datasets、transformers。
想象一下,我们手头上有一个如下图所示的数据集

  • 可见每个化学结构对应一个property(属性),这个值可以时诸如抑制率、溶解度、亲和力等数据。该表格只有一个属性值时,task数目为1,如果有两个属性值,则task数目为2,以此类推。
  • dataset是deepchem读入原始数据后转化为的一种可以直接作为机器学习模型读入数据的形式。
  • transformer表示原始数据在向dataset数据转换过程中进行的数据转换。比如我们需要训练的数据分布极不合理,那么就需要一种用于数据均衡的方法平衡一下数据,这个我们后面会详细讲述。

这其中尤其要数dataset最为重要,对于内置数据集而言,datasets已经被预先拆分成了训练数据集(train_dataset)、验证数据集(valid_dataset)、测试数据集(test_dataset),可以通过下条语句获取各自的值:

train_dataset, valid_dataset, test_dataset = datasets

我们随便输出一个看看这些子集又是什么结构:

print(test_dataset)
#返回内容如下所示
#<DiskDataset X.shape: (113,), y.shape: (113, 1), w.shape: (113, 1), ids: ['c1cc2ccc3cccc4ccc(c1)c2c34' 'Cc1cc(=O)[nH]c(=S)[nH]1' ... 'Cc1occc1C(=O)Nc2ccccc2'], task_names: ['measured log solubility in mols per litre']>

(上块代码框内的注释部分)可以看出这个dataset由4组数据外加一个注释信息组成:

  • X:这组数据记录了每隔化学分子的特征值或者说描述符。因为机器学习不可能直接读取化学分子,我们需要使用特征生成器(Featurizer)将其转变为相同长度的向量或矩阵。特征生成器有好几种类型,后面我们会详谈。该数据集返回的X数据维度为(113,)这是个一维数据,113表示分子个数。
  • y: 这组数据表示每个化学分子的属性(如抑制率、溶解度等)。可以是连续的数值,也可以是分类的数值(即yes or no,不过要用数字代替)。该数据集返回的y数据维度为(113,1),这是个二维数据,113表示分子个数;1表示输入的分子属性种类数,也对应前面我们提到的task的数目。
  • w: 这组数据表示每隔化学分子的属性值在深度学习是所占的比重。实际使用中我们拿来训练的分子属性值质量良莠不齐,为了避免一些坏的数据在训练过程中产生太多的坏影响,相应的我们需要减小这些数据在训练时的比重/权重。若不指定数值,则默认均为1。
  • ids: 这组数据是列表的形式,每一个元素对应一个分子的smile式。
  • task_names: 类似于一种注释信息,是个列表形式,记录每个化学分子属性的详细信息,和task数目对应。比如此例种它描述了化学分子属性是测量的分子溶解度,单位:mol/L。

扫描下方二维码,关注公众号获得更多相关内容
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

药研猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值