
DeepChem 实战基于 HIV 数据集的抗病毒活性筛选二分类建模【免费下载链接】deepchemDemocratizing Deep-Learning for Drug Discovery, Quantum Chemistry, Materials Science and Biology项目地址: https://gitcode.com/GitHub_Trending/de/deepchem导读本文围绕 DeepChem 仓库 examples/hiv 目录展开完整讲解 HIV 活性筛选数据集的来源、CSV 字段含义与统计分布以及两种开箱即用的建模方案基于 ECFP 指纹的多任务全连接分类器hiv_tf_models.py与基于 IRV表示学习投票特征的分类器hiv_irv.py。读完本文你将掌握load_hiv数据加载 API 的全部关键参数、scaffold 切分与类别平衡变换的实战用法并能直接运行示例脚本在 4 万余个化合物上完成活性/非活性二分类训练与 AUC 评估。一、数据集背景DTP AIDS 抗病毒筛选计划HIV 数据集由美国国家癌症研究所NCI的药物治疗项目Drug Therapeutics ProgramDTPAIDS 抗病毒筛选AIDS Antiviral Screen引入。该筛选计划系统测试了超过 40,000 个化合物抑制 HIV 复制的能力原始数据来自公开的 AIDS Antiviral Screen 数据库NCI DTP 数据仓库。筛选结果被划分为三个类别CIConfirmed Inactive确认无活性CAConfirmed Active确认有活性CMConfirmed Moderately Active确认中等活性。DeepChem 在加载时进一步将后两个类别合并从而把任务转化为非活性CIvs 活性CA 与 CM的二分类任务。这也是 DeepChem 官方文档对该数据集反复强调的默认设定见 hiv_datasets.py 中的 docstring。二、数据文件解析HIV.csv 的列结构与统计本仓库直接在 examples/hiv/HIV.csv 中携带了完整数据文件共 41,914 行含表头无需联网下载即可复现示例。CSV 使用逗号分隔每行对应一个化合物核心列为列名含义取值smiles分子结构的 SMILES 表示任意合法 SMILES 字符串activity筛选结果三分类标签CI/CM/CAHIV_active合并后的二分类标签1CA/CM 活性与0CI 非活性对仓库内 CSV 的实际统计按HIV_active字段为活性样本 1,487 条非活性样本 40,426 条活性比例仅约 3.5%。这意味着该任务是一个典型的类别极不平衡的二分类问题——正因如此load_hiv 默认会挂载类别平衡变换器balancing训练脚本也统一选用对不平衡不敏感的 ROC-AUC 作为评估指标。数据文件首行示例来自 HIV.csvsmiles,activity,HIV_active CCC1[O][Cu-3]2([O]C(CC)C1)[O]C(CC)CC(CC)[O]2,CI,0三、数据加载load_hiv 加载器与关键参数示例脚本均通过 DeepChem 的统一 MoleculeNet 加载接口获取数据from deepchem.molnet import load_hiv hiv_tasks, hiv_datasets, transformers load_hiv() train_dataset, valid_dataset, test_dataset hiv_datasets该函数定义于 deepchem/molnet/load_function/hiv_datasets.py返回三元组任务名列表HIV_TASKS [HIV_active]即单任务、切分后的数据集元组以及已应用的变换器列表。其完整签名与默认值如下参数默认值说明featurizerECFP分子特征化方式传入dc.feat.Featurizer实例或dc.molnet.featurizers中的名称。默认 ECFP扩展连通性指纹输出 1024 维特征splitterscaffold数据切分器传入dc.splits.Splitter实例或dc.molnet.splitters中的名称。官方明确推荐使用 scaffold 切分transformers[balancing]应用于数据的变换器列表默认启用类别平衡reloadTrue为 True 时首次调用会把处理好的数据集缓存到磁盘后续调用直接加载缓存避免重复特征化data_dirNone原始数据保存目录若指定目录下无HIV.csv加载器会自动从上游数据地址下载见 hiv_datasets.py 的create_datasetsave_dirNone处理后数据集缓存目录从源码实现看_HIVLoader.create_dataset的加载链路为确认HIV.csv存在不存在则下载→ 用dc.data.CSVLoader(tasks[HIV_active], feature_fieldsmiles, featurizer...)读取 → 以shard_size8192分片构建Dataset。也就是说原始 CSV 中的activity三分类列在建模时并不直接使用模型只消费由HIV_active生成的标签。四、方案一ECFP 指纹 多任务全连接分类器示例脚本 hiv_tf_models.py 给出了最直接的基线模型以 1024 维 ECFP 指纹为输入训练MultitaskClassifier全连接网络。完整流程如下import numpy as np import deepchem as dc from deepchem.molnet import load_hiv np.random.seed(123) # 仅用于调试复现 n_features 1024 hiv_tasks, hiv_datasets, transformers load_hiv() train_dataset, valid_dataset, test_dataset hiv_datasets metric dc.metrics.Metric(dc.metrics.roc_auc_score, np.mean) model dc.models.MultitaskClassifier( len(hiv_tasks), # 任务数 1 n_features, # 输入特征维度 1024 layer_sizes[1000], # 隐藏层神经元数 dropouts[.25], # 对应隐藏层的 dropout 比率 learning_rate0.001, batch_size50) model.fit(train_dataset) train_scores model.evaluate(train_dataset, [metric], transformers) valid_scores model.evaluate(valid_dataset, [metric], transformers) print(Train scores, train_scores) print(Validation scores, valid_scores)几个值得注意的工程细节MultitaskClassifier是 DeepChem 内置的多任务分类模型定义于 deepchem/models/multitask.py。虽然 HIV 只有单任务但该 API 天然支持扩展为多任务场景这也是仓库示例将其作为通用范本的原因。随机种子固定np.random.seed(123)用于确保实验可复现便于横向比较不同脚本的效果。评估指标为 ROC-AUCdc.metrics.Metric(dc.metrics.roc_auc_score, np.mean)对每个任务计算 AUC 后取平均。在 3.5% 正样本的强不平衡设定下AUC 比准确率更能反映模型真实区分能力。评估时传入transformers验证集需经过与训练集相同的平衡变换处理后再打分evaluate内部会自动完成逆变换还原真实标签避免变换器导致评估失真。五、方案二IRVTransformer 多任务 IRV 分类器第二个示例 hiv_irv.py 展示了 DeepChem 中更具特色的IRVImpact Rank Value基于 K 近邻投票表示学习方案。该方案首先用IRVTransformer将 ECFP 指纹变换为 IRV 特征再交给 IRV 分类器训练import numpy as np import deepchem as dc from deepchem.molnet import load_hiv np.random.seed(123) n_features 512 hiv_tasks, hiv_datasets, transformers load_hiv() train_dataset, valid_dataset, test_dataset hiv_datasets metric dc.metrics.Metric(dc.metrics.roc_auc_score, np.mean) transformer dc.trans.IRVTransformer(10, len(hiv_tasks), train_dataset) train_dataset transformer.transform(train_dataset) valid_dataset transformer.transform(valid_dataset) model dc.models.TensorflowMultitaskIRVClassifier( len(hiv_tasks), K10, batch_size50, learning_rate0.001) model.fit(train_dataset) train_scores model.evaluate(train_dataset, [metric], transformers) valid_scores model.evaluate(valid_dataset, [metric], transformers) print(Train scores, train_scores) print(Validation scores, valid_scores)IRVTransformer 的原理源码级IRVTransformer定义于 deepchem/trans/transformers.py构造参数为IRVTransformer(K, n_tasks, dataset)其中K是近邻个数、dataset必须传入训练集它充当变换时的参考库realize方法会在其中检索近邻样本见 transformers.py。其核心思想是对每个目标样本计算目标样本与参考库中所有样本的相似度相似度定义为Jaccard 系数两样本 ECFP 指纹交集大小 / 并集大小见X_transform的注释similarity (X_target intersect X)/(X_target union X)按相似度从高到低取前K个参考样本若最高相似度为 1说明目标本身就在参考库中则剔除自身取后续 K 个将K 个相似度值与其对应的参考标签拼接构成维度为2*K的新特征。对n_tasks个任务分别执行上述过程后最终每个样本得到2*K*n_tasks维 IRV 特征——这正是MultitaskIRVClassifier.n_features 2 * K * n_tasks的由来见 deepchem/models/IRV.py。IRV 分类器的投票层实现MultitaskIRVClassifier的核心是IRVLayerdeepchem/models/IRV.py它把 IRV 特征输入一个可学习的投票层可训练参数包括投票权重V、相似度/排名权重W以及偏置b、b2对每个任务先计算R sigmoid(b W[0]*similarity W[1]*(rank1))再用R加权聚合 K 个近邻的标签投票z sum(R * V[labels]) b2各任务输出拼接后经 sigmoid 激活得到概率训练时叠加 L2 正则项由penalty参数控制默认 0.0。因此 IRV 方案的特点是不需要传统意义上的深度网络而是以近邻相似度驱动的可解释投票机制完成分类天然契合小样本、强不平衡的活性筛选场景。注意示例中的TensorflowMultitaskIRVClassifier在当前版本已标记为deprecated并重命名为MultitaskIRVClassifier见 deepchem/models/IRV.py。新代码建议直接使用dc.models.MultitaskIRVClassifier其行为与旧名称完全一致。六、进入 MoleculeNet 基准体系load_hiv不仅服务于示例脚本还被集成进 DeepChem 的 MoleculeNet 基准框架。在 deepchem/molnet/run_benchmark.py 中hiv已注册为可用的基准数据集键与 tox21、muv、pcba 等数据集并列可通过统一的run_benchmark入口在相同协议下对比不同模型在该任务上的表现。这意味着本文介绍的两种建模方式全连接网络与 IRV 分类器都可以放进统一的基准流程中使用固定的 scaffold 切分与平衡变换产出可横向对比的 ROC-AUC 结果。七、总结与扩展建议围绕 examples/hiv 目录本文覆盖了 HIV 数据集从数据背景 → 字段解析 → 加载 API → 两种建模方案 → 基准集成的完整链路。关键要点回顾HIV 任务本质是CI 非活性 vsCACM活性的二分类正样本占比仅约 3.5%属于强不平衡问题推荐 pipelineload_hiv()默认的ECFP scaffold 切分 balancing 变换即可直接训练两个示例脚本hiv_tf_models.py 与 hiv_irv.py分别演示了深度全连接与 IRV 近邻投票两条技术路线均以 ROC-AUC 评估IRV 方案的实现细节相似度定义、K 近邻选取、投票层可在 deepchem/models/IRV.py 与 deepchem/trans/transformers.py 中逐行核对适合作为理解非深度表示学习的入门范本。如需自行复现可直接在仓库根目录执行python examples/hiv/hiv_tf_models.py或python examples/hiv/hiv_irv.py需安装 TensorFlow 后端。由于load_hiv的reload默认开启首次运行后数据集会被缓存二次运行将显著加快。【免费下载链接】deepchemDemocratizing Deep-Learning for Drug Discovery, Quantum Chemistry, Materials Science and Biology项目地址: https://gitcode.com/GitHub_Trending/de/deepchem创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考