RDKit中对应ECFP4的指纹类型及两种Morgan指纹相似度差异问询
RDKit Morgan指纹常见问题解答
1. ECFP4对应的Morgan指纹半径
ECFP系列命名的后缀数字代表子结构的直径,RDKit中Morgan指纹的radius参数代表子结构的半径,直径=2×半径,因此半径为2的Morgan指纹对应ECFP4,半径为4的Morgan指纹对应ECFP8。
2. 两种Morgan指纹函数计算相似度差异大的原因
GetMorganFingerprintAsBitVect与GetMorganFingerprint返回的指纹类型完全不同,差异主要来自两点:
- 信息维度与相似度计算逻辑不同
GetMorganFingerprint返回稀疏计数型哈希向量(SparseIntVect),默认哈希空间为2^32,无长度折叠几乎不存在碰撞,同时会存储每个子结构在分子中的出现次数。计算相似度时使用计数型谷本系数,公式为sum(min(a_i, b_i)) / sum(max(a_i, b_i)),高频出现的共有子结构会大幅拉高相似度结果。GetMorganFingerprintAsBitVect(nBits=2048)返回固定长度二值折叠指纹,所有子结构会被哈希折叠到指定的2048位,仅记录位的有无不保留出现次数。计算相似度时使用二值谷本系数,公式为(A & B).GetNumOnBits() / (A | B).GetNumOnBits(),所有子结构权重完全一致,丢失了高频共有子结构的权重优势,自然会得到更低的相似度结果。
- 位碰撞的附加影响
当分子的子结构总数量远大于2048时,不同子结构可能被哈希到同一位产生碰撞,多数情况下碰撞会带来假阳性共有位、小幅提升相似度,但极端情况下也可能进一步干扰相似度计算的准确性。
如果需要缩小二者的结果差异,可以选择两种方案:一是增大nBits参数到8192或16384,降低位碰撞概率;二是使用GetHashedMorganFingerprint获取折叠计数型指纹,用计数型谷本系数计算相似度,结果会更接近GetMorganFingerprint的输出。
内容的提问来源于stack exchange,提问作者Philipp O.
相关产品推荐
相关产品推荐

