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

下载全文请到www.data-vision.net,技术联系电话13712566524

猜你喜欢

转载自blog.csdn.net/lishaoan77/article/details/114334147
今日推荐