magattacaのブログ

日付以外誤報

Fingerprinting and Molecular Similarity part1 〜RDKit 直訳 Day12〜

(12/30追記)試訳をまとめたテストサイトを作成しました。よろしければご参照ください。

こちらはRDKit直訳 Advent Calendar 2018 - Adventar 12日目の記事です。基本的な進め方は1日目の記事をご覧ください。

本日の訳出に困った用語
Fingerprinting : フィンガープリントの生成
topologial path: トポロジカルパス
a particular density of set bits : 特定のビット密度 fingerprinter: フィンガープリント生成器
path size: パス長
target on-bit density: オンとなっているビット密度の目標値
unfolded fingerprint: 分散したフィンガープリント (畳み込まれていない(スパースな?)フィンガープリント)
similarity metric : 類似性指標 Tanimoto similarity : Tanimoto係数による類似性評価
public MACCS key: 公開されたMACCS キー
Atom-pair fingerprint : アトムペアフィンガープリント
space of bits: ビット空間
sparse manner : スパースな形式
Dice similarity:Dice類似度評価
encode: 符号化、コード化
bit-vector: ビットベクトル
Tlpological torsion descriptor:トポロジカルトーション記述子

以下、訳

フィンガープリントの生成と分子の類似性(Fingerprinting and Molecular Similarity)

[Link] https://www.rdkit.org/docs/GettingStartedInPython.html#fingerprinting-and-molecular-similarity

RDKitには分子の様々なフィンガープリントを生成する機能があらかじめ用意されており、これを使って分子の類似性を計算することができます。

トポロジカルフィンガープリント(Topological Fingerprints)

[link] https://www.rdkit.org/docs/GettingStartedInPython.html#topological-fingerprints

>>> from rdkit import DataStructs
>>> from rdkit.Chem.Fingerprints import FingerprintMols
>>> ms = [Chem.MolFromSmiles('CCOC'), Chem.MolFromSmiles('CCO'),
... Chem.MolFromSmiles('COC')]
>>> fps = [FingerprintMols.FingerprintMol(x) for x in ms]
>>> DataStructs.FingerprintSimilarity(fps[0],fps[1])
0.6...
>>> DataStructs.FingerprintSimilarity(fps[0],fps[2])
0.4...
>>> DataStructs.FingerprintSimilarity(fps[1],fps[2])
0.25

このフィンガープリントのアルゴリズムはDaylight フィンガープリントの生成で使われているものと類似しています:分子のトポロジカルパス(たとえば結合)を同定しハッシュを生成します。それを利用してユーザー指定の長さのフィンガープリントにビットを立てます。全てのパスを同定した後で、フィンガープリントは一般的に、特定のビット密度になるまで畳み込まれます。

フィンガープリント生成器で使われているデフォルトのパラメーターセットは次の様になっています。- 最小パス長:1結合 - 最大パス長:7結合 - フィンガープリントのサイズ:2048 - ハッシュ毎のビット数:2 - 最小のフィンガープリントのサイズ:64ビット - オンとなっているビット密度の目標値:0.3

これらのパラメーターはrdkit.Chem.rdmolops.RDKFingerprint() を直接呼び出すことで制御できます:分散したフィンガープリント[unfolded fingerprint]を返すので、望みの密度に畳み込む[fold]ことができます。Pythonで書かれたrdkit.Chem.Fingerprints.FingerprintMols.FingerprintMol()関数を見ればどうやってこれを行うかがわかります。

[link] rdkit.Chem.rdmolops.RDKFingerprint(): https://www.rdkit.org/docs/source/rdkit.Chem.rdmolops.html#rdkit.Chem.rdmolops.RDKFingerprint [link] rdkit.Chem.Fingerprints.FingerprintMols.FingerprintMol(): https://www.rdkit.org/docs/source/rdkit.Chem.Fingerprints.FingerprintMols.html#rdkit.Chem.Fingerprints.FingerprintMols.FingerprintMol

rdkit.DataStructs.FingerprintSimilarity()で使われているデフォルトの類似性指標はTanimoto係数です。他の類似性指標を使うこともできます。

[link] rdkit.DataStructs.FingerprintSimilarity(): https://www.rdkit.org/docs/source/rdkit.DataStructs.html#rdkit.DataStructs.FingerprintSimilarity

>>> DataStructs.FingerprintSimilarity(fps[0],fps[1], metric=DataStructs.DiceSimilarity)
0.75

利用可能な類似性指標は、Tanimoto、Dice、Cosine、Sokal、Russel、Kulczynski、McConnaughey、そしてTverskyです。

MACCS キー(MACCS Keys)

[Link] https://www.rdkit.org/docs/GettingStartedInPython.html#maccs-keys

