最近要做蛋白活性口袋预测,在算法和程序选择上犯了难,最后找到一篇很好的 Paper,里面基本上解答了我的疑惑,并且给出了很好的预测方法:Comparative evaluation of methods for the prediction of protein–ligand binding sites | Journal of Cheminformatics | Full Text
选择基础几何预测器 (Base Geometric Prediction)
论文中显示,高性能的组合方法(如 DeepPocketRESC 和 fpocketPRANK)都选择 fpocket 的输出作为起点,几何方法在识别空腔方面快速且可靠,运行基础工具,生成一组未经过滤和重新排名的原始候选口袋,每个口袋都会有一个原始分数
处理冗余与筛选(Refining & Filtering)
需要按照以下步骤:
- 定义重叠:设定一个阈值(例如:口袋中心点距离 ≤5 A˚,或残基重叠 Jaccard 指数 ≥0.75,这是论文中使用的标准)
- 去冗余: 遍历所有预测口袋,识别出所有重叠的口袋群组
- 保留最优: 在每个重叠的群组中,只保留原始分数最高的那一个口袋,丢弃其余冗余的口袋
- 操作目标: 得到一组精简、不重叠的候选口袋集合
重打分 (Re-scoring with P 2 Rank/PRANK)
使用 P 2 Rank 导出前面自定义的外部口袋,然后再对其进行重新打分,
最终排名与选择(Final Ranking)
根据 P 2 Rank 输出的新分数对口袋进行排序,分数最高的即为最佳预测结果
需要考虑到召回率
论文中使用的 “Top-N” 评估,其具体含义是:“我们只考虑每个蛋白质的前 N 个预测结果”
- N: 代表一个蛋白质实际拥有的、经过 LIGYSIS 数据库验证的结合位点数量
+2: 是一个额外的缓冲。研究人员在评估时,将预测数量的上限设为 N (实际结合位点数) 加上 2 个额外的预测
- 例子: 如果一个蛋白质有 N=1 个已知的结合位点,评估时会检查该方法的 Top 3 预测(1+2)是否命中了这个位点
- 如果一个蛋白质有 N=3 个已知的结合位点,评估时会检查该方法的 Top 5 预测(3+2)是否命中了这 3 个位点
在实际处理蛋白中
- Top 1: 永远是最应该关注的口袋(最具信心的预测)
- Top 3(或 Top 5): 检查得分排在前 3 个(或 5 个)的口袋,以确保没有遗漏任何潜在的结合位点
Pipeline 设计
然后我就按照这个论文写了一个完整的蛋白口袋检测和评估 Pipeline,集成了 fpocket 几何预测和 P 2 Rank 机器学习重打分
其中 P 2 Rank 使用的就是 Random Forest 算法
最终要选择的哪几个口袋其实是个大问题,论文中提出使用的 “Top-N” 评估,但是这个“N”要从数据库查出来,但是这个比较依赖于人工标注,大多数时候的蛋白是没有的,而且蛋白的 fasta 是从 NCBI 中拉出来的,你得查这个数据库还需要 mapping 到 UniPort 中,虽然说也有脚本可以做,但是很麻烦
然后我先自己偷偷跑了一个蛋白来测试一下这个 Pipeline,可以看到整个变化其实是非常大的,有些蛋白可能在几何学预测中得分非常高,但是在基于机器学习的算法中优势就没有这么高了
如果我们按照 N=1 的这种情况的话,那我们要取的 Pocket 就是 Pocket. 19、Pocket. 42、Pocket. 13,从图中不难看出,19 的最终得分要远远高于其他的两个
不过这个断崖确实值得思考,在 P 2 Rank 重打分之后,加入一个自动分析模块,对于每一个蛋白,执行以下操作:
- 获取分数列表: 得到该蛋白所有口袋按 P 2 Rank 分数降序排列的列表
scores = [s1, s2, s3, ..., sn]
- 计算分数差(Deltas): 计算相邻分数之间的差值
deltas = [s1-s2, s2-s3, s3-s4, ...]
寻找最大差值(Find the Cliff): 在
deltas
数组中找到最大值,以及它对应的位置,这个最大差值就是“断崖”的陡峭程度max_delta = max(deltas)
cliff_index = index of max_delta
- 定义“断崖之上”的口袋集: “断崖”之前的所有口袋(包括“断崖”边缘的那个),就是高置信度候选集。这个集合的大小是
cliff_index + 1
因为这个蛋白刚好有论文指出了他的活性口袋位点,然后我看了下刚好确实就是这个,其中蓝色的是活性口袋位置的残基,红色的是预测的口袋中心
最后跑了要筛选的 800 多个蛋白,做了并行优化,最后速度还是非常快的
我在做生物信息学和蛋白相关的东西的时候,碰到最多的问题其实是不知道要如何去验证,就比如说这个算法,我尝试了一种新的方法,几何+机器学习,你看传统的几何和机器学习的结果区别其实很大,说实话我心里有点慌