mcpField
M
molfeat

molfeat

github.com/kalarislabs数据与数据库7940 次安装6 天前更新
代码仓库

关于 molfeat

molfeat 是将分子结构转换为机器学习特征的 Python 库与技能,整合预训练嵌入和手工设计的特征计算器,并提供批处理、兼容 scikit-learn 的转换器及缓存。

主要功能

  1. 01将 SMILES 和分子转换为特征
  2. 02使用预训练嵌入和特征计算器
  3. 03并行批量处理
  4. 04使用兼容 scikit-learn 的转换器
  5. 05缓存预训练模型输出
  6. 06保存和重新加载配置

适用场景

  1. 01构建 QSAR 模型
  2. 02虚拟筛选化合物排序
  3. 03搜索相似分子
  4. 04为深度学习准备特征

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/kalarislabs/research-agent-skills --skill molfeat

安装后在 Claude Code 中输入/molfeat确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
api_reference.md
available_featurizers.md
choosing_a_featurizer.md
examples.md

详细介绍

Molfeat - 分子特征化中心

概览

Molfeat 是一个全面的 Python 分子特征化库,整合了 100 多种预训练嵌入和手工设计的特征计算器。将化学结构(SMILES 字符串或 RDKit 分子)转换为数值表示,用于 QSAR 建模、虚拟筛选、相似性搜索和深度学习应用等机器学习任务。它支持快速并行处理、兼容 scikit-learn 的转换器以及内置缓存。

版本说明: 示例面向 molfeat 0.11.0(PyPI 稳定版,2025 年 5 月)。需要 Python 3.9–3.10(requires-python 上限低于 3.11)。依赖 datamol ≥0.8.0 和 PyTorch ≥1.13。从 0.8.7 起,优先使用 datamol Mol 对象,而非原始的 rdkit.Chem.Mol。从 0.10.1 起,指纹计算器在内部使用 RDKit 的 rdFingerprintGenerator API。从 0.11.0 起,预训练模型会载入内存,基础模型也会自动设为 PyTorch 评估模式。

何时使用此技能

在以下情形中使用此技能:

  • 分子机器学习:构建 QSAR/QSPR 模型、预测性质
  • 虚拟筛选:对化合物库进行排序,以筛选出生物活性化合物
  • 相似性搜索:查找结构相似的分子
  • 化学空间分析:聚类、可视化、降维
  • 深度学习:使用分子数据训练神经网络
  • 特征化工作流:将 SMILES 转换为适用于机器学习的表示
  • 化学信息学:任何需要提取分子特征的任务

安装

使用 Python 3.9 或 3.10 环境(截至 0.11.0,molfeat 无法安装在 Python 3.11 及更高版本中):

uv pip install "molfeat==0.11.0"

# With all pip-installable optional dependencies
uv pip install "molfeat[all]==0.11.0"

可选依赖额外组件(PyPI):

  • molfeat[dgl] — GNN 模型(GIN 变体);上游建议使用 dgl<=2.0(较新 DGL 版本存在 graphbolt 问题)
  • molfeat[graphormer] — Graphormer 模型
  • molfeat[transformer] — ChemBERTa、ChemGPT、MolT5
  • molfeat[fcd] — FCD 描述符
  • molfeat[pyg] — PyTorch Geometric 特征计算器
  • molfeat[viz] — NGLView 可视化小组件

外部特征计算器: molfeat 的额外组件不包含 MAP4 — 请单独从 reymond-group/map4 安装。某些较重的依赖项(DGL、dgllife、graphormer-pretrained)通过 conda-forge 安装更方便;请参阅可选依赖项。

核心概念

Molfeat 将特征化分为三个层级的类:

1. 计算器(molfeat.calc)

可调用对象,可将单个分子转换为特征向量。接受 RDKit Chem.Mol 对象或 SMILES 字符串。

适用于计算器的场景:

  • 单个分子的特征化
  • 自定义处理循环
  • 直接计算特征

示例:

from molfeat.calc import FPCalculator

