Molfeat 是一个面向分子机器学习的综合 Python 特征化库,将 100 多种预训练嵌入与手工特征化器统一到同一套接口中。它可以把化学结构(SMILES 字符串或 RDKit 分子)转换为数值表示,服务于 QSAR 建模、虚拟筛选、相似性搜索和深度学习等任务。库内提供快速并行处理、兼容 scikit-learn 的转换器以及内置缓存。
适用场景 当涉及以下工作时可使用本技能:分子机器学习(构建 QSAR/QSPR 模型、性质预测)、虚拟筛选(对化合物库按生物活性排序)、相似性搜索(查找结构相似的分子)、化学空间分析(聚类、可视化、降维)、深度学习(在分子数据上训练神经网络)、特征化流水线(将 SMILES 转换为可供机器学习使用的表示)、化学信息学(任何需要分子特征提取的任务)。
安装 uv pip install molfeat 安装全部可选依赖:uv pip install "molfeat[all]" 针对特定特征化器的可选依赖:molfeat[dgl](GNN 模型,GIN 变体)、molfeat[graphormer](Graphormer 模型)、molfeat[transformer](ChemBERTa、ChemGPT、MolT5)、molfeat[fcd](FCD 描述符)、molfeat[map4](MAP4 指纹)。
核心概念 Molfeat 将特征化组织为三个层级类:
- 计算器(molfeat.calc):可调用对象,将单个分子转换为特征向量,接受 RDKit Chem.Mol 对象或 SMILES 字符串。适用于单分子特征化、自定义处理循环、直接特征计算。示例:from molfeat.calc import FPCalculator;calc = FPCalculator("ecfp", radius=3, fpSize=2048);features = calc("CCO")。
- 转换器(molfeat.trans):兼容 scikit-learn 的转换器,包装计算器以进行带并行化的批处理。适用于分子数据集批量特征化、与 scikit-learn 流水线集成、并行处理(自动利用 CPU)。示例:from molfeat.trans import MoleculeTransformer;from molfeat.calc import FPCalculator;transformer = MoleculeTransformer(FPCalculator("ecfp"), n_jobs=-1);features = transformer(smiles_list)。
- 预训练转换器(molfeat.trans.pretrained):面向深度学习模型的专用转换器,支持批量推理与缓存。适用于最先进的分子嵌入、从大型化学数据集迁移学习、深度学习特征提取。示例:from molfeat.trans.pretrained import PretrainedMolTransformer;transformer = PretrainedMolTransformer("ChemBERTa-77M-MLM", n_jobs=-1);embeddings = transformer(smiles_list)。
快速上手工作流 基础特征化:加载分子数据 smiles = ["CCO", "CC(=O)O", "c1ccccc1", "CC(C)O"],创建计算器与转换器 calc = FPCalculator("ecfp", radius=3)、transformer = MoleculeTransformer(calc, n_jobs=-1),然后 features = transformer(smiles)。 保存与加载配置:transformer.to_state_yaml_file("featurizer_config.yml") 保存配置以保证可复现;loaded = MoleculeTransformer.from_state_yaml_file("featurizer_config.yml") 重新加载完全相同的配置。 优雅处理错误:MoleculeTransformer(calc, n_jobs=-1, ignore_errors=True, verbose=True),失败分子返回 None。
如何选择特征化器 传统机器学习(RF、SVM、XGBoost):从指纹开始,ECFP(最流行、通用,FPCalculator("ecfp", radius=3, fpSize=2048))、MACCS(快速,适合骨架跃迁)、MAP4(适合大规模筛选)。可解释模型可用 RDKit 2D 描述符(200+ 命名属性,RDKitDescriptors2D())或 Mordred(1800+ 综合描述符,MordredDescriptors())。组合多个特征化器可用 FeatConcat,例如将 MACCS(167 维)与 ECFP(2048 维)合并为 2215 维特征。 深度学习:基于 Transformer 的嵌入如 ChemBERTa(在 7700 万 PubChem 化合物上预训练)、ChemGPT(自回归语言模型);图神经网络如 GIN 模型(gin-supervised-masking、gin-supervised-infomax)、Graphormer(用于量子化学,Graphormer-pcqm4mv2)。 相似性搜索:ECFP(通用、最广泛使用)、MACCS(快速、基于骨架)、MAP4(适合大型数据库)、USR/USRCAT(3D 形状相似性,USRDescriptors())。 基于药效团的方法:FCFP(基于官能团)、CATS(药效团对分布,CATSCalculator(mode="2D"))、Gobbi(显式药效团特征,FPCalculator("gobbi2D"))。
常见工作流 构建 QSAR 模型:用 MoleculeTransformer(FPCalculator("ecfp"), n_jobs=-1) 特征化分子,用 RandomForestRegressor 训练并通过 cross_val_score 交叉验证,最后用 to_state_yaml_file 保存配置用于部署。 虚拟筛选流水线:在已知活性/非活性数据上训练 RandomForestClassifier,再对大型化合物库(如 100 万化合物)预测概率,排序并选出 top hits。 相似性搜索:用 FPCalculator("ecfp") 计算查询分子指纹,对数据库指纹用 cosine_similarity 计算相似度并取 top 相似分子。 scikit-learn 流水线集成:用 Pipeline 将 MoleculeTransformer 与分类器串联,直接在 SMILES 上 fit 和 predict。 比较多个特征化器:遍历 ECFP、MACCS、Descriptors、ChemBERTa 等,分别特征化并用模型评估得分。
发现可用特征化器 使用 ModelStore 探索全部可用特征化器:from molfeat.store.modelstore import ModelStore;store = ModelStore();store.available_models 列出全部模型;store.search(name="ChemBERTa") 搜索特定模型;model_card.usage() 查看用法示例;store.load("ChemBERTa-77M-MLM") 加载模型。
高级功能 自定义预处理:继承 MoleculeTransformer 并重写 preprocess 方法,可进行标准化、去盐等处理。 大数据集批处理:按 chunk_size 分块特征化以管理内存,最后用 np.vstack 合并。 缓存昂贵嵌入:用 pickle 将预训练嵌入缓存到文件,避免重复计算。
性能建议 使用并行化(n_jobs=-1 利用全部 CPU 核心);批量处理而非循环;选择合适特征化器(指纹比深度学习模型快);缓存预训练模型;精度允许时使用 float32;大数据集用 ignore_errors=True 高效处理错误。
常用特征化器速查 ECFP:指纹,2048 维,快,通用;MACCS:指纹,167 维,非常快,骨架相似性;desc2D:描述符,200+ 维,快,可解释模型;mordred:描述符,1800+ 维,中等,综合特征;map4:指纹,1024 维,快,大规模筛选;ChemBERTa-77M-MLM:深度学习,768 维,慢(首次运行慢,后续受益于缓存),迁移学习;gin-supervised-masking:GNN,维度可变,慢(首次运行慢,后续受益于缓存),基于图的模型。
参考文档 本技能包含综合参考文档:references/api_reference.md(完整 API 文档,涵盖 molfeat.calc、molfeat.trans、molfeat.store 及常见模式与集成示例、性能优化建议);references/available_featurizers.md(按类别组织的 100+ 特征化器目录,包括基于 Transformer 的语言模型、图神经网络、分子描述符、指纹、药效团描述符、形状描述符、基于骨架的描述符);references/examples.md(常见场景的实用代码示例,包括安装与快速开始、计算器与转换器示例、预训练模型用法、scikit-learn 与 PyTorch 集成、虚拟筛选工作流、QSAR 建模、相似性搜索、故障排查与最佳实践)。
故障排查 无效分子:启用错误处理跳过无效 SMILES(ignore_errors=True, verbose=True)。大数据集内存问题:对超过 10 万分子的数据集分块处理或使用流式方法。预训练模型依赖:部分模型需要额外包,安装对应 extras(molfeat[transformer] 用于 ChemBERTa/ChemGPT,molfeat[dgl] 用于 GIN 模型)。可复现性:保存精确配置并记录版本(transformer.to_state_yaml_file("config.yml"),print(molfeat.version))。
其他资源 官方文档:https://molfeat-docs.datamol.io/;GitHub 仓库:https://github.com/datamol-io/molfeat;PyPI 包:https://pypi.org/project/molfeat/;教程:https://portal.valencelabs.com/datamol/post/types-of-featurizers-b1e8HHrbFMkbun6