目的
マテリアルズインフォマティクスの勉強をしたいと思います。
今回は、有機化合物をベクトルに変換するツールであるRDKitを使って、データとして与えられた有機化合物がアルコールかどうかを判定するAIを作っていこうと思います。
動作環境
Python: 3.6.5
scikit-learn: 0.20.3
rdkit: 2019.03.1.0
* 動作環境については、Anacondaをインストールして、仮想環境を作成して構築してます。
Anacondaのインストールは、以前書いたこちらを参照していただけると幸いです。
また、RDKitのインストールはこちらを参照して下さい。
ソースコード
# 必要なライブラリーを読み出し
from rdkit import Chem
from rdkit.Chem import AllChem
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.externals import joblib
import numpy as np
# データを準備する。
# 今回は、アルコールかどうかを判定するためにアルコール(=1)とそれ以外(=0)を判定します。
# 化学式は、SMILES記法で表現します。
smiles = ['CO', 'C(=O)O', 'CCO', 'C=O', 'CCCO', 'CCC', 'C(C)CO', 'C(=O)', 'CC(=O)', 'CC(=O)', 'C', 'CC(=O)C', 'CCCCO', 'C(C)CO']
ans = [1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1]
# 化学式をベクトル変換します。
mols = [Chem.MolFromSmiles(smile) for smile in smiles]
finger_print = [AllChem.GetMorganFingerprintAsBitVect(mol, 2, 1024) for mol in mols]
# データを学習データとテストデータに分割
X = np.array(finger_print)
y = ans
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
# 機械学習アルゴリズムのランダムフォレストでモデルの作成
forest = RandomForestClassifier()
forest.fit(X_train, y_train)
# モデルの精度を確認
forest.score(X_train, y_train)
forest.score(X_test, y_test)
流れとしては、以下の通りになります。
1.データの準備
2.RDKitを用いて、データをベクトル化
3.SKLearnの関数を用いてデータを分割
4.SKLearnのアルゴリズムクラスを用いてモデルの作成
5.作成したモデルの精度のチェック
GitHubのこちらにjupyternotebookのファイルをUPしています。
Comments
Let's comment your feelings that are more than good