DeepChem Sweetlead 示例全解析基于 Tox21 与 SIDER 模型的药物安全性交叉预测【免费下载链接】deepchemDemocratizing Deep-Learning for Drug Discovery, Quantum Chemistry, Materials Science and Biology项目地址: https://gitcode.com/GitHub_Trending/de/deepchem导读SWEETLEAD 是计算机辅助药物发现领域一个著名的先导化合物数据库收录已批准药物、传统草药中的化学分离物以及受管制化学品。本文以 DeepChem 仓库中的 examples/sweetlead/README.md 为核心结合配套脚本 sweet.py 与 MoleculeNet 数据加载源码完整讲解如何利用 DeepChem 将 Tox21毒性与 SIDER副作用上训练好的单任务模型集成起来对 Sweetlead 化合物库进行跨数据集预测并输出一张 Tox21×SIDER 的混淆矩阵协变矩阵用于分析不同毒性机制与副作用类别之间的关联。读完本文你将掌握dc.molnet数据加载器、SingletaskToMultitask模型包装器以及多任务预测结果交叉分析的完整实战套路。Sweetlead 数据集是什么为何重要根据 examples/sweetlead/README.md 的描述Sweetlead 是一个化学结构数据库包含三类来源的化合物已批准药物approved drugs传统草药中的化学分离物chemical isolates from traditional medicinal herbs受管制化学品regulated chemicals数据在入库前经过了严格的后处理流水线过滤只保留活性药物成分active pharmaceutical ingredient, API剔除辅料、盐型等无关结构标准化对分子结构进行统一标准化处理保证同一结构在不同来源中表示一致合并同一药物的不同制剂/配方在最终数据库中合并为一条记录。该数据集引用自 Novick 等人的论文SWEETLEAD: an in silico database of approved drugs, regulated chemicals, and herbal isolates for computer-aided drug discovery.PLoS One8.11 (2013)。由于其同时覆盖已上市药物 天然产物 管制化学品三种语义完全不同的化学空间它常被用于在已有模型上进行外部验证——即检验模型在未见过的、贴近真实药物研发场景的数据上的泛化表现。三行代码载入 Sweetleaddc.molnet.load_sweetDeepChem 已把 Sweetlead 接入 MoleculeNet 数据集体系只需一行调用即可完成下载、特征化、切分与变换。其实现位于 deepchem/molnet/load_function/sweetlead_datasets.py并通过 deepchem/molnet/init.py 导出sweet_tasks, (sweet_dataset, _, _), sweet_transformers dc.molnet.load_sweet()load_sweet完整签名与参数从源码sweetlead_datasets.py可以看到其签名与 Tox21、SIDER 等其他 MoleculeNet 加载器完全一致def load_sweet( featurizer: Union[dc.feat.Featurizer, str] ECFP, splitter: Union[dc.splits.Splitter, str, None] scaffold, transformers: List[Union[TransformerGenerator, str]] [balancing], reload: bool True, data_dir: Optional[str] None, save_dir: Optional[str] None, **kwargs )各参数说明如下可与 molnet_loader.py 中_MolnetLoader的构造逻辑对照参数默认值说明featurizerECFP分子特征化器可传实例或字符串快捷名。源码注册表支持ecfp1024 位圆指纹、graphconvConvMolFeaturizer、raw、onehot、smiles2img、weave等splitterscaffold数据切分器支持index、random、scaffold、butina、fingerprint、task、stratified传None则全部数据放进单个数据集不切分transformers[balancing]数据变换器列表字符串快捷名包括balancing类别平衡、normalization、minmax、clipping、log也可以直接传TransformerGenerator对象reloadTrue是否启用磁盘缓存首次调用会按数据集-特征化器-切分器-变换器路径缓存到本地后续调用直接加载data_dirNone原始数据保存目录缺省使用dc.utils.data_utils.get_data_dir()save_dirNone特征化后数据集保存目录同样缺省指向全局数据目录底层加载流程_SweetLoader与_MolnetLoaderload_sweet内部实例化_SweetLoader其核心是create_dataset方法sweetlead_datasets.pydef create_dataset(self) - Dataset: dataset_file os.path.join(self.data_dir, sweet.csv.gz) if not os.path.exists(dataset_file): dc.utils.data_utils.download_url(urlSWEETLEAD_URL, dest_dirself.data_dir) loader dc.data.CSVLoader(tasksself.tasks, feature_fieldsmiles, featurizerself.featurizer) return loader.create_dataset(dataset_file, shard_size8192)可见原始数据以sweet.csv.gz的形式从远程 URL 下载SWEETLEAD_TASKS [task]定义了唯一任务列SMILES 作为特征输入字段配合指定特征化器生成特征并以 8192 的 shard 大小分片构建DiskDataset。后续的切分与变换由基类_MolnetLoader.load_dataset统一完成molnet_loader.py若splitter非空先执行train_valid_test_split得到 train / valid / test 三份数据每个Transformer仅在训练集上拟合并分别变换三份数据防止数据泄露若reloadTrue且数据为DiskDataset则将结果含变换器落盘缓存下次直接读取。理解这条链路对后续预测非常关键Sweetlead 在示例中扮演的是外部预测对象角色不需要训练/测试切分只需将全部数据作为单一数据集传给已训练好的模型。从单任务到多任务SingletaskToMultitask包装器示例脚本的核心技巧在于Tox21 有 12 个毒性任务、SIDER 有 27 个副作用任务任务清单见 tox21_datasets.py 与 sider_datasets.py而 scikit-learn 的RandomForestClassifier本质是单任务模型。为此 DeepChem 提供了SingletaskToMultitask包装器实现位置在 deepchem/models/multitask.py。tox_tasks, (tox_train, tox_valid, tox_test), tox_transformers dc.molnet.load_tox21() def model_builder(model_dir): sklearn_model RandomForestClassifier( class_weightbalanced, n_estimators500, n_jobs-1) return dc.models.SklearnModel(sklearn_model, model_dir) tox_model SingletaskToMultitask(tox_tasks, model_builder) tox_model.fit(tox_train)其工作机制依据 multitask.py 源码构造为每个任务在model_dir下创建独立子目录task_model_dirs[task]fit通过_to_singletask将多任务DiskDataset按任务列拆分成单任务数据集——对于每个样本仅保留该任务权重w ! 0的行即该样本在该任务上有标注才参与训练再对每个任务各自调用model_builder构造并训练一个独立的随机森林predict逐个任务reload已保存的模型并预测最后用np.stack把各任务输出按列拼接成(样本数, 任务数)的概率矩阵。因此tox_model.predict(sweet_dataset, sweet_transformers)会返回形状为(sweet 分子数, 12)的矩阵sider_model则返回(sweet 分子数, 27)的矩阵。完整实战跨数据集预测与混淆矩阵生成下面逐段解析 examples/sweetlead/sweet.py 的完整流水线它同时是本文最可直接复用的代码模板。第一步训练 Tox21 与 SIDER 模型tox_tasks, (tox_train, tox_valid, tox_test), tox_transformers dc.molnet.load_tox21() classification_metric Metric( metrics.roc_auc_score, np.mean, modeclassification) def model_builder(model_dir): sklearn_model RandomForestClassifier( class_weightbalanced, n_estimators500, n_jobs-1) return dc.models.SklearnModel(sklearn_model, model_dir) print(tox_train.get_task_names()) print(tox_tasks) tox_model SingletaskToMultitask(tox_tasks, model_builder) tox_model.fit(tox_train)要点随机森林采用class_weightbalanced应对毒性/副作用数据普遍存在的类别不平衡n_estimators500、n_jobs-1使用全部 CPU 核兼顾精度与训练速度每个任务独立训练一棵 500 棵树的森林共 12Tox21 27SIDER个模型dc.molnet.load_tox21()/load_sider(splitrandom)返回(tasks, (train, valid, test), transformers)三元组。第二步加载 Sweetlead 并预测sweet_tasks, (sweet_dataset, _, _), sweet_transformers dc.molnet.load_sweet() sider_predictions sider_model.predict(sweet_dataset, sweet_transformers) tox_predictions tox_model.predict(sweet_dataset, sweet_transformers)注意这里把sweet_transformers传入predict——训练时所用的变换器默认balancing会在预测阶段被undo_transforms逻辑还原确保输出的是与训练数据同一语义空间的预测值。load_sweet()默认splitterscaffold因此返回值中的后两个数据集valid/test被_丢弃预测只针对完整数据集进行。第三步构建 Tox21×SIDER 混淆矩阵sider_dimensions sider_predictions.shape[1] # 27 tox_dimensions tox_predictions.shape[1] # 12 confusion_matrix np.zeros(shape(tox_dimensions, sider_dimensions)) for i in range(tox_predictions.shape[0]): nonzero_tox np.nonzero(tox_predictions[i, :]) nonzero_sider np.nonzero(sider_predictions[i, :]) for j in nonzero_tox[0]: for k in nonzero_sider[0]: confusion_matrix[j, k] 1 df pd.DataFrame(confusion_matrix) df.to_csv(./tox_sider_matrix.csv)这段代码的核心思想对 Sweetlead 中的每个分子分别统计其被 Tox21 哪些任务命中预测概率非零以及被 SIDER 哪些任务命中然后在 12×27 的矩阵对应位置累加。最终tox_sider_matrix.csv的单元格(j, k)表示同时被 Tox21 第 j 个任务和 SIDER 第 k 个任务预测为阳性的 Sweetlead 化合物数量可用于观察特定毒性机制如核受体通路NR-*、应激反应通路SR-*与特定副作用系统如心脏、肝胆、神经系统之间的共现关系已上市药物/草药分离物中哪些结构同时带有高风险信号辅助后续的脱靶效应排查。运行方式# 在仓库根目录执行 python examples/sweetlead/sweet.py运行前提已安装 DeepChem 及其 scikit-learn 依赖环境配置可参考 requirements/env_common.yml 等环境文件首次运行会自动下载 tox21、sider、sweet 三个数据集原始 gz 文件与特征化缓存统一存放在get_data_dir()指定目录耗时取决于网络与 CPU 核数。参数定制与扩展思路更换特征化器load_sweet与load_tox21、load_sider都接受字符串快捷名可一键切换表征方式# 图卷积特征适合后续接 GNN 模型 dc.molnet.load_sweet(featurizergraphconv) # 分子图 Weave 特征 dc.molnet.load_sweet(featurizerweave)注意特征化器必须与训练模型一致——用ECFP默认训练的随机森林无法直接预测graphconv特征化的数据。模型可替换性model_builder是SingletaskToMultitask的唯一模型入口可平滑替换为其他SklearnModel兼容的分类器如ExtraTreesClassifier、GradientBoostingClassifier或SVC结构无需改动但需注意该包装器当前实现仅面向 sklearn 模型见 multitask.py 的 Note 说明。更严格的切分控制若希望 Sweetlead 预测完全独立于训练集可显式传入splitterNone与训练时相同的data_dir并利用reload缓存避免重复特征化sweet_tasks, (sweet_dataset,), sweet_transformers dc.molnet.load_sweet( splitterNone, data_dir./data, reloadTrue)总结该示例的工程价值从仓库证据看这个示例演示了一条可复用的跨数据集药物安全性筛查流水线用 MoleculeNet 标准加载器load_tox21、load_sider、load_sweet统一管理数据获取与特征化用SingletaskToMultitask让 500 棵树的随机森林逐个任务训练实现单任务模型的多任务化对 Sweetlead 全库预测并输出 Tox21×SIDER 共现矩阵把模型置信度转化为可读的机制关联分析表。其设计思路与 MoleculeNet 的统一加载抽象_MolnetLoader基类一脉相承数据集是插拔的、模型是插拔的唯有预测-交叉分析的主干逻辑保持稳定这正是它适合作为药物化学、计算毒理学研究起点的原因。【免费下载链接】deepchemDemocratizing Deep-Learning for Drug Discovery, Quantum Chemistry, Materials Science and Biology项目地址: https://gitcode.com/GitHub_Trending/de/deepchem创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考