公開されている166種類のMACCSキーを使ったSMARTSベースの実装もあります。

>>> from rdkit.Chem import MACCSkeys
>>> fps = [MACCSkeys.GenMACCSKeys(x) for x in ms]
>>> DataStructs.FingerprintSimilarity(fps[0],fps[1])
0.5
>>> DataStructs.FingerprintSimilarity(fps[0],fps[2])
0.538...
>>> DataStructs.FingerprintSimilarity(fps[1],fps[2])
0.214...

Q3 2008で、MACCS keyは厳密に評価され他のMACCSの実装と比較されました。公開されたキーを完全に定義した場合は非常にうまく機能しました。

アトムペアとトポロジカルトーション(Atom Pairs and Topological Torsions)

[Link] https://www.rdkit.org/docs/GettingStartedInPython.html#atom-pairs-and-topological-torsions

アトムペア記述子[脚注3]はいくつかの異なる方法で利用可能です。標準的な形式ではフィンガープリントを0か1で表すのではなく、それぞれのビットの数をカウントしてフィンガープリントに含めます:

[脚注3]Carhart, R.E.; Smith, D.H.; Venkataraghavan R. “Atom Pairs as Molecular Features in Structure-Activity Studies: Definition and Applications” J. Chem. Inf. Comp. Sci. 25:64-73 (1985).

>>> from rdkit.Chem.AtomPairs import Pairs
>>> ms = [Chem.MolFromSmiles('C1CCC1OCC'),Chem.MolFromSmiles('CC(C)OCC'),Chem.MolFromSmiles('CCOCC')]
>>> pairFps = [Pairs.GetAtomPairFingerprint(x) for x in ms]

アトムペアフィンガープイントに含められるビット空間は非常に巨大なので、スパースな形式で保存されます。各フィンガープリントのビットのリストとそのカウント数を辞書型のデータとして得ることができます。

>>> d = pairFps[-1].GetNonzeroElements()
>>> d[541732]
1
>>> d[1606690]
2

ビットの説明も手に入ります:

>>> Pairs.ExplainPairScore(558115)
(('C', 1, 0), 3, ('C', 2, 0))

上記の意味は「隣接原子が1つあり、π電子が0個の炭素(C)で、隣接原子が2つあり、π電子が0個の炭素(C)から、結合3つ分離れている」です。

アトムペアフィンガープリント間の類似性評価に通常用いられる指標はDice類似度評価です。

>>> from rdkit import DataStructs
>>> DataStructs.DiceSimilarity(pairFps[0],pairFps[1])
0.333...
>>> DataStructs.DiceSimilarity(pairFps[0],pairFps[2])
0.258...
>>> DataStructs.DiceSimilarity(pairFps[1],pairFps[2])
0.56

(カウント数の情報を無視した)標準的なビットベクトルのフィンガープリントとしてコード化されたアトムペアを得ることもできます。

airFps = [Pairs.GetAtomPairFingerprintAsBitVect(x) for x in ms]

これらは標準的なビットベクトルなので、rdkit.DataStructsモジュールを使って類似性評価を行うこともできます。

[link] rdkit.DataStructs: https://www.rdkit.org/docs/source/rdkit.DataStructs.html#module-rdkit.DataStructs

>>> from rdkit import DataStructs
>>> DataStructs.DiceSimilarity(pairFps[0],pairFps[1])
0.48
>>> DataStructs.DiceSimilarity(pairFps[0],pairFps[2])
0.380...
>>> DataStructs.DiceSimilarity(pairFps[1],pairFps[2])
0.625

トポロジカルトーション記述子も基本的には同じ方法で計算されます。[脚注4]

[脚注4] Nilakantan, R.; Bauman N.; Dixon J.S.; Venkataraghavan R. “Topological Torsion: A New Molecular Descriptor for SAR Applications. Comparison with Other Desciptors.” J. Chem.Inf. Comp. Sci. 27:82-5 (1987)

>>> from rdkit.Chem.AtomPairs import Torsions
>>> tts = [
.GetTopologicalTorsionFingerprintAsIntVect(x) for x in ms]
>>> DataStructs.DiceSimilarity(tts[0],tts[1])
0.166...

このページを書いている段階では、トポロジカルトーションフィンガープリントには多すぎてBitVector機能を使ってコード化できないほどたくさんビットがあるので、GetTopologicalTorsionFingerprintAsBitVect 関数といった関数は存在しません。

12/12/2018

このブログ記事のライセンス

以上はRDKit Documentationの試訳です。
ライセンスはCC BY-SA 4.0で、Greg Landrum氏の功績の元に作成しています。
Creative Commons — Attribution-ShareAlike 4.0 International — CC BY-SA 4.0