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