教程11:实施多任务学习"/>
DeepChem教程11:实施多任务学习
这个记事本我们来学习用MUV [1]创建多任务模型。其目的是展示多任务学习如何在小量或不平衡数据时提高性能。
MUV 数据集是分子设计竞赛的标杆,共有17个靶点,每个靶点只有少数的几个活性化合物。共有93,087个化合物,但是每个任务都只有不超过30个活性化合物,有些更少。用这么少的正样本训练模型是非常有挑战的。多任务模型通过训练一次性预测所有不同的靶点模型解决这个问题。如果特征对于预测某个任务有用,通常对于预测其它几个任务也有用。每增加一个任务就使得学习重要的特征变得容易一些,它可以提高其它任务的性能。
为了开始,我们加载MUV数据集。MoleculeNet加载器自动分割训练集、验证集、测试集。由于只有少量阳性样本,我们使用分层分割以保证测试集有足够的阳性样本来进行评估。
In [1]:
import deepchem as dc
import numpy as np
tasks, datasets, transformers = dc.molnet.load_muv(split='stratified')
train_dataset, valid_dataset, test_dataset = datasets
现在我们用它来训练模型。我们使用MultitaskClassifier,它是多个全链接层的堆叠。
In [2]:
n_tasks = len(tasks)
n_features = train_dataset.get_data_shape()[0]
model = dc.models.MultitaskClassifier(n_tasks, n_features)
model.fit(train_dataset)
Out[2]:
0.0004961589723825455
现在我们来看一下它对测试集的表现。我们循环17个任务并计算每个任务的ROC AUC。
In [3]:
y_true = test_dataset.y
y_pred = model.predict(test_dataset)
metric = dc.metrics.roc_auc_score
for i in range(n_tasks):
score = metric(dc.metrics.to_one_hot(y_true[:,i]), y_pred[:,i])
print(tasks[i], score)
MUV-466 0.9207684040838259
MUV-548 0.7480655561526062
MUV-600 0.9927995701235895
MUV-644 0.9974207415368082
MUV-652 0.7823481998925309
MUV-689 0.6636843990686011
MUV-692 0.6319093677234462
MUV-712 0.7787838079885365
MUV-713 0.7910711087229088
MUV-733 0.4401307540748701
MUV-737 0.34679383843811573
MUV-810 0.9564571019165323
MUV-832 0.9991044241447251
MUV-846 0.7519881783987103
MUV-852 0.8516747268493642
MUV-858 0.5906591438294824
MUV-859 0.5962954008166774
不错!记得随机猜测将产生ROC AUC分值为0.5,很好的预测器的分值为1。大部分的任务比随机猜测好一些,其中有些超过了0.9。
更多推荐
DeepChem教程11:实施多任务学习
发布评论