4. 分子描述符与理化性质预测

分子描述符是把化学结构翻译成数值向量的“中间语言”。在完成结构标准化、质子化状态枚举与三维构象生成之后,我们面对的仍然是一堆原子和键;而要让机器学习模型、相似性搜索或规则筛选真正“读懂”分子,就必须把它压缩成一组可计算、可比较、可解释的数字。本节围绕拓扑描述符、电子描述符、脂水分配系数、溶解度与 pKa 这几类最常用的性质展开,并讨论描述符筛选与共线性处理这一实际建模中最容易被忽视、却直接决定模型可靠性的环节。

拓扑描述符:从连接关系读出分子形状

拓扑描述符只依赖原子的连接方式,不依赖三维坐标,因此计算快、可复现性强,是描述符集合的“底座”。最基础的是原子计数与分子量,例如乙醇 C2H6O 的分子量为 46.07。再往上是环与不饱和度的刻画:环数、芳香环数、可旋转键数、氢键供体数(HBD)与氢键受体数(HBA)。以布洛芬为例,其分子式为 C13H18O2,分子量 206.28,含 1 个羧基(HBD=1,HBA=2)、1 个苯环、可旋转键约 4 个,这些数字直接对应它的亲脂性与膜渗透倾向。

更进一步的是基于图论的指数,如 Wiener 指数(所有原子对距离之和)、Randić 连接性指数、Balaban J 指数,以及扩展的 EState、Morgan 指纹等。它们把“分子长什么样”编码为连续数值。需要强调的是,拓扑描述符对立体化学不敏感:同一分子的对映体在多数拓扑描述符上完全一致,因此当手性影响活性时,必须额外引入手性描述符或三维描述符。

电子描述符:把电荷与极性量化

电子描述符刻画电子分布及其响应外场的能力,常见的有部分电荷(Gasteiger、MMFF94、AM1-BCC 等)、偶极矩、极化率、HOMO/LUMO 能级、电负性、以及拓扑极性表面积 TPSA。TPSA 是其中最具工程价值的一个:它近似反映分子表面极性区域的大小,常与 HBD/HBA 一起用于判断口服吸收。经验上,TPSA < 90 Ų 且 HBD ≤ 3 的分子更可能具备良好膜渗透性;当 TPSA > 140 Ų 时,被动扩散往往显著受限。

电子描述符对构象和质子化状态敏感。同一分子在中性态与阴离子态下,电荷分布、偶极矩和 TPSA 都会变化。因此计算电子描述符前,必须先确定目标 pH 下的主要质子化形态,否则得到的数值可能对应一个在生理条件下几乎不存在的物种。

脂水分配系数、溶解度与 pKa

脂水分配系数 logP 衡量中性分子在正辛醇与水之间的分配倾向,logD 则是在给定 pH 下所有形态的加权结果。二者关系可写为:

logD(pH) = logP - log10(1 + 10^(pH - pKa))   // 对一元酸
logD(pH) = logP - log10(1 + 10^(pKa - pH))   // 对一元碱

以一元酸为例,当 pH 远低于 pKa 时,分子以中性态为主,logD ≈ logP;当 pH 远高于 pKa 时,分子几乎完全解离,logD 随 pH 每升高 1 个单位下降约 1。这说明 logP 与 logD 不可混用:在 pH 7.4 的生理条件下,一个 pKa=4.5、logP=3.0 的酸,其 logD 约为 3.0 − (7.4 − 4.5) ≈ 0.1,亲脂性大幅下降。

溶解度分为热力学溶解度与动力学溶解度。热力学水溶解度常用 General Solubility Equation 估算:logS ≈ 0.5 − 0.01(MP − 25) − logP,其中 MP 为熔点(℃)。该式表明,高熔点与高 logP 都会降低溶解度。pKa 则决定电离程度,进而影响溶解度与 logD:可电离基团的引入常能显著提高水溶性,但也会改变被动渗透。实际工作中,pKa 可由实验测定,也可用 Henderson-Hasselbalch 关系从 logD-pH 曲线反推,或使用 RDKit、ChemAxon 等工具预测,预测值需与实验值交叉验证。

