分子描述符:从分子结构到数字的翻译官

做QSAR这么多年,我越来越觉得,分子描述符是整个模型的基石。说白了,就是把化学结构翻译成计算机能看懂的数字。你想想看,计算机不懂苯环、不懂羰基,但它懂0和1、懂浮点数。描述符就是干这个活儿的——把化学信息编码成数值向量。

我个人习惯把描述符分成四类:结构描述符、理化性质描述符、拓扑描述符、3D描述符。每一类都有自己的脾气,用错了地方,模型结果就会很难看。

结构描述符:最基础的分子身份证

结构描述符是最直观的一类。它直接反映分子组成和连接方式,计算成本极低,几乎零开销。

核心指标:
  • 原子计数(C、N、O、S、卤素等)
  • 键的类型与数量(单键、双键、三键、芳香键)
  • 分子式、分子量
  • 环的个数(三元环、五元环、六元环…)
  • 官能团计数(羟基、羧基、氨基等)

我在项目中遇到过一件事:有一次筛选激酶抑制剂,结构描述符里“芳香环个数”这个特征,直接帮我们过滤掉了一大批活性差但结构相似的分子。嗯,就是这么简单粗暴的特征,有时候反而最管用。

使用技巧: 结构描述符虽然基础,但别小看它。做前期数据清洗时,我经常先用结构描述符做一次快速聚类,看看有没有异常结构。

理化性质描述符:分子与环境的交互密码

这类描述符模拟分子在真实环境中的行为。计算机算什么?它算的是分子如何跟水、脂质、蛋白质口袋“打交道”。

描述符 含义 典型应用
logP 脂水分配系数 吸收、透膜性预测
pKa 酸解离常数 离子状态、溶解度
极性表面积(PSA) 分子表面极性原子占比 肠吸收、血脑屏障
溶解度(logS) 水溶性估算 成药性筛选
摩尔折射率(MR) 极性/体积综合指标 结合力估算

我曾经在构建一个CYP450代谢预测模型时,发现只用拓扑描述符死活调不好。后来加了logP和PSA这两个简单理化特征,R²直接从0.6跳到0.85。为什么?因为代谢涉及膜结合酶,分子的疏水性非常关键,拓扑描述符根本不会替你考虑这个。

注意: 理化性质描述符很多不是直接从分子结构算出来的,而是用计算模型估算的。不同估算方法之间可能有系统偏差。我在项目里吃过这个亏——同一组分子,用不同软件算的logP差了一个数量级。

拓扑描述符:分子的二维指纹

拓扑描述符是我个人认为最“聪明”的一类。它不直接算物理性质,而是分析分子图的连接拓扑——原子怎么连、路径怎么走、信息怎么传播。

常用的拓扑描述符包括:

  • Wiener指数:所有原子对间最短路径距离之和。反映分子“紧凑度”。
  • Zagreb指数:基于顶点度的拓扑量。与分子分支程度相关。
  • 分子指纹(Fingerprint):如ECFP、MACCS等。将分子结构编码成固定长度的位向量。
  • Kier&Hall 指数:考虑连接性和形状的混合指标。

分子指纹这块,我多说两句。ECFP是现在最流行的拓扑描述符之一,它从每个原子出发,遍历半径内的邻居,生成一种“子结构字典”,最后哈希成固定长度的位向量。

# 用RDKit计算ECFP4指纹的示例
from rdkit import Chem
from rdkit.Chem import AllChem

mol = Chem.MolFromSmiles('CC(=O)OC1=CC=CC=C1C(=O)O')
fp = AllChem.GetMorganFingerprintAsBitVect(mol, 2, nBits=2048)
# 2表示半径2(即ECFP4),2048位向量长度
print(fp.ToBitString()[:32])  # 打印前32位

我在实际项目里,用ECFP4做过一个活性悬崖(Activity Cliff)分析。两个结构只差一个甲基,活性差异100倍。把它们的指纹一对比,差异位点正好指向那个关键甲基位置。这就是拓扑描述符的价值——它保留了结构关系。

拓扑描述符的优缺点:
  • ✅ 计算快,比3D描述符快几个数量级
  • ✅ 不需要分子构象,省去构象搜索的麻烦
  • ✅ 对骨架跳跃(scaffold hopping)敏感度适中
  • ⚠️ 没有三维立体信息,可能漏掉手性和构象效应

3D描述符:分子的空间几何真相

到了这一步,我们开始考虑分子的真实三维结构。不是平面画图,而是原子在空间里的坐标、形状、表面、静电分布。

常见的3D描述符包括:

  • 分子体积、表面积:Van der Waals表面、溶剂可及表面
  • 偶极矩:电荷分布的不对称性
  • 3D分子形状描述符:如PMI(主惯性矩)、粗糙度
  • 静电势表面(ESP):分子周围的静电势分布
  • 药效团特征:基于3D坐标的氢键受体/供体位点、疏水区域

这里要注意一个问题:3D描述符依赖分子构象。同一个分子,在不同构象下算出的体积、偶极矩可能完全不同。而且,计算3D描述符的成本远高于前两类——需要能量最小化、构象搜索、甚至可能要跑分子动力学。

我曾经踩过的坑: 使用3D描述符时,默认用了CORINA快速生成的单一构象。结果模型泛化能力很差。后来改用多构象平均,再加上最低能量构象单独特征,效果才变好。记住:单构象的3D描述符不可靠。

四类描述符的对比与选择

描述符类型 信息维度 计算成本 典型场景
结构描述符 组成/拓扑 极低 快速过滤、数据清洗
理化性质描述符 分子-环境交互 低~中 ADMET预测、成药性评估
拓扑描述符 二维连接关系 低 活性预测、相似性搜索
3D描述符 空间几何/电子 高 对接后分析、药效团建模

实际项目中,我一般不会只用一类描述符。我的习惯做法是:先用结构+理化描述符做快速筛选,再用拓扑描述符建基础模型,最后用3D描述符做精细优化。你想想看,不同描述符看到的是同一个分子的不同侧面,组合起来才能画出完整的画像。

但也要注意,不是所有描述符都适合混在一起用。比如把结构描述符(原子计数)和3D描述符(体积)同时放进模型,大概率有强共线性,反而会降低模型可解释性。嗯,这里要留个心眼。

分子描述符分类体系 起始分子结构 结构描述符 理化性质描述符 拓扑描述符 3D描述符 原子计数 / 键类型 分子量 / 环计数 官能团 / 子结构 电荷 / 形式电荷 同位素组成 logP / logS pKa / PSA 摩尔折射率 熔点 / 沸点估算 蒸汽压 / 亨利常数 Wiener指数 / Zagreb指数 Kier&Hall 形状指数 ECFP / MACCS 分子指纹 分子连通性指数 信息理论指数 分子体积 / 表面积 偶极矩 / 极化率 静电势表面特征 药效团3D特征 形状 / 主惯性矩 选择建议:先确定任务类型 → 再选描述符维度 → 最后组合优化 单一描述符不够用,但也不是越多越好,注意共线性和计算成本