論文 Scikit-fingerprints: easy and efficient computation of molecular fingerprints in Python 介紹了分子指紋在計算化學(xué)中的計算和應(yīng)用,特別是其在機器學(xué)習(xí)和大規(guī)模數(shù)據(jù)處理中的重要性。
動機和意義
分子是計算化學(xué)處理的基本結(jié)構(gòu),通常表示為分子圖,需要轉(zhuǎn)換為多維向量以便大多數(shù)處理算法使用,尤其是機器學(xué)習(xí)(ML)應(yīng)用。分子指紋是一種特征提取算法,將分子的結(jié)構(gòu)信息編碼為向量,廣泛用于化學(xué)信息學(xué)中的各種任務(wù),如化學(xué)空間多樣性測量、可視化、聚類、虛擬篩選和分子性質(zhì)預(yù)測等。這些任務(wù)在新藥設(shè)計中尤為重要。為了正確評估預(yù)測模型的性能,訓(xùn)練-測試數(shù)據(jù)集的劃分至關(guān)重要,分子指紋也可以用于此。指紋模型的性能與最先進的圖神經(jīng)網(wǎng)絡(luò)(GNNs)相比仍然具有競爭力。
指紋選擇和計算
選擇適合特定應(yīng)用的最佳指紋表示并不簡單,通常需要計算多種不同的指紋,并可能需要調(diào)整其超參數(shù)。使用多個指紋通常能改善結(jié)果,例如通過連接或數(shù)據(jù)融合。處理大型分子數(shù)據(jù)集需要利用現(xiàn)代多核CPU的高效實現(xiàn)。Python是當(dāng)前化學(xué)信息學(xué)中最流行的語言,包含的scikit-learn庫已成為機器學(xué)習(xí)任務(wù)的事實標(biāo)準(zhǔn)工具。然而,許多流行的開源工具如Chemistry Development Kit (CDK)、OpenBabel或RDKit是用Java或C++編寫的,只有RDKit有官方的Python接口。
并行計算和內(nèi)存優(yōu)化
并行計算分子指紋對于處理大型數(shù)據(jù)庫(如虛擬篩選)非常有用。論文展示了五種指紋在稠密和稀疏表示下的內(nèi)存使用情況,稀疏表示顯著減少了內(nèi)存使用。具體數(shù)據(jù)如下:
Klekota-Roth: 稠密數(shù)組大小2029MB,稀疏數(shù)組大小23MB,內(nèi)存節(jié)省88.2倍。
FCFP: 稠密數(shù)組大小855MB,稀疏數(shù)組大小15MB,內(nèi)存節(jié)省57倍。
Physiochemical Properties: 稠密數(shù)組大小855MB,稀疏數(shù)組大小17MB,內(nèi)存節(jié)省50.3倍。
ECFP: 稠密數(shù)組大小855MB,稀疏數(shù)組大小19MB,內(nèi)存節(jié)省45倍。
Topological Torsion: 稠密數(shù)組大小855MB,稀疏數(shù)組大小19MB,內(nèi)存節(jié)省45倍。
指紋超參數(shù)調(diào)優(yōu)
大多數(shù)文獻中忽略了分子指紋的超參數(shù)調(diào)優(yōu),僅調(diào)優(yōu)下游分類器。論文進行了所有2D指紋的超參數(shù)調(diào)優(yōu),使用了MoleculeNet單任務(wù)分類數(shù)據(jù)集,結(jié)果顯示調(diào)優(yōu)帶來了顯著的性能提升。特別是基于子結(jié)構(gòu)的Ghose-Crippen指紋在平均AUROC上提升了4%。具體結(jié)果如下:
RDKit指紋
-
- 在BBBP數(shù)據(jù)集上的AUROC提升高達5.8%。
Ghose-Crippen指紋
- 在所有數(shù)據(jù)集上的平均AUROC提升為4%。
復(fù)雜的3D指紋處理管道
對于需要3D信息的任務(wù),如基于構(gòu)象的指紋,整個處理管道變得更加復(fù)雜。需要生成構(gòu)象并進行力場優(yōu)化,結(jié)果指紋可能有缺失值。使用多個指紋通常是有益的,特別是對于虛擬篩選,因為它們考慮了不同的幾何特征。論文展示了一個創(chuàng)建用于篩選的分子向量化管道的示例,使用了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接口,易于集成到復(fù)雜的分子數(shù)據(jù)處理管道中。庫中包含30多種指紋(2D和3D),并支持高效的構(gòu)象生成。其直觀和統(tǒng)一的API使得領(lǐng)域?qū)<遥ㄈ缬嬎慊瘜W(xué)家、化學(xué)信息學(xué)家或分子生物學(xué)家)易于使用。庫還強調(diào)代碼質(zhì)量、安全性和自動化檢查。
并行計算:利用所有可用核心,顯著加速了大數(shù)據(jù)集的處理。
超參數(shù)調(diào)優(yōu):有助于提高模型性能。
指紋連接和數(shù)據(jù)融合:支持復(fù)雜的計算任務(wù)。
相關(guān)信息
代碼:https://github.com/scikit-fingerprints/scikit-fingerprints
論文:https://arxiv.org/abs/2407.13291v1