分子描述符计算与性质预测流程 输入分子 SMILES / 结构 标准化 + 质子化枚举 描述符计算 拓扑:MW / HBD / HBA 电子:TPSA / 电荷 / 偶极 理化:logP / logD / pKa / logS 描述符矩阵 N 分子 × M 描述符 含缺失值与量纲差异 筛选与共线性处理 ① 缺失值过滤 / 方差过滤 ② 相关性 |r| > 0.9 聚类去冗 ③ VIF > 10 剔除或合并 ④ 标准化 / 特征选择 pKa、logP、logD 与溶解度的联动关系 pH 低 pH 高 一元酸:pKa = 4.5 中性态 HA 为主 阴离子 A⁻ 为主 pH = pKa logD ≈ logP = 3.0 logD 随 pH 下降 溶解度估算(GSE) logS ≈ 0.5 − 0.01(MP − 25) − logP 高熔点 ↑ → 溶解度 ↓ 高 logP ↑ → 溶解度 ↓ 共线性诊断示例 MW 与 重原子数:r = 0.98 → 保留其一 TPSA 与 HBA:r = 0.91 → 合并为极性因子 logP 与 logD:r = 0.85 → 按 pH 场景择一 描述符不是越多越好:可解释、低冗余、与目标性质相关的子集才是有效特征

描述符筛选与共线性处理

把上述描述符全部算出来,一个分子很容易得到几百甚至上千维向量。直接送入模型会带来三个问题:维度灾难、过拟合,以及多重共线性导致的系数不稳定。共线性指的是两个或多个描述符高度线性相关,例如分子量与重原子数的相关系数常达 0.98,TPSA 与 HBA 也高度相关。当共线性严重时,线性回归的系数会随样本微小扰动而剧烈变化,模型解释性丧失。

处理流程通常分四步。第一步是缺失值与低方差过滤:删除缺失比例超过 20% 的描述符,删除方差接近 0 的常量列。第二步是相关性聚类:计算描述符两两之间的 Pearson 或 Spearman 相关系数,对 |r| > 0.9 的变量组,保留与目标性质相关性最高、或物理意义最清晰的一个。第三步是方差膨胀因子(VIF)检查:对每个描述符用其余描述符做回归,VIF = 1/(1−R²),当 VIF > 10 时认为存在严重共线性,应剔除或合并。第四步是标准化与特征选择:对量纲差异大的描述符做 Z-score 标准化,再用 LASSO、随机森林重要性或递归特征消除挑选最终子集。

实操建议:在 RDKit 中可用 Descriptors.descList 批量计算约 200 个描述符,再用 pandas 的 corr() 生成相关矩阵,配合 seaborn.clustermap 可视化聚类。对 VIF,可用 statsmodels 的 variance_inflation_factor 逐列计算。注意:所有筛选都必须在训练集上完成,再应用到验证集,否则会造成信息泄漏。

常见误区:把 logP 与 logD 同时放入模型,或在 pH 7.4 场景下使用中性 logP 解释渗透性。前者引入冗余,后者忽略电离,都会让结论偏离真实体系。另一个误区是只做单变量筛选而忽略交互项,导致重要组合特征被误删。

一个可复用的描述符筛选检查表

步骤操作判断阈值输出
1缺失值过滤缺失率 > 20% 删除有效描述符列
2低方差过滤方差 < 0.01 删除去常量列
3相关性聚类|r| > 0.9 保留代表去冗余子集
4VIF 检查VIF > 10 剔除低共线性子集
5标准化Z-score统一量纲矩阵
6特征选择LASSO / RF 重要性最终特征集

完成上述流程后,得到的描述符子集通常从数百维降到 20~50 维,既保留了拓扑、电子与理化性质的关键信息,又显著降低了共线性。此时再用于 QSAR 建模、相似性搜索或 ADMET 预测,模型的稳定性与可解释性都会明显提升。需要牢记的是,描述符筛选不是一次性动作,而应随数据集、目标性质与 pH 场景的变化重新评估。