武藤?
有機合成での化学反応に用いる最適な酵素の予測
研究を始めた経緯
- 3Dグラフの遺伝子マップ(kegg pathway)を何かに使えないか生物の先生方に提案したが、パスウェイ研究に詳しい方が学内におられず、利用価値が見いだせなかった
- 代わりに学内の有機化学研究において、酵素を用いた逆合成解析(Retrosynthetic Analysis)(=化学反応予測)を機械学習で予測しようとしている試みが始まっており、「遺伝子3Dグラフで持っていた「react_equation.csv」のデータと情報技術が活かせるのではないか」ということで生物工学棟の研究室に出向する形で取り組むことになった。
1.背景
- 有機化合物(高分子など)の合成では触媒として酵素が用いられる機会が増えてきた
- 人工的な触媒に対して、酵素は自然にやさしく、反応がより効率的に進むのが強み
- 熟練の合成研究者ならどの酵素を使うべきかはだいたい分かる
- 最適候補を決め、実験(スクリーニング)によって1つの酵素に絞る
- 経験豊富でない場合、酵素DBや酵素研究者との実験などで探索→時間がかかる
- 最適酵素「候補」を予測し、探索時間を短縮できるような機械学習手法を提案(あくまで1つに絞らず「候補を出す」ところまでで、その後は酵素の専門領域)
本研究は前半と後半に分かれ、前半は教師なしのクラスタリング。後半は教師ありのクラス分類を行っている
2.酵素分野の基礎事項
- 酵素はEC番号で管理されている
- 4桁の番号で、1~3番はどの反応・化合物に作用するかで分類、4番目はただの名前
- 基本的にKEGGなどのDBに登録されており、自然界で化合物に作用して反応を起こす
- 1つのEC番号4桁に属する酵素は基本複数ある(BRENDA記載のものなど)
予測したいのは厳密には酵素ではなくEC番号になる(EC番号が「候補」となり、その後のスクリーニングでそのEC番号から1つを選んでもらう)
3. ケモインフォマティクス技術と情報技術
ケモインフォマティクス:
酵素の探索にしても、化学反応の設計にしてもコンピュータで化合物を扱えると何かと便利→コンピュータが認識できる形で化合物を表現する技法などの大全
- MOL,SDFファイル
- 1つの化合物の分子の位置や構造情報を行列のようなもので表したテキストファイル
- MOLは1つの化合物でSDFは複数のMOLをつなげたもの(DBで化合物の構造情報を手に入れるときは基本このファイルを見る)
- SMILES
- 化合物の構造式を文字列で表したもの
- @や[]を使うことで3次元構造を上手く表現する
- イメージ的にこれ単体で使うことはなく、データのコンパクト格納や次の変換に使う
- ベクトル
- 化合物に対して、分子量や電荷の偏りなどの物性値・化学値を計算
- 計算したn種類の物性値をn次元ベクトルで表現することで、その化合物の特徴ベクトルを作ることができる(機械学習への応用範囲がかなり広い)
- 物性値計算ライブラリが豊富にある(本研究はRDKitを使用)
- フィンガープリント
- 化合物が「-OH」,「-CH4」といった特定の部分構造を持っているかをフラグ判定し、多次元のビット列にしたもの
- 物性値が化合物全体の特性をみるとするなら、フィンガープリントは一部分のみを見ている感じ(化学反応が起こる部位のみに着目すればより高精度な特徴抽出になる)
- Pythonライブラリ「RDKit」
- なんでもできてしまうケモインフォマティクスの便利屋
- SDFファイルを取得し、構造式を描画、SMILES変換、208種類の物性値計算だけでなく、フィンガープリントベクトルの類似度比較などもできる
- 日本語ドキュメントだけでなく、Webにも分かりやすい教科書サイトがある。
5.1. 数値実験(概要)
5.2. 数値実験(結果)*
データ収集(.RはR言語で実装されたソースコード)
geneGraphフォルダ
「CompoundIDs.R」を用いたデータ取得
「https://rstudio-pubs-static.s3.amazonaws.com/472676_97a2c135b5704dc1b52f7759b73466e8.html#kegg-reaction-id」の「6 KEGG COMPOUND」に書かれているソースコードを利用している
- write.csv(cpd_pub,"KEGG_CIDtoPubChemSID.csv")の行まで全コピペして実行
- KEGG COMPOUNDに収録されている化合物(番号KEGG CIDで表記)リストを取得
- 「PubChem Identifier Exchange Service」を用い、pubchemSIDをpubchemCIDに変換する
- kegg_CID&pubchemSID&CIDの対応表「kcid_psidcid.csv」と重複pubchemSIDリスト「duplicated_cp.csv」が出力される
- 「kcid_psidcid.csv」はメインのJupyterコードで使用
- pubchemCIDが一意なのに対し,pubchemSIDにはダブりがあるため、「duplicated_cp.csv」はその確認用
(注)途中手動で行う部分が入るため,rの対話モードで1行ずつコピペ実行すること推奨
→「<-」が代入になるのでそれが基準(%>%は連続代入なので分割しないこと)
基本的には添付ファイルのファイルを使えば、この作業は短縮しても良いが、keggCIDは遺伝子探索で年々新規IDが追加されているので、アップデートを行う場合は必要となる
スクレイピング
PunChemのRestAPIを用いてSDFファイルを取得する
- ec_rsidの左右辺に入っているsidを抽出(リスト化)し、Pubchem URIに従って各化合物(sid)のSDFファイルを取得する
当初はpubchem CIDで取得しようとしたが、sid用のURIしか用意されていなかったのでsidを用いた。
「PubChem Identifier Exchange Service」を用いず途中の「KEGG_CIDtoPubChemSID.csv」のみで実行可能になった
- rdkitのChem.SDMolSupplierを用いてmolファイルに変換する
ケモインフォマティクス
anaconda rdkit専用チャネルの作成
バージョン取得
python -V
rdkit チャネル作成
conda create -n rdkit python=X.X.X -y
※baseチャネルからrdkitチャネルに変更(Anaconda Prompt)
conda activate rdkit
rdkitライブラリの導入(pipでは不可)
conda install rdkit -c conda-forge
jupyterカーネル導入
pip install jupyter environment_kernels
Reference
第1章
第2章
【手順】
テキストマイニングによる遺伝子間の関係性の可視化(没2)
【従来研究】単語関係の可視化(Web,Twitterスクレイピング&テキストマイニング)との違い↓
各サイトからスクレイピングした際,文章の結合ができない
→遺伝子配列同士を結合させると意味のないものになってしまう
自前で一貫した長い配列と辞書データベースを準備
→スクレイピングがいらなくなる
◎長い遺伝子配列に関するキーワードでスクレイピングして,出てきた遺伝子でDBを作るという手もある
案1:従来にほぼ近づけた方法
(1)各リンク内の遺伝子配列に対して,辞書を参考にして遺伝子を抽出
(2)単語リストのときと同様に抽出した遺伝子をリストに入れる
(3)重複遺伝子を除去し,隣接行列取得
案2:↑の◎
長い配列がある疾患のDNAとしたとき,その疾患に関係してくるとされる遺伝子や直接働きかける作用を持つ遺伝子などをキーワードにしてスクレイピングし,出てきたそれぞれの配列を辞書DBに蓄積する.
遺伝子データベースそれぞれのリンク先
【KEGG API】学名(生物名)リスト
http://rest.kegg.jp/list/organism
【KEGG API】ヒト遺伝子vsパスウェイ対応表(パスウェイ順)(hsaを取得した略語に変換)
http://rest.kegg.jp/link/pathway/hsa
【KEGG API】全パスウェイリスト
http://rest.kegg.jp/list/pathway
(通常サイト)>>>https://www.genome.jp/kegg/pathway.html
KEGG関連のテキストマイニング作業について
https://sites.google.com/site/scriptofbioinformatics/cytoscape-guan-xi/kgml-jie-weideno-zuo-ye-perl
【NCBI】ヒト完全ゲノムデータベース(サーバ内ディレクトリ)
https://ftp.ncbi.nih.gov/genomes/refseq/vertebrate_mammalian/Homo_sapiens/latest_assembly_versions/GCF_000001405.39_GRCh38.p13/
BLASTP(タンパク質 相同性検索)
https://blast.ncbi.nlm.nih.gov/Blast.cgi
スパース(疎)構造学習(没1)
1.侵入検知システム(機械学習型IDS)
データセット:DARPA1998(TCPdumpしたトラフィックデータ)
↓
1分単位のパケット数を時系列特徴量とした
↓
対数差分系列データへ変換&標準化
目標:各時系列特徴間の直接相関関係のグラフ構造を求める
→(多変量正規分布を想定)ガウス型グラフィカルモデルに精度行列(A)
(変数間の直接相関を表す)を推定する問題=構造学習
ノイズを排除して疎なAを求める
→Graphical Lasso
手順
1.トラフィックデータをグラフ化
2.制度行列Aから算出した変相関係数を用いて描画(多分エッジの太さと正負関係を表す)
→全特徴量間に相関が出る完全グラフができた
3.GLを適用すると疎なグラフ構造ができた
4.グラフ表示時のトラフィックデータをNFPで学習させる
(グラフ時系列データにラベルを付与し、NFPで学習させ、異常状態の予測)
5.精度98%の予測ができた(トラフィックデータ以外の様々な時系列データに応用できそう)
- NFPとは
- グラフ畳み込みNN(GCNN)を化学分野に応用したもの
- 化学の分子構造をグラフとみて学習させ水溶度・毒性などの予測をする
作ったグラフにGraphical Lasso を適用して