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 数据高度偏向激酶,换靶点家族前先评估适用域;
- 重定位命中只是假设,需要机制与暴露量的独立核验。
延伸资源
- 数据与划分:173《TDC》、169《Benchmark 陷阱》;
- 对照框架:172《DeepChem》、175《TorchDrug》;
- 基于结构的替代路线:182《AutoDock Vina》、183《GNINA》。