calc = FPCalculator("ecfp", radius=3, fpSize=2048)
features = calc("CCO")  # Returns numpy array (2048,)
2. 转换器(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)  # Parallel processing
3. 预训练转换器(molfeat.trans.pretrained)

用于深度学习模型的专用转换器,支持批量推理和缓存。

适用于预训练转换器的场景:

  • 获取先进的分子嵌入
  • 利用大型化学数据集进行迁移学习
  • 提取深度学习特征

示例:

from molfeat.trans.pretrained import PretrainedMolTransformer

transformer = PretrainedMolTransformer("ChemBERTa-77M-MLM", n_jobs=-1)
embeddings = transformer(smiles_list)  # Deep learning embeddings

快速入门工作流

基本特征化
import datamol as dm
from molfeat.calc import FPCalculator
from molfeat.trans import MoleculeTransformer

# Load molecular data
smiles = ["CCO", "CC(=O)O", "c1ccccc1", "CC(C)O"]

# Create calculator and transformer
calc = FPCalculator("ecfp", radius=3)
transformer = MoleculeTransformer(calc, n_jobs=-1)

# Featurize molecules
features = transformer(smiles)
print(f"Shape: {features.shape}")  # (4, 2048)
保存和加载配置
# Save featurizer configuration for reproducibility
transformer.to_state_yaml_file("featurizer_config.yml")

# Reload exact configuration
loaded = MoleculeTransformer.from_state_yaml_file("featurizer_config.yml")
优雅地处理错误
# Process dataset with potentially invalid SMILES
transformer = MoleculeTransformer(
    calc,
    n_jobs=-1,
    ignore_errors=True,  # Continue on failures
    verbose=True          # Log error details
)

features = transformer(smiles_with_errors)
# Returns None for failed molecules

选择特征化器与常见工作流

按任务选择特征化器——传统机器学习(RF、SVM、XGBoost)、深度学习、相似性搜索和基于药效团的方法——以及 QSAR 模型构建、虚拟筛选、相似性搜索、scikit-learn 流水线集成和比较多个特征化器的完整工作流示例,详见 references/choosing_a_featurizer.md。

完整的特征化器列表请参阅 references/available_featurizers.md;更多示例请参阅 references/examples.md。

发现可用的特征化器

使用 ModelStore 探索所有可用的特征化器:

from molfeat.store.modelstore import ModelStore

store = ModelStore()

# List all available models
all_models = store.available_models
print(f"Total featurizers: {len(all_models)}")

# Search for specific models
chemberta_models = store.search(name="ChemBERTa")
for model in chemberta_models:
    print(f"- {model.name}: {model.description}")

# Get usage information
model_card = store.search(name="ChemBERTa-77M-MLM")[0]
model_card.usage()  # Display usage examples

# Load model
transformer = store.load("ChemBERTa-77M-MLM")

高级功能

自定义预处理
class CustomTransformer(MoleculeTransformer):
    def preprocess(self, mol):
        """Custom preprocessing pipeline"""
        if isinstance(mol, str):
            mol = dm.to_mol(mol)
        mol = dm.standardize_mol(mol)
        mol = dm.remove_salts(mol)
        return mol

transformer = CustomTransformer(FPCalculator("ecfp"), n_jobs=-1)
批量处理大型数据集
import numpy as np

def featurize_in_chunks(smiles_list, transformer, chunk_size=10000):
    """Process large datasets in chunks to manage memory"""
    all_features = []
    for i in range(0, len(smiles_list), chunk_size):
        chunk = smiles_list[i:i+chunk_size]
        features = transformer(chunk)
        all_features.append(features)
    return np.vstack(all_features)
缓存计算开销较大的嵌入

尽可能优先使用 molfeat 内置的预训练模型缓存。对于自定义嵌入缓存,请使用 NumPy 数组而非 pickle(加载不可信文件时,pickle 可能会执行任意代码):

import numpy as np
from pathlib import Path

cache_file = Path("embeddings_cache.npz")  # fixed path under your project
transformer = PretrainedMolTransformer("ChemBERTa-77M-MLM", n_jobs=-1)

