
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文件,命名为“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。那么它们又具体按照什么标准拆分数据集的呢?
其实除第一种拆分方法外,它们的底层逻辑是一样的,都是避免了拆分的子集中数据分布不均。具体做法是按照不同的规则(property类别、以分子骨架相似性规则、以分子相似性规则、自定义规则)分类,在分开的各类中各自按照相同的比例抽取数据共同组成新的train_dataset、valid_dataset、test_dataset(如下图所示)。
扫描下方二维码,关注公众号获得更多实用干货: