2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

入門:有機化学者のための機械学習-分子記述子-

2
Last updated at Posted at 2025-12-05

有機化学の機械学習の概要は過去記事で

機械学習で分子を扱う

ケモインフォマテクスにおいて「物質をPCが扱えるデータに変換する」というプロセスが必要です。ここで、有機物を構成する分子に着目します。人間は分子をわかりやすく扱うために化学構造式を使用します。以下に、例として6種類の化学構造式を示します。

fig2.png

化学を学んだ人間には、それぞれの化合物がどんな原子から構成され、どのような構造を持つのか一目瞭然です。しかし、PCにとっては二次元に表現された分子構造を扱う利点は特にないでしょう。そこで、機械学習で扱いやすいように分子をデータ化しようと考えます。分子のデータ化のルールや書き換えられたデータを分子記述子(fingerprint)と呼びます。

以下、実例を交えながら分子記述子についてまとめます。

分子記述子の生成の準備

後述の説明で実際に分子記述子の生成を行います。
本記事で生成する分子記述子を表にまとめます。

名前 特徴 データ形式 データサイズ
Mordred 分子構造とそれから導かれる計算値 配列 1613 要素
Avalon 分子構造 バイナリ 512 bits
MACCSKeys 部分構造の有無 バイナリ 167 bits
ECFP 部分構造とその距離の数え上げ バイナリ 2048 bits
RDKit 分子構造とそれから導かれる計算値 バイナリ 2048 bits

生成はpythonを用いて行います。Google Colaboratory上で動作確認しています。本記事の分子記述子を生成する際には次のモジュールのインポートが必要です。多くの分子記述子はrdkitモジュールを用いて生成が可能です。

!pip install rdkit
!pip install mordred

from rdkit import Chem
from rdkit.Chem import AllChem, Draw, rdMolDescriptors, MACCSkeys
from rdkit.Chem.Descriptors import MolWt, MolLogP
from rdkit.Avalon.pyAvalonTools import GetAvalonFP
from mordred import Calculator, descriptors
import pandas as pd

以下、それぞれの分子記述子を具体例を示しながら解説します。

分子記述子の生成

まず分子をSMILES記法でrdkitに読み込ませます。SMILES記法とは分子を文字列化したものです。詳しくは過去の記事を参照してください。今回は分子記述子を生成する分子として2-ブタノールとベンゼンを用います。

smiles_list = [
    'CC(O)CC',  # 2-ブタノール
    'c1ccccc1',    # ベンゼン
]

molecules = [Chem.MolFromSmiles(smile) for smile in smiles_list]

1) Mordred

・生成コード

# Mordred記述子
calc = Calculator(descriptors, ignore_3D=True)
mordred_descriptors = calc.pandas(molecules)

# Mordred記述子をデータフレームに変換
mordred_df = mordred_descriptors
mordred_df.index = smiles_list

# 結果の表示
mordred_df

・Google Colaboratoryの出力

Screen Shot 2025-12-05 at 20.10.30.png

・概説
分子構造や物性の1613要素からなる配列。それぞれの列のデータがSMILESから求められる分子量、原子数、van der Waals体積などの意味を持った数値になっている。

Screen Shot 2025-12-05 at 20.11.36.png

2) Avalon

・生成コード

# Avalon記述子
avalon_descriptors = []
for mol in molecules:
    fp = GetAvalonFP(mol)
    avalon_descriptors.append(fp.ToBitString())

# Avalon記述子をデータフレームに変換
avalon_df = pd.DataFrame(avalon_descriptors, columns=['AvalonFP'])
avalon_df.index = smiles_list

# 結果の表示
avalon_df

・Google Colaboratoryの出力
Screen Shot 2025-12-05 at 20.17.58.png

・概説
Novartis社が開発した分子記述子。512 bitsのバイナリデータ。1

3) MACCSKeys

・生成コード

# MACCSKeys記述子
maccs_descriptors = [MACCSkeys.GenMACCSKeys(mol).ToBitString() for mol in molecules]
maccs_df = pd.DataFrame(maccs_descriptors, columns=['MACCSKeys'])

maccs_df.index = smiles_list

maccs_df

・Google Colaboratoryの出力
Screen Shot 2025-12-05 at 20.30.41.png

・概説
部分構造を記述する分子記述子。167bitsのバイナリデータ。例えば、酸素原子があれば最後から3番目のbitを1にする、などのように各bitが部分構造に対応。

Screen Shot 2025-12-05 at 20.31.45.png

4) ECFP

・生成コード

# ECFP(Extended-Connectivity Fingerprint, ECFP4を使用)
ecfp_descriptors = [AllChem.GetMorganFingerprintAsBitVect(mol, 2, nBits=2048).ToBitString() for mol in molecules]
ecfp_df = pd.DataFrame(ecfp_descriptors, columns=['ECFP'])

ecfp_df.index = smiles_list

ecfp_df

・Google Colaboratoryの出力
Screen Shot 2025-12-05 at 20.34.20.png
・概説
部分構造とその距離の数え上げ。2

5) RDKit

・生成コード

# RDKit記述子
rdkit_descriptors = [rdMolDescriptors.GetHashedAtomPairFingerprintAsBitVect(mol).ToBitString() for mol in molecules]
rdkit_df = pd.DataFrame(rdkit_descriptors, columns=['RDKit'])

rdkit_df.index = smiles_list

rdkit_df

・Google Colaboratoryの出力
Screen Shot 2025-12-08 at 12.52.24.png

・概説
分子構造とそれから導かれる計算値

どの分子記述子を使うべきか?

気になるのは、結局どの分子記述子が良いのか?ということだろう。しかし、どの記述子も分子の一部の特徴をデータ化したものに過ぎず、分子そのものを完全に表すことができる記述子はない。分子の表現方法の一つである化学構造式が、人間にわかりやすい一方で機械学習では扱いにくいのと同様に、どの分子記述子も一長一短である。結局どの分子記述子が良いのか?に対する回答は、全部試して一番いいもの、とするほかないように思われる。

まとめ

さまざまな分子記述子を生成してみました。分子のデータ化には多様な方法が考案されています。機械学習では許す限りの分子記述子を試してみて一番いいものを探してみると良いでしょう。

  1. J. Chem. Inf. Model. 2006, 46, 5, 1924–1936
    https://doi-org.kyoto-u.idm.oclc.org/10.1021/ci050413p

  2. J. Chem. Inf. Model. 2010, 50, 5, 742–754
    https://doi-org.kyoto-u.idm.oclc.org/10.1021/ci100050t

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?