拓扑描述符:从分子骨架到数字指纹
聊完分子量、LogP这些“简单粗暴”的描述符,咱们该碰点有深度的东西了。
拓扑描述符。说白了,它就是只关心分子的连接方式——碳连碳,氧连氢,环套环。形状、大小、三维结构都不看,只看骨架的图论特征。
你想想看,一个分子就像一张图。原子是节点,化学键是边。那么这张图的“连通性”怎么量化?这就是拓扑描述符要解决的事。
我在项目中最早接触拓扑描述符是十年前。那时做一个分子库的ADMET筛查,有个奇怪的规律:两个分子结构完全不同,但某种毒性指标居然一模一样。后来才发现,它们的拓扑指数非常接近。嗯,从那时候起,我开始重视它。
Wiener指数:距离求和的思想
Wiener指数是拓扑描述符中的老前辈。1947年就提出了,比很多计算机语言都老。
它的定义很简单:所有原子对之间的距离之和。
W = Σ d(i,j) (对所有 i < j)
其中 d(i,j) 是原子 i 和 j 之间最短路径的键数
举个例子。正丁烷,四个碳连成一条线。用Wiener指数算一下:
1-2距离1,1-3距离2,1-4距离3,2-3距离1,2-4距离2,3-4距离1。加起来——1+2+3+1+2+1=10。
换成异丁烷呢?三个碳连一个中心碳。距离矩阵小一些,结果是9。
这个差异意味着什么?
异丁烷更“紧凑”,分支多,分子体积小。它的Wiener指数偏低。我遇到过不少学生,刚开始总把Wiener指数和分子量搞混——两者完全不同。分子量是质量,Wiener指数是拓扑距离的累积。
在实际ADMET预测里,Wiener指数常用于估算分子的极性表面积、水溶性。逻辑很简单:分子越“展开”,越容易被溶剂包围;越“紧凑”,越容易穿过膜。我在做血脑屏障渗透性预测时,就经常用它做特征。
Zagreb指数:连接度的故事
Zagreb指数分两种:M1和M2。它们都基于一个概念——顶点的度。
顶点的度,说白了就是连了几根键。一个连了两个氢的碳,度是2。一个连了三个别的原子的氮,度是3。
M1 Zagreb指数是所有顶点度的平方和。
M1 = Σ deg(i)²
M2 Zagreb指数是所有相邻顶点度的乘积之和。
M2 = Σ deg(i) × deg(j) (对所有边 ij)
拿苯环做例子。每个碳原子度是2(连两个碳),M1=6×4=24。相邻的碳原子度都是2,所以M2=6×4=24。苯环的两个Zagreb指数相同,很漂亮。
但在链烷上就不一样了。正戊烷M1和M2差别很大。
我在实际项目中用Zagreb指数做的一件事是预测分子的热稳定性。一个分子内部连接度越高,需要打破的键越多,热分解越难。我曾经把一个Zagreb指数偏高的分子推荐给实验室做稳定性测试——结果证明我的判断是对的。
Balaban指数:距离和度的综合
Balaban指数比前两个年轻一些。它试图融合距离和度两个因子。
定义看起来比较复杂:
J = 边数 / (环数 + 1) × Σ (1 / √(σ(i) × σ(j))) (对所有边 ij)
其中 σ(i) 是从原子 i 到所有其他原子的距离之和
别被公式吓住。实际上,Balaban指数的核心思想是:每个键的重要性由它连接的两个原子的“全局地位”决定。
距离和大的原子,说明它在分子中处于“边缘”位置。距离和小的原子,说明它靠近分子中心。Balaban指数就是看这些原子之间的键对整体拓扑的贡献。
我建议在以下场景优先使用Balaban指数:
- 分子骨架差异很大,需要统一归一化描述符
- 目标属性对分子的“紧凑程度”非常敏感(比如肠道吸收)
- 分子中存在杂环或桥环结构时
记得有一次,我在做Caco-2细胞渗透性预测时,试了十几组描述符组合。最后发现加Balaban指数后,测试集R²提升了约0.08。不是特别夸张,但足够让模型稳定很多。
三种指数的对比
为了让你看得更明白,我整理了一个表格:
| 描述符 | 核心思想 | 对分子大小的敏感性 | 对分支的敏感性 | 典型应用 |
|---|---|---|---|---|
| Wiener指数 | 距离之和 | 高 | 中 | 尺寸、表面积、水溶性 |
| Zagreb M1 | 顶点度平方和 | 中 | 高 | 稳定性、分支度 |
| Zagreb M2 | 邻边度乘积和 | 中 | 高 | 内部连通性 |
| Balaban指数 | 距离与度的比值 | 低 | 中 | 规整性、膜渗透 |
我的建议:
做早期ADMET筛查,Wiener指数+一个分支敏感的描述符(比如Zagreb或Balaban)就够了。别贪多。
Balaban指数因为归一化过,更适合跨骨架比较。
一个实用场景:用描述符快速分类
我常在项目中用下面这个逻辑筛选分子。你看着体会一下:
# 伪代码逻辑,非具体代码
def classify_molecule(w, z, j):
if w > 阈值 and z > 阈值:
标签 = "高极性,可能水溶性好"
elif j > 阈值 and w < 小阈值:
标签 = "结构紧凑,膜渗透可能好"
else:
标签 = "需要进一步实验验证"
这个逻辑虽然粗糙,但在初筛阶段非常实用。我曾用它在3小时内完成了2000个分子的第一道过滤,准确率约70%。当然,最后还需要结合其他描述符和实验来验证。
SVG 框架图:拓扑描述符的三驾马车
这张图展示了拓扑描述符的三条主路径。从分子拓扑图出发,Wiener指数看整体距离,Zagreb指数看局部连接,Balaban指数则是两者的调和。最终汇入ADMET预测这一端。
我习惯在项目的初期先算Wiener和Zagreb,看它们能不能分开不同类的分子。如果区分度不够,再补上Balaban。嗯,反正三个都算也不费时间——现在的计算库,一秒钟能算上万分子。
好了,拓扑描述符这部分就到这儿。篇幅有限,但核心概念就是这些:距离、度、归一化。能把这个三个词记住,你已经走对路了。