Deepchem数据类型——如何将分子输入到神经网络模型中


'''

by wufeil

deepchem教程2

Tutorial 2: Working With Datasets

deepchem内置数据集及其简单建模

'''

import deepchem as dc
print(dc.__version__)

'''
加载seepchem内置数据
'''
tasks, datasets, transformers = dc.molnet.load_delaney(featurizer='GraphConv')
train_dataset, valid_dataset, test_dataset = datasets

'''
查看数据集的信息:

关于数据类型,deepchem有三种数据类型:
    1.数据类型为DiskDataset对象。DiskDataset是已保存到磁盘的数据集。数据的存储方式可以有效地进行访问,
    即使数据总量远远大于计算机的内存也是如此。
    2.NumpyDataset是一个内存中数据集,用于保存NumPy数组中的所有数据。当处理可以完全容纳在内存中的中小
    型数据集时,它是一个有用的工具。
    3.ImageDataset是一个更专门的类,可将部分或全部数据存储在磁盘上的图像文件中。当使用以图像作为输入或
    输出的模型时,此功能很有用。

这里的train_dataset为DiskDataset类型。

每个数据集都存储一个样本列表。 粗略地说,样本是单个数据点。 在这种情况下,每个样本都是一个分子。 在其他数据
集中,样本可能对应于实验分析,细胞系,图像或许多其他事物。 

对于每个样本,数据集都存储以下内容。 
    特征:X 大写
    标签:y
    权重:w 用来表示某些数据值比其他数据值更重要。 在以后的教程中,我们将看到有关此用法的示例。
    ID: ids, 用于标记样本。 有时它只是一个整数索引,但是在此数据集中,ID是描述该分子的SMILES字符串。
  
'''
print(train_dataset)

'''
查看数据集的内容, get_shape()发现数据集中有
'''
print(train_dataset.get_shape())

print(train_dataset.ids)
for X, y, w, ids in test_dataset.itersamples():
    '''
    查看每一条数据内容
    '''
    print(X, y, w, ids)

'''
数据集转化为dataframe的数据类型有些问题,to_dataframe()函数有问题,不知道是不是版本问题,请尝试2.4版本
dataset_test = test_dataset.to_dataframe()
print(dataset_test)
'''




'''

创建自己的数据集,一 NumpyDataset为例

'''

import numpy as np

X = np.random.random((10,5)) #10个样本,5个特征
y = np.random.random((10, 2)) #多任务模型数据,2个标签

dataset_1 = dc.data.NumpyDataset(X=X, y=y)

X2 = np.random.random((15,5)) #10个样本,5个特征
y2 = np.random.random((15, 2)) #多任务模型数据,2个标签

dataset_2 = dc.data.NumpyDataset(X=X2, y=y2)

print(dataset_1)
print(dataset_1.get_shape())
print(dataset_2.get_shape())


'''
合并两个NumpyDataset
'''
dataset_3 = dc.data.NumpyDataset.merge([dataset_2, dataset_1])
print(dataset_3.get_shape())

'''

如何创建DiskDataset? 如果您的数据位于NumPy数组中,
则可以调用DiskDataset.from_numpy()将其保存到磁盘。 
由于这只是一个教程,我们将其保存到一个临时目录中。


'''

import tempfile

with tempfile.TemporaryDirectory() as data_dir:
    disk_dataset = dc.data.DiskDataset.from_numpy(X=X, y=y, data_dir=data_dir)
    print(disk_dataset)


