Bohrium
robot
新建

空间站广场

论文
Notebooks
比赛
课程
Apps
我的主页
我的Notebooks
我的论文库
我的足迹

我的工作空间

任务
节点
文件
数据集
镜像
项目
数据库
公开
RDKit简介(一):Morgan指纹与分子相似度比较
RDKit
机器学习辅助材料设计
RDKit机器学习辅助材料设计
爱学习的王一博
发布于 2024-04-23
推荐镜像 :Basic Image:bohrium-notebook:2023-04-07
推荐机型 :c2_m4_cpu
赞 3
1
3
RDKit简介:
应用领域
Morgan指纹:
工作原理
使用RDKit Morgan指纹进行分子相似度比较
1. 导入相关库
2. 定义两个分子
3. 生成Morgan指纹
4. 计算相似性
解释和结果
总结

RDKit简介:

RDKit 是一个开源的化学信息学和机器学习软件。它主要用于处理化学数据,特别是关于分子和化学反应的数据。RDKit 提供了一系列工具和算法,允许用户处理分子结构、执行化学反应模拟、分析化学数据以及进行分子搜索和匹配。RDKit 是用C++编写的,但它提供了Python接口,使得它在科学计算和数据分析领域尤其流行。

应用领域

RDKit 被广泛应用于药物发现、材料科学、生物信息学以及相关领域的研究和开发中。例如,它可以用于药物候选物的筛选、化合物的性质预测、新材料的设计等方面。

代码
文本

Morgan指纹:

Morgan指纹,也称为扩展连接指纹(ECFP,Extended Connectivity Fingerprints),是一种在化学信息学中广泛使用的分子指纹类型。这种指纹是基于分子内各个原子的局部化学环境,通过迭代过程生成的。Morgan指纹与化学家Arthur Morgan的名字相关联,其设计灵感来源于化学家Christopher Morgan。这种指纹在化学结构搜索、相似性比较、药物发现等领域中有广泛应用。

工作原理

Morgan指纹的生成基于以下步骤和概念:

  • 初始化:指纹生成开始于为分子中的每个原子分配一个唯一标签(通常是原子号或者其它标识符)。
  • 迭代更新:在每次迭代中,每个原子的标签会更新为其自身标签和邻近原子标签的组合的哈希值。这个过程通常重复多次,每次迭代考虑的原子的“环境”扩大到更远的邻居。这样,每个原子的标签逐渐包含了越来越多关于其化学环境的信息。
  • 半径和位向量:Morgan算法的一个关键参数是“半径”,即要考虑原子周围多远距离的邻居。例如,半径为1表示只考虑直接相连的原子,半径为2则扩展到两个键之外的原子。最终,每个原子的最终标签被用来更新一个位向量(通常是固定长度,如1024或2048位)。如果一个原子的标签通过哈希函数映射到特定的位,那么该位被设为1。
  • 结果:最终的位向量代表了整个分子的化学结构和属性。由于其基于环境的生成方式,Morgan指纹能够捕捉分子中原子的上下文信息,这使其在预测分子性质和行为方面非常有用。
代码
文本

使用RDKit Morgan指纹进行分子相似度比较

让我们通过一个具体的例子详细说明如何生成和使用Morgan指纹来比较两个分子的相似性。这个例子中,我们将使用RDKit库来生成Morgan指纹,并计算两个分子之间的相似性。

1. 导入相关库

代码
文本
[1]
from rdkit import Chem
from rdkit.Chem import rdMolDescriptors
from rdkit import DataStructs
代码
文本

2. 定义两个分子

我们将比较苯环(Benzene)和甲苯(Toluene)的相似性。这两个分子在化学结构上相似,但甲苯在苯环上多了一个甲基。

苯环和甲苯的SMILES表示分别是 "C1=CC=CC=C1" 和 "CC1=CC=CC=C1"。

代码
文本
[2]
# 创建分子对象
benzene = Chem.MolFromSmiles("C1=CC=CC=C1")
toluene = Chem.MolFromSmiles("CC1=CC=CC=C1")
代码
文本

3. 生成Morgan指纹

使用RDKit的GetMorganFingerprintAsBitVect函数生成两个分子的Morgan指纹。我们将使用半径为2的指纹,并指定2048位的长度。

代码
文本
[3]
# 生成Morgan指纹
fp_benzene = rdMolDescriptors.GetMorganFingerprintAsBitVect(benzene, radius=2, nBits=2048)
fp_toluene = rdMolDescriptors.GetMorganFingerprintAsBitVect(toluene, radius=2, nBits=2048)

代码
文本
[5]
fp_benzene
<rdkit.DataStructs.cDataStructs.ExplicitBitVect at 0x7fdb385d1ca0>
代码
文本

4. 计算相似性

我们可以使用余弦相似度(或其他相似性度量,如Tanimoto系数)来比较这两个指纹。RDKit提供了多种比较分子指纹的函数。

代码
文本
[4]
# 计算相似性
similarity = DataStructs.FingerprintSimilarity(fp_benzene, fp_toluene)
print(f"相似性分数: {similarity}")

相似性分数: 0.2727272727272727
代码
文本

解释和结果

这个相似性分数表示了两个分子在化学结构上的相似度。由于苯环和甲苯在结构上非常接近,它们的相似性分数通常会比较高。这个分数是一个介于0和1之间的数,1表示完全相同,0表示完全不同。

总结

通过上述步骤,我们成功使用Morgan指纹比较了两个化学结构相似的分子。这个过程不仅适用于简单的分子比较,也可以扩展到更大的化学数据集,用于筛选化合物、药物设计或化学生物学研究中的相似性搜索。Morgan指纹因其强大的信息表达能力和计算效率,在化学信息学领域得到了广泛的应用。

代码
文本
RDKit
机器学习辅助材料设计
RDKit机器学习辅助材料设计
已赞3
本文被以下合集收录
计算机器学习
bohr4eb999
更新于 2024-06-11
29 篇0 人关注
推荐阅读
公开
杨飞宇-第1天-2403-计算材料学原理
2403-计算材料学原理
2403-计算材料学原理
f
发布于 2024-03-09
公开
基于Uni-Mol的分子&原子级别向量表征
Uni-MolDeep Learning
Uni-MolDeep Learning
Zhifeng Gao
更新于 2024-07-24
4 赞8 转存文件