Deepchem聚焦化学领域的机器学习库 101


'''

by wufeil

Deepchem教程101

'''

'''
    Deepchem聚焦化学领域的机器学习库
    包含:
        数据的数据集、预处理、转换、分割、学习模块
        可以使用scikit-learn,tensorflow, XGboost等框架,也开始实验使用pytorch, JAX。

    下面的例子将会说明这一点
'''

import deepchem as dc
import numpy as np

N_samples = 50
n_features = 10

X = np.random.rand(N_samples, n_features)
y = np.random.rand(N_samples)

dataset = dc.data.NumpyDataset(X, y)  #从内存中存储数据到dc里面
print(dataset.X.shape)
print(dataset.y.shape)


'''

“ Featurizer”是一段代码,它将原始输入数据转换为适合机器学习的处理形式。
使用了环形指纹并将SMILES转换为ECFP。 
ECFP是一种指纹,它是由化学结构信息制成的位向量(稀疏向量),我们可以将其用作各种模型的输入。

'''

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]
featurizer = dc.feat.CircularFingerprint(size=1024)   #将smiles转换为fingerprint,长度为1024的转化器CircularFingerprint
ecfp = featurizer.featurize(smiles) #转化
print(ecfp.shape)
dataset = dc.data.NumpyDataset(X=ecfp, y=np.array(properties)) #组合成为dataset
print(len(dataset))

''''
CSV格式

先将上述的smiles和properties保存成csv文件,然后读取csv文件内的内容
'''

import pandas as pd
df = pd.DataFrame(list(zip(smiles, properties)), columns=['SMILES', 'property'])
import tempfile
df.to_csv('test.csv')
featurizer = dc.feat.CircularFingerprint(size=1024) #特征转换器
loader = dc.data.CSVLoader(['property'], feature_field='SMILES', featurizer=featurizer) #CSV加载器
dataset = loader.create_dataset('test.csv')
print(len(dataset))

'''
数据分割
'''

splitter = dc.splits.RandomSplitter()
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)
print(len(train_dataset))
print(len(test_dataset))
print(len(valid_dataset))
print(valid_dataset, valid_dataset.X, valid_dataset.y)



'''
模型的训练与评估, 与sklearn很像
deepchem封装了一些sklearn及其他的一些机器学习的模块,以便更容易的调用
这里使用随机森林
'''
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor()
model = dc.models.SklearnModel(model=rf) #当然,也可以换成二叉树、逻辑回归、神经网络等模型
model.fit(train_dataset)
valid_preds = model.predict(valid_dataset)
print(valid_dataset, valid_preds)
test_preds = model.predict(test_dataset)
print(test_dataset, test_preds)

'''
模型评估
'''
metric = dc.metrics.Metric(dc.metrics.mae_score) #除了mae,也可以添加其他损失
train_score = model.evaluate(train_dataset, [metric])
valid_score = model.evaluate(valid_dataset, [metric])
test_score = model.evaluate(test_dataset, [metric])
print('{},{},{}'.format(train_score, test_score, valid_score))


总的来说,Deepchem与sklearn等还是很像的,在sklearn的基础上可以很好的使用Deepchem也可以做成更多的调整。

重要的是,Deepchem里面提供了化学结构数据转为机器学习等需要的数据(主要是矩阵数据)。

更为重要的是,Deepchem提供了较多的化学数据,可以作为我们模型测试的基础

更多内容可以:https://deepchem.readthedocs.io/en/latest/get_started/tutorials.html
看原文档才是最好的学习方式

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值