'''
Deepchem的数据类型类型

deepchem有四个数据类:
    Dataset, NumpyDataset, DiskDataset, ImageDataset


    1. Dataset 
        dc.data.Dataset类是所有数据集的抽象父类。
        Dataset类绝对不能直接初始化,而应包含许多有用的方法实现。

        Dataset类的目标是最大程度地与机器学习数据集的其他常见表示形式进行互操作。
        因此,我们提供了从数据集对象到Pandas数据集,tensorflow数据集和PyTorch数据集的相互转换方法。
        
    2. NumpyDataset
    
        NumpyDataset(X: numpy.ndarray, y: Optional[numpy.ndarray] = None, 
            w: Optional[numpy.ndarray] = None, ids: Optional[numpy.ndarray] = None, 
            n_tasks: int = 1)
            
        数据集的此子类将数组X,y,w,ids作为numpy数组存储在内存中。 
        这使得构造NumpyDataset对象非常容易。
        
        (1) NumpyDataset初始化:
            __init__(X: numpy.ndarray, y: Optional[numpy.ndarray] = None, 
                w: Optional[numpy.ndarray] = None, ids: Optional[numpy.ndarray] = None, 
                n_tasks: int = 1)
            
            初始化代码:
                dataset = NumpyDataset(X=np.random.rand(5, 3), 
                    y=np.random.rand(5,), ids=np.arange(5)) 
                    
        (2) 属性:
            X —— 获取X向量矩阵(特征)
            y —— 标签矩阵
            w —— 样本权重
            ids —— ID
            
        (3)方法:
            get_shape() —— 获取数据集的形状,返回四个元组,分别为X,y,w和ids数组的形状。
            
            get_task_names() —— 获取数据集相对应的任务名称。
            
            iterbatches(batch_size: Optional[int] = None, epochs: int = 1, 
                deterministic: bool = False, pad_batches: bool = False) —— 返回可迭代的批次。
                
            itersamples() —— 返回可迭代的对象。
               
            transform(transformer: transformers.Transformer, **args) —— 通过对该数据集中的每
                个样本应用转换来构造新数据集。例如:SMILES转化为GraphConv数据类型, 这个很重要。
                
            select(indices: Sequence[int], select_dir: Optional[str] = None) —— 从数据集中
                选择样本。
            
            make_pytorch_dataset(epochs: int = 1, deterministic: bool = False, 
                batch_size: Optional[int] = None) —— 创建一个torch.utils.data.IterableDataset,
                以对该数据集中的数据进行迭代。 数据集的迭代器返回的每个值都是(X,y,w,id)的元组,其中包含
                一个批次的数据,如果batch_size为None,则包含单个样本的数据。
                
            from_DiskDataset(ds: deepchem.data.datasets.DiskDataset) —— 转化DiskDataset为
                NumpyDataset。
                
            to_json(self, fname: str) —— 保存json文件
            
            from_json(fname: str) —— 从json文件中加载NumpyDataset
            
            merge(datasets: Sequence[deepchem.data.datasets.Dataset]) —— 合并多个NumpyDataset   
    
    3. DiskDataset
    4. ImageDataset
    
        DiskDataset和ImageDataset与NumpyDataset类似,
        也可参照:https://deepchem.readthedocs.io/en/latest/api_reference/datasets.html#diskdataset        
    
    '''

最后,回归正题:如何将分子输入到神经网络模型中?
首先,你的分子可以是保存在SDF文件,也可以是CSV文件,然后利用Deepchem的DataLoader加载成数据集,可以是DiskdictDataset, NumpyDataset, ImageDataset

为了适应图神经网络,卷积神经网络,要利用DiskdictDataset, NumpyDataset, ImageDataset中的transforms方法转换即可

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 是的,有很多和 DeepEC 类似的神经网络框架。常见的有 TensorFlowPyTorch,Caffe2,MXNet 等。这些框架都可以用来构建和训练神经网络模型。它们都有自己的优缺点,可以根据具体的需求来选择使用。 ### 回答2: 是的,我知道一些与DeepEC类似的神经网络框架。其最知名的是DeepChemDeepBind。 DeepChem是一个开源的Python库,用于分子计算和药物发现的深度学习。它提供了丰富的工具和模型,用于处理化学信息和进行药物发现相关的任务,例如分子生成、分子属性预测和药物筛选等。 另一个类似的框架是DeepBind,它专注于分析DNA和RNA序列以及蛋白质-核酸相互作用。DeepBind的目标是通过深度学习模型来预测蛋白质结合到DNA或RNA上的位置,从而帮助研究基因表达、转录因子调控和基因突变等生物学过程。 这些神经网络框架与DeepEC相似,都基于深度学习算法,用于处理特定领域的数据和任务。它们提供了丰富的模型和工具,使研究人员可以进行更精确和高效的分析和预测。 ### 回答3: 是的,我了解有一些和DeepEC类似的神经网络框架。DeepEC是一种用于酶的功能预测的神经网络模型,它利用蛋白质的序列和结构信息来预测其酶的功能。类似的神经网络框架包括EC2GO和PROFEAT。 EC2GO是一种用于酶的功能注释的神经网络模型。它根据酶的氨基酸序列和结构信息,利用深度学习算法来预测酶的功能并进行功能注释。该模型可以将酶的基因信息与基因本体(Gene Ontology,GO)数据库的功能标签进行关联,帮助研究人员更好地理解酶的功能。 PROFEAT也是一种用于酶的功能预测的神经网络框架。它基于蛋白质的物理化学性质和结构信息,利用神经网络算法来预测酶的功能。PROFEAT可以通过对蛋白质的描述符进行深度学习,提取蛋白质的结构和功能信息,并进行功能预测。 这些类似的神经网络框架都针对酶的功能进行预测和注释,在利用蛋白质序列和结构信息进行深度学习的基础上,提供了一种高效准确的酶功能研究方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值