178

DeepPurpose:DTI、药物重定位与组合预测工具

DeepPurpose 用几行代码搭起 DTI、药物重定位与药物组合预测,适合快速起步与做基线。这篇给出完整代码路径,也讲清它在真实项目中的准确边界。

DeepPurpose 是一个面向药物-靶点相互作用(DTI) 及相关任务的高层封装库。它把「分子编码器 × 蛋白编码器 × 预测头」做成可组合的配置项,用不到二十行代码就能训出一个 DTI 模型,非常适合快速起步和建立基线。

安装

pip install DeepPurpose descriptastorus
python -c "from DeepPurpose import DTI; print('ok')"

核心思路:编码器组合

可选编码
药物 Morgan、Pubchem、Daylight、rdkit_2d_normalized、CNN、Transformer、MPNN
蛋白 AAC、PseudoAAC、Conjoint_triad、CNN、CNN_RNN、Transformer

任意两两组合即可构成一个模型,这让「换编码器做消融」变得非常廉价——它最大的实用价值其实在这里。

完整流程

from DeepPurpose import DTI as models
from DeepPurpose import utils, dataset

X_drug, X_target, y = dataset.load_process_DAVIS(
    "./data", binary=False, convert_to_log=True)     # 激酶亲和力数据集

drug_enc, target_enc = "MPNN", "CNN"
train, val, test = utils.data_process(
    X_drug, X_target, y, drug_enc, target_enc,
    split_method="cold_protein", frac=[0.7, 0.1, 0.2])   # 关键:冷启动划分

config = utils.generate_config(
    drug_encoding=drug_enc, target_encoding=target_enc,
    train_epoch=50, LR=1e-3, batch_size=128)
model = models.model_initialize(**config)
model.train(train, val, test)
model.save_model("./ckpt_dti")

split_method 支持 random / cold_drug / cold_protein这个参数决定了你的结果有没有意义:随机划分下同一个靶点会同时出现在训练与测试集,模型只要记住「这个靶点大概什么亲和力」就能拿高分。真实场景是面对新靶点或新分子,必须看冷启动划分的数字。

能做的三类任务

  • DTI 亲和力预测:给药物 + 靶点预测结合强度,用于虚拟筛选打分或脱靶排查。
  • 药物重定位(repurposing):固定一个靶点,扫已上市药物库找可能结合的老药。库里自带 load_broad_repurposing_hub 等资源。
  • 药物组合:预测两药联用的协同效应,数据来自 DrugComb 等。
from DeepPurpose import oneliner
oneliner.repurpose(*dataset.load_SARS_CoV2_Protease_3CL(),
                   *dataset.load_broad_repurposing_hub())

边界:别把它的输出当结论

  • 序列级蛋白编码不含结构信息:CNN/Transformer 编的是氨基酸序列,看不到口袋几何。对结构已知的靶点,基于结构的方法(对接、FEP)信息量更大。
  • 训练数据严重偏斜:DAVIS、KIBA 等公开集集中在激酶,其他靶点家族覆盖很少,模型在陌生家族上外推能力弱。
  • 重定位结果需要机制核验:模型给出的高分老药只是假设,必须结合机制合理性、可达浓度、已知安全性再判断,不能直接当发现。
  • 维护节奏偏慢:作为研究工具很好用,作为长期生产依赖需自行评估。

上手提示

  • 它的强项是「几行代码换一套编码器组合」,最适合做基线与消融;
  • split_method 必须用 cold_drug / cold_protein,随机划分的漂亮数字没有意义;
  • 公开 DTI 数据高度偏向激酶,换靶点家族前先评估适用域;
  • 重定位命中只是假设,需要机制与暴露量的独立核验。

延伸资源