if cache_file.exists():
    embeddings = np.load(cache_file)["embeddings"]
else:
    embeddings = transformer(smiles_list)
    np.savez(cache_file, embeddings=embeddings)

性能提示

  1. 使用并行化:设置 n_jobs=-1 以使用所有 CPU 核心
  2. 批量处理:一次处理多个分子,而不是使用循环
  3. 选择合适的特征化器:指纹比深度学习模型更快
  4. 缓存预训练模型:利用内置缓存,方便重复使用
  5. 使用 float32:精度允许时,设置 dtype=np.float32
  6. 高效处理错误:处理大型数据集时使用 ignore_errors=True

常见特征化器参考

常用特征化器速查:

特征化器类型维度速度用途
ecfp指纹2048快通用
maccs指纹167很快骨架相似性
desc2D描述符200+快可解释模型
mordred描述符1800+中等全面的特征
map4指纹1024快大规模筛选
ChemBERTa-77M-MLM深度学习768慢*迁移学习
gin-supervised-maskingGNN可变慢*基于图的模型

*首次运行较慢;后续运行可受益于缓存

资源

此技能包含全面的参考文档:

references/api_reference.md

完整的 API 文档,涵盖:

  • molfeat.calc - 所有计算器类和参数
  • molfeat.trans - 转换器类和方法
  • molfeat.store - ModelStore 用法
  • 常见模式和集成示例
  • 性能优化提示

**加载时机:**实现特定计算器、了解转换器参数或与 scikit-learn/PyTorch 集成时查阅。

references/available_featurizers.md

按类别整理的 100 多种特征化器完整目录:

  • 基于 Transformer 的语言模型(ChemBERTa、ChemGPT)
  • 图神经网络(GIN、Graphormer)
  • 分子描述符(RDKit、Mordred)
  • 指纹(ECFP、MACCS、MAP4 及其他 15 种以上)
  • 药效团描述符(CATS、Gobbi)
  • 形状描述符(USR、ElectroShape)
  • 基于骨架的描述符

**加载时机:**为特定任务选择最佳特征化器、探索可用选项或了解特征化器特性时查阅。

**搜索提示:**使用 grep 查找特定类型的特征化器:

grep -i "chembert" references/available_featurizers.md
grep -i "pharmacophore" references/available_featurizers.md
references/examples.md

常见场景的实用代码示例:

  • 安装和快速入门
  • 计算器和转换器示例
  • 预训练模型用法
  • scikit-learn 和 PyTorch 集成
  • 虚拟筛选工作流
  • QSAR 模型构建
  • 相似性搜索
  • 故障排除和最佳实践

**加载时机:**实现特定工作流、排查问题或了解 molfeat 常见用法时查阅。

故障排除

无效分子

启用错误处理以跳过无效 SMILES:

transformer = MoleculeTransformer(
    calc,
    ignore_errors=True,
    verbose=True
)
大型数据集的内存问题

对于超过 100K 个分子的数据集,请分块处理或采用流式处理方法。

预训练模型依赖

某些模型需要额外的包。请安装特定的额外依赖(固定版本以确保可复现):

uv pip install "molfeat[transformer]==0.11.0"  # For ChemBERTa/ChemGPT
uv pip install "molfeat[dgl]==0.11.0"          # For GIN models
uv pip install "molfeat[graphormer]==0.11.0"   # For Graphormer
可复现性

保存准确的配置并记录版本:

transformer.to_state_yaml_file("config.yml")
import molfeat
print(f"molfeat version: {molfeat.__version__}")

其他资源

相关技能

  • datamol:通过 datamol Python 库(import datamol as dm)封装 RDKit,用于分子化学信息学,并返回原生的 rdkit.Chem.Mol 对象……
  • rdkit:指导使用 RDKit(Python)读取和写入 SMILES、MOL/SDF 和 InChI,计算描述符(MW、LogP、TPSA),生成 Morgan/……
  • medchem:使用 Python medchem 库(datamol-io,v2.0.5)基于 RDKit 和 datamol 筛选和分类小分子库。

评论

支持 Markdown