技術資料
研究背景
- 有機合成では効率性や環境面から化学反応の設計に生体触媒(酵素)が利用される機会が増加
- 酵素は化学触媒よりも環境に優しく,特定の反応物に強く作用して化学反応を早く進める
- 酵素は4桁のEC番号で分類されている
- EC番号を機械学習で予測することで,酵素分析(以下)を行う実験コストや時間の削減になる
- 代謝経路の解析で得られた未知の酵素の性質の特定()
- 特定の化学反応を触媒する酵素の探索
(0)環境構築
本プログラムはAnaconda上で実装する
Anacondaインストール
以下のページからインストール
https://www.anaconda.com/download#downloads
rdkitチャネル(仮想環境)の作成
- WindowsボタンからAnaconda Promptを開く
バージョン取得
python -V
rdkitチャネル作成
conda create -n rdkit python=3.8.8 -y
※baseチャネルからrdkitチャネルに変更(Anaconda Prompt)
conda activate rdkit
rdkitライブラリの導入(pipでは不可)
conda install rdkit -c conda-forge
jupyterカーネル導入
pip install jupyter environment_kernels
jupyter起動
jupyter notebook
- 次回以降起動は以下2コマンドで起動する
# anaconda promptを起動し,(base)の部分で以下を入力
(base) C:\Users\~~~>activate rdkit
(rdkit) C:\Users\~~~>jupyter notebook
(1)モデル構築用データセット作成
「ECprediction_dataset.ipynb」を実行
モジュールインストール
pip install rdkit
(2)EC番号分類モデルの作成,テストデータの分類
「ECprediction_model.ipynb」を実行
モジュールインストール(多クラス分類,SMOTE用)
pip install scikit-learn==1.0.2
pip install imblearn
データ数が5個以下のものを削除する
- 層化5分割交差検証を実行するためにはデータ6個以上必要
- 6個では学習:テスト = 4:1分割で,学習5個/テスト1個となり,学習データのみに交差検証を行うため
- 10分割などの場合も,どのクラスもテストデータに最低1個は含まれる必要がある
- 【未実施】確率で同じデータを抽出する層化シャッフル抽出の場合は学習データが3個でも可能
EC番号が3桁目まで存在するクラスのみ抽出
- 現状のデータはEC T.X.X.X (T=1,2, ... ,7)でラベル付けされている.
- 本研究では3桁目の予測のため,3桁まで分かっているデータのみ用いる
- 遺伝子配列の手法では4桁まで予測されており,いずれはフィンガープリント・物理化学特性値でも開発されると予想(or 開発する必要がある)
- 正規表現のor記法(|)を用い,EC X.X.X.X,EC X.X.X.-,EC X.X.X.S(Sは MetaNetX 固有の文字区別)のデータを抽出する
削除するデータ
- EC7のデータ(データ数が少ないため)
- EC X.-.-.-やEC X.X.-.-などのデータ(1桁分類,1~2桁分類になら使用可能)
【懸念事項】ラベル変更によるクラス分布の変動(交差検証)
4桁までのクラスで層化抽出したデータを1桁or1~3桁に変更した場合,各クラスの学習データとテストデータの割合は一定かどうか(層化抽出が崩れていないか)
- 割合を検証したところ,どのクラスも学習75~85%,テスト15~25%で分布していたため,train_test_splitの標準通りと考えられる.
- 少なくとも4桁の時点で最低5個あるので,3桁クラスでは必ず5個以上ある(5分割可能)