このカテゴリーの記事では、「Pythonを使った機械学習やケモ・バイオインフォマティクスの実装や論文」を紹介していきたいと考えています。Python は3系(3.7)、anacondaを中心にして環境構築していきます。以下のようなハード・ソフト環境(CentOS Linux)を用いますが、Python(anaconda)が利用できれば、異なる環境下でも類似の実装が可能かと思います。
● CPU Intel® Core™ i7-6700K CPU @ 4.00GHz × 8
● メモリ 64GB
● GPU GeForce GTX 1080/PCIe/SSE2
● OS CentOS Linux 8
● Python 3.7
はじめに
今回から、Pythonで実行可能なケモインフォマティクスとして、DeepChem による機械学習を紹介したいと思います。これまでに用いてきた、condaによる仮想環境やパッケージの設定、Pythonによる計算の実行環境としてJupyter notebook も使っていきますので、過去記事も参考にしてください。
DeepChem
DeepChem のWebサイトやGitHubには、「DeepChem は、創薬、材料科学、量子化学、生物学における深層学習の利用を民主化する高品質なオープンソースのツールチェーンを提供することを目的としています。」と謳われています。DeepChem を利用することで、様々な機械学習・深層学習の手法を、主として化学・生化学の課題に適用することができます。特に、化学構造に関する様々な課題に対して、 グラフ畳み込みネットワーク(GCN; Graph Convolutional Network)を適用することが可能であり、様々な研究に利用されています。また、豊富なチュートリアルが用意されていますので、それらを実行しながら、化学に対して機械学習・深層学習をどのように用いるのか、みていきたいと思います。
DeepChemの実行環境の構築
まずはDeepChemのインストールを行います。下記のように仮想環境 deepchemを用意して、アクティブにしましょう。
$ mkdir deepchem #ディレクトリ名をdeepchemに $ cd deepchem #ディレクトリdeepchemに移動 $ conda create -n deepchem python=3.8 #python 3.8 の仮想環境 deepchemを作成 $ conda activate deepchem #仮想環境 deepchemをアクティブ
そのうえで、以下のように、conda でいくつかのパッケージをインストールしていきます。
$ conda install cudnn=8.2 $ conda install rdkit=2021.03.5
まず、NVIDIAが公開している、深層学習用のライブラリー cudnn(NVIDIAのGPUを使って深層学習を行うのに必要です。これを基にして、以下でインストールする深層学習ライブラリーTensorFlow等が動作します。)をインストールしています。
次に、分子の情報を扱うための様々な手法のパッケージである、RDkit をインストールしています。RDkit はケモインフォマティクス全般に必要なパッケージで、DeepChem も RDkit をベースにしています。RDkit については、こちらのような素晴らしい日本語解説もありますので、ぜひ参考にしてください。
そして、以下のようにDeepChem 本体は pip でインストールします。
$ pip install tensorflow==2.6 $ pip install deepchem==2.6.0.dev202109111951 $ conda install jupyter
DeepChemの深層学習機能は、TensorFlow をベースにしていますので、tensorflow 2.6.0 を先にインストールしています。また、DeepChem は、deepchem==2.6.0.dev202109111951 とすることで、最新開発版をインストールしています。最後に、Jupyter notebook をインストールしました。全てがPythonパッケージで、conda, pipでインストール可能です。素晴らしいですね。
Jupyter notebookを立ち上げ、DeepChemを実行
それでは、Deepchemを使ってみたいと思います。今回は、1番目のチュートリアル、1 The Basic Tools of the Deep Life Sciencesを実行してみます。チュートリアルでは、DeepchemをGoogle colab上で実行することが前提となっていますが、上記の仮想環境にインストールを行いましたので、当然ローカルで実行可能です。
以下を実行し、Jupyter notebookを起動します。
$ jupyter notebook
ここからは notebook 上で実行していきます。まずはセルに以下を入力し、Run して下さい。
import deepchem as dc
dc.__version__
1行目でDeepChem をインポートし、dc…の形で使えるようにしています。2行目はDeepChemのバージョンを表示する指示で、2.6.0.dev とインストールしたバージョンが表示されました。
次の入力から実際のチュートリアルの内容に入っていきます。
1 The Basic Tools of the Deep Life Sciences チュートリアルでは、化学構造に基づく低分子化合物の水への溶解度予測を行います。分子の溶解度は、医薬等において非常に重要な特性です。水への溶解度が低い場合、生体内への投与に問題が生じるため改善が必要です。DeepChem では様々な化合物とその化学的性質をまとめた、分子データセットが使用できるようになっています。これをMoleculeNetといい、このチュートリアルではこのデータセットに含まれる、Delaney 溶解度データを使用することができます。中身はリンクから論文を参照してください。
実際には、以下をRunするだけでデータを使用することができます。
tasks, datasets, transformers = dc.molnet.load_delaney(featurizer='GraphConv')
train_dataset, valid_dataset, test_dataset = datasets
1行目の指示で、Delaney 溶解度データ を読み出しています。化学構造を機械学習で扱える形にしなればなりません。ここでは、featurizer=’GraphConv’と指定することで、GraphConvModel として読み出されています。
2行目の指示では、読み込んだデータセットを、トレーニング、バリデーション、テストの3つの異なるデータセットに分けています。これは、深層学習で一般的に用いられるやり方で、トレーニングセットで学習を行い、学習中のモデルの評価をバリデーションセットで行い、最終的なモデルの評価をテストセットで行うことになります。
データが得られたので、次はモデルを作成します。以下を実行します。
model = dc.models.GraphConvModel(n_tasks=1, mode='regression', dropout=0.2)
この指示で、「グラフ畳み込みネットワーク」(略して「graphconv」)モデルが定義されました。モデルの詳細はここでは触れませんが、モデルが上記のトレーニングセットデータを学習することで、未知化合物に対する溶解度を予測することができるようになるわけです。
学習は、以下のように記述するだけで実行できます。nb_epoch=100 で100エポック分の学習がなされます。
model.fit(train_dataset, nb_epoch=100)
コメント