论文 Scikit-fingerprints: easy and efficient computation of molecular fingerprints in Python 介绍了分子指纹在计算化学中的计算和应用,特别是其在机器学习和大规模数据处理中的重要性。
动机和意义
分子是计算化学处理的基本结构,通常表示为分子图,需要转换为多维向量以便大多数处理算法使用,尤其是机器学习(ML)应用。分子指纹是一种特征提取算法,将分子的结构信息编码为向量,广泛用于化学信息学中的各种任务,如化学空间多样性测量、可视化、聚类、虚拟筛选和分子性质预测等。这些任务在新药设计中尤为重要。为了正确评估预测模型的性能,训练-测试数据集的划分至关重要,分子指纹也可以用于此。指纹模型的性能与最先进的图神经网络(GNNs)相比仍然具有竞争力。
指纹选择和计算
选择适合特定应用的最佳指纹表示并不简单,通常需要计算多种不同的指纹,并可能需要调整其超参数。使用多个指纹通常能改善结果,例如通过连接或数据融合。处理大型分子数据集需要利用现代多核CPU的高效实现。Python是当前化学信息学中最流行的语言,包含的scikit-learn库已成为机器学习任务的事实标准工具。然而,许多流行的开源工具如Chemistry Development Kit (CDK)、OpenBabel或RDKit是用Java或C++编写的,只有RDKit有官方的Python接口。
并行计算和内存优化
并行计算分子指纹对于处理大型数据库(如虚拟筛选)非常有用。论文展示了五种指纹在稠密和稀疏表示下的内存使用情况,稀疏表示显著减少了内存使用。具体数据如下:
Klekota-Roth: 稠密数组大小2029MB,稀疏数组大小23MB,内存节省88.2倍。
FCFP: 稠密数组大小855MB,稀疏数组大小15MB,内存节省57倍。
Physiochemical Properties: 稠密数组大小855MB,稀疏数组大小17MB,内存节省50.3倍。
ECFP: 稠密数组大小855MB,稀疏数组大小19MB,内存节省45倍。
Topological Torsion: 稠密数组大小855MB,稀疏数组大小19MB,内存节省45倍。
指纹超参数调优
大多数文献中忽略了分子指纹的超参数调优,仅调优下游分类器。论文进行了所有2D指纹的超参数调优,使用了MoleculeNet单任务分类数据集,结果显示调优带来了显著的性能提升。特别是基于子结构的Ghose-Crippen指纹在平均AUROC上提升了4%。具体结果如下:
RDKit指纹
-
- 在BBBP数据集上的AUROC提升高达5.8%。
Ghose-Crippen指纹
- 在所有数据集上的平均AUROC提升为4%。
复杂的3D指纹处理管道
对于需要3D信息的任务,如基于构象的指纹,整个处理管道变得更加复杂。需要生成构象并进行力场优化,结果指纹可能有缺失值。使用多个指纹通常是有益的,特别是对于虚拟筛选,因为它们考虑了不同的几何特征。论文展示了一个创建用于筛选的分子向量化管道的示例,使用了GETAWAY和WHIM描述符。这个示例在RDKit中需要超过100行代码,而在scikit-fingerprints中则简化了很多。
from sklearn.impute import SimpleImputer
from skfp.fingerprints import (GETAWAYFingerprint, WHIMFingerprint)
from skfp.preprocessing import ConformerGenerator
from sklearn.pipeline import make_pipeline, make_union
pipeline = make_pipeline(
ConformerGenerator(optimize_force_field = "MMFF94", n_jobs = -1),
make_union(GETAWAYFingerprint(n_jobs = -1), WHIMFingerprint(n_jobs = -1)),
SimpleImputer(strategy = "mean"),
)
scikit-fingerprints与CDK和OpenBabel的比较
scikit-fingerprints库的影响
scikit-fingerprints是一个计算分子指纹的综合库,完全兼容scikit-learn接口,易于集成到复杂的分子数据处理管道中。库中包含30多种指纹(2D和3D),并支持高效的构象生成。其直观和统一的API使得领域专家(如计算化学家、化学信息学家或分子生物学家)易于使用。库还强调代码质量、安全性和自动化检查。
并行计算:利用所有可用核心,显著加速了大数据集的处理。
超参数调优:有助于提高模型性能。
指纹连接和数据融合:支持复杂的计算任务。
相关信息
代码:https://github.com/scikit-fingerprints/scikit-fingerprints
论文:https://arxiv.org/abs/2407.13291v1