Deepchem-构建个人Dataset

Deepchem-构建个人Dataset,第1张

个人Dataset构建
  • Numpy构建Dataset
import deepchem as dc
import numpy as np

smiles = [
  'O=Cc1ccc(O)c(OC)c1',
  'CN1CCC[C@H]1c2cccnc2',
  'C1CCCCC1',
  'c1ccccc1',
  'CC(=O)O',
]

properties = [0.4, -1.5, 3.2, -0.2, 1.7]
#初始化特征生成器(自定义生成的特征向量长度为1024)
featurizer = dc.feat.CircularFingerprint(size=1024) 
feature = featurizer.featurize(smiles)    
dataset = dc.data.NumpyDataset(X=feature, y=np.array(properties))
  • 从csv中读入

先事先准备好一份如下所示的csv文件,命名为“test.csv”:
注意:property列可以有不止一个,本例的csv文件每个小分子对应两个property。

#初始化特征生成器(自定义生成的特征向量长度为1024)
featurizer = dc.feat.CircularFingerprint(size=1024)
#初始化loader
loader = dc.data.CSVLoader(tasks=["property1", "property2"], feature_field="SMILES", featurizer=featurizer)
#读入csv文件
dataset = loader.create_dataset("test.csv")
print(dataset)
#返回内容如下所示:
#

如上所示:关键一步是CSVLoader所在行。在此函数里:

  • tasks等于一个列表。列表中每个元素对应csv表格中每个分子对应的属性列名,有几种属性,就在列表中填几种。
  • feature_field等于分子结构所在的列名,是需要生成特征(feature)的区域。
  • featurizer等于上一步初始化的特征生成(提取)器。

此外,从最后dataset返回结果可以看出,权重项(w)以及ID项(ids)在未指定的情况下可以自动生成。因此在准备数据时只要保证分子结构和分子属性信息完整即可。

Dataset拆分子集

一般情况下我们将训练数据转成Dataset后还需要对其进行拆分。拆分成train_dataset、valid_dataset、test_dataset。从字面上可以理解train_dataset是用来机器学习的训练数据,valid_dataset是机器学习训练过程中验证训练模型准确性的,test_dataset用来检验训练好的模型准确度。

#定义一个拆分”器“
splitter = dc.splits.RandomSplitter()
#拆分数据集中为训练集,验证集,测试集,比例为3:1:1
train_dataset, valid_dataset, test_dataset = splitter.train_valid_test_split(dataset=dataset, frac_train=0.6, frac_valid=0.2, frac_test=0.2)

上面我们定义拆分”器“使用的方法是RandomSplitter,除了这种方法之外还包括:RandomStratifiedSplitter、ScaffoldSplitter、ButinaSplitter、SpecifiedSplitter。那么它们又具体按照什么标准拆分数据集的呢?

  • RandomSplitter:这是一种最常见的拆分数据集方法,它将Dataset随机拆分train_dataset、valid_dataset、test_dataset
  • RandomStratifiedSplitter: 这种方法是从第一种拆分方法发展而来。想象一下如果你手头里有一份化合物是否有活性的数据,令人头疼的是这份数据中的化学物90%是无活性的,有活性的只占10%,如果还是按照第一种随机拆分的做法做就会很容易出现拆分数据结构分布不均的现象。可能出现的一种极端情况是:训练数据中全是阴性结果。可想而知用这样的数据训练出来的模型一定不准确。这种拆分方法保证了在train_data、valid_data、test_data中阳性、阴性结果在各拆分数据中所占比例保持和总样本比例一致。
  • ScaffoldSplitter: 根据化学物分子是否拥有相同分子骨架而拆分数据。
  • ButinaSplitter: 根据化合物分子结构相似性进行数据拆分。
  • SpecifiedSplitter: 根据自定义标准进行数据拆分。

其实除第一种拆分方法外,它们的底层逻辑是一样的,都是避免了拆分的子集中数据分布不均。具体做法是按照不同的规则(property类别、以分子骨架相似性规则、以分子相似性规则、自定义规则)分类,在分开的各类中各自按照相同的比例抽取数据共同组成新的train_dataset、valid_dataset、test_dataset(如下图所示)。

扫描下方二维码,关注公众号获得更多实用干货:

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/942017.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-17
下一篇 2022-05-17

发表评论

登录后才能评论

评论列表(0条)

保存