前面的几节,你已经学习了如何用DeepChem 训练模型解决不同的问题。但是我们还没有真正的学习模型的可解释性问题。
建模时我们通常要问一些问题—模型工作得好不好?我们为什么要相信模型?我作为一个数据科学家的回答是,“因为我们有明显的证据证实模型对于手头的测试集是切合实际的“。但通常这不足于说服领域专家。
LIME 是一个能帮助你解决这一问题的工具。它用局部的特征空间扰动来确定特征的重要性。本教程,你将学习如何使用LIME和DeepChem来解释我们的模型学习到了什么。
如果这个工具以人类可理解的方式来处理图像那它可以处理分子吗?本教程我们将学习如何用LIME解释固定长度的特征化模型。
创建模型
我们加载ECFP特征化的Tox21数据集。回顾一下特征化是如何工作的。它识别分子中的小片断,然后设置输出向为1以表示分子中某个片断的存在。
In [1]:
import deepchem as dc
n_features = 1024
tasks, datasets, transformers = dc.molnet.load_tox21(featurization='ecfp')
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, nb_epoch=50)
Out[2]:
0.1333492088317871
我们用训练集和测试集评估模型以理解它的准确度。我们用ROC-AUC作为量度。
In [3]:
import numpy as np
metric = dc.metrics.Metric(dc.metrics.roc_auc_score, np.mean)