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?

More than 1 year has passed since last update.

CAFA 5 Protein Function Prediction DeepGOの写経(2023/07/10)

Posted at

はじめに

6/30, 7/2,7/3 のメモの続きです。
以下のkaggle コンペについての覚書です。

目次

  1. 概観
  2. uni2pandas.py
  3. deepgozero_data.py
  4. deepgozero.py
  5. deepgozero_predict.py
  6. 次やること

DeepGOZero: Improving protein function prediction from sequence and zero-shot learning based on ontology axioms

とりあえず公開されている GO term を予測するプログラムをそのまま実行した。
github も google colab もなにもわかっていないからプログラムをコピーするだけで大変。

実行するファイル

README に書いてあることのコピペ。

  • uni2pandas.py - UniProtデータベースフォーマットからpandasデータフレームに変換するスクリプトです。
  • deepgozero_data.py - トレーニングデータセットとテストデータセットを生成するスクリプトです。
  • deepgozero.py - モデルの学習に使用します。
  • deepgozero_predict.py - ゼロショット予測を行うスクリプトです。
  • evaluate.py - Fmax、Smin、AUPRを計算するスクリプトです。
  • evaluate_terms.py - クラス中心の平均AUCを計算するスクリプトです。
  • Normalizer.groovy - OWLオントロジーを正規化するスクリプト。
  • Corpus.groovy - クラスの公理定義を抽出するスクリプトです。
  • deepgopro.py - このスクリプトはMLPベースラインモデルの学習に使用されます。
  • deepgocnn.py - このスクリプトは、DeepGOCNNモデルの学習に使用されます。
  • run_diamond.sh - このスクリプトはDiamond予測値を得るために使用されます。

一つずつ入出力を確認する。

uni2pandas.py

UniProtデータベースフォーマットからpandasデータフレームに変換するスクリプトです。

[options]
'--swissprot-file', '-sf', default='data/uniprot_sprot_2021_04.dat.gz', help='UniProt/SwissProt knowledgebase file in text format (archived)'
'--out-file', '-o', default='data/swissprot.pkl', help='Result file with a list of proteins, sequences and annotations'

[input]
data/uniprot_sprot.dat.gz
よくわかんない。とりあえず最新版をUniProt のページからダウンロードできる。
上から何行か確認してみたけど、やっぱりわかんない。

b'ID   001R_FRG3G              Reviewed;         256 AA.\n'
b'AC   Q6GZX4;\n'
b'DT   28-JUN-2011, integrated into UniProtKB/Swiss-Prot.\n'
b'DT   19-JUL-2004, sequence version 1.\n'
b'DT   02-JUN-2021, entry version 42.\n'
b'DE   RecName: Full=Putative transcription factor 001R;\n'
b'GN   ORFNames=FV3-001R;\n'
b'OS   Frog virus 3 (isolate Goorha) (FV-3).\n'
b'OC   Viruses; Varidnaviria; Bamfordvirae; Nucleocytoviricota; Megaviricetes;\n'
b'OC   Pimascovirales; Iridoviridae; Alphairidovirinae; Ranavirus.\n'
b'OX   NCBI_TaxID=654924;\n'
b'OH   NCBI_TaxID=30343; Dryophytes versicolor (chameleon treefrog).\n'
b'OH   NCBI_TaxID=8404; Lithobates pipiens (Northern leopard frog) (Rana pipiens).\n'

data/swissprot_exp.pkl
データの出典はわからなかった。
pandas DataFrame 型。
列名は ['index', 'proteins', 'accessions', 'genes', 'sequences', 'annotations', 'string_ids', 'orgs', 'interpros', 'exp_annotations', 'prop_annotations', 'cafa_target']。
image.png

[output]
data/swissprot_exp.pkl
pandas DataFrame 型。入力に使ったものを上書きしている。
列名は ['index', 'proteins', 'accessions', 'genes', 'sequences', 'annotations', 'string_ids', 'orgs', 'interpros', 'exp_annotations', 'prop_annotations', 'cafa_target']で、さっきと同じ。
変わったところが見当たらないけど、わたしがプログラムを一度実行して元データを書き換えたからかも。
プログラムを見ると'exp_annotations', 'prop_annotations', 'cafa_target' の列について変更を加えているぽい。

deepgozero_data.py

トレーニングデータセットとテストデータセットを生成するスクリプトです。
[options]
'--go-file', '-gf', default='data/go.obo', help='Gene Ontology file in OBO Format'
'--data-file', '-df', default='data/swissprot_exp.pkl', help='Uniprot KB, generated with uni2pandas.py'
'--sim-file', '-sf', default='data/swissprot_exp.sim', help='Sequence similarity generated with Diamond'

[input]
data/go.obo
GO ontology の各タームの説明と親子関係のデータ。

b'[Term]\n'
b'id: GO:0000001\n'
b'name: mitochondrion inheritance\n'
b'namespace: biological_process\n'
b'def: "The distribution of mitochondria, including the mitochondrial genome, into daughter cells after mitosis or meiosis, mediated by interactions between mitochondria and the cytoskeleton." [GOC:mcc, PMID:10873824, PMID:11389764]\n'
b'synonym: "mitochondrial inheritance" EXACT []\n'
b'is_a: GO:0048308 ! organelle inheritance\n'
b'is_a: GO:0048311 ! mitochondrion distribution\n'
b'\n'

data/swissprot_exp.pkl
前のプログラムで出力したやつ。

data/swissprot_exp.sim
options の説明にある"Sequence similarity generated with Diamond" でぐぐるとわからない説明が出てくる。

b'11K_PAVHV\t11K_PAVHV\t100\n'
b'11S1_CARIL\t11S1_CARIL\t100\n'
b'11S1_CARIL\tJUGR4_JUGRE\t94.3\n'
b'11S1_CARIL\tJUGN4_JUGNI\t89.1\n'
b'11S1_CARIL\tANAO2_ANAOC\t57.9\n'
b'11S1_CARIL\tPRU01_PRUDU\t50.4\n'
b'11S1_CARIL\tPRU1_PRUDU\t49.9\n'
b'11S1_CARIL\tCOS1_COCNU\t45.4\n'
b'11S1_CARIL\tGLYG1_SOYBN\t47.7\n'

[output]
data/mf/train_data_hard.pkl
data/mf/valid_data_hard.pkl
data/mf/test_data_hard.pkl
入力した data/swissprot_exp.pkl の pandas DataFrame 型データの分割。
train 81%, valid 9%, test 10% で配分している。
GO term には BPO, CCO, MFO というグループがあって、それごとに分けている。
それ以外ではたぶんだけど完全ランダム。

data/mf/terms.pkl
GO term の列挙、だと思う。7151 件。

             gos
0     GO:0045735
1     GO:0005488
2     GO:0019865
3     GO:0019863
4     GO:0044877

deepgozero.py

モデルの学習に使用します。
[options]
'--data-root', '-dr', default='data', help='Prediction model'
'--ont', '-ont', default='mf', help='Prediction model'
'--batch-size', '-bs', default=37, help='Batch size for training'
'--epochs', '-ep', default=256, help='Training epochs'
'--load', '-ld', is_flag=True, help='Load Model?'
'--device', '-d', default='cuda:1', help='Device'
個人的に、-d オプションは 'cuda' ってしないとエラーが出た。

[input]
前プログラムの出力が train_data_hard, test_data_hard とかだったので、最後の_hard の部分を消しておく。
data/mf/terms.pkl についても data/mf/terms_zero_10.pkl に変えておく。

{data_root}/{ont}/terms_zero_10.pkl
terms.pkl の何かしらの制限だと思うけど、コードがないしよくわかんない。2041 件。

             gos
0     GO:0045735
1     GO:0019001
2     GO:0017076

[output]
{data_root}/{ont}/deepgozero_zero_10.th
学習したモデル

{data_root}/{ont}/predictions_deepgozero_zero_10.pkl
pandas DataFrame 型。
列名は['proteins', 'accessions', 'genes', 'sequences', 'annotations', 'string_ids', 'orgs', 'interpros', 'exp_annotations', 'prop_annotations', 'cafa_target', 'preds']。
image.png

一番上の id 9299 の行を見てみる。
interpros : ['IPR001168', 'IPR000276', 'IPR017452', 'IPR001671'] 長さ 4
exp_annotations : ['GO:0005886', 'GO:0004978', 'GO:0004977', 'GO:0007189', 'GO:0007186', 'GO:0007187'] 長さ 6
prop_annotations : ['GO:0004930', 'GO:0033218', 'GO:0019932', ......
'GO:0110165', 'GO:0008188', 'GO:0004888'] 長さ 62
preds : [0.0059625 0.00552347 0.00662551 ... 0.00666691 0.00647238 0.00467796] 長さ 2041
preds は data/mf/terms_zero_10.pkl に挙げられた GO terms に対応しているみたい。

deepgozero_predict.py

ゼロショット予測を行うスクリプトです。
アノテーションのない GO term を予測するのかな。よくわかんない。あと動かないし。

[input]
data/definitions_go.txt

b'GO_0005753: GO_0045259 and BFO_0000050 some GO_0005739\n'
b'GO_1905618: GO_0065007 and RO_0002213 some GO_0035278\n'
b'GO_0001988: GO_0010460 and BFO_0000050 some GO_0001982\n'
b'GO_0001976: GO_0050877 and BFO_0000050 some GO_0003073\n'
b'GO_0002500: GO_0002496 and BFO_0000066 some GO_0005764\n'

力尽きたので以降のプログラムはなし。

やりたいこと

google colaboratory でやっていると、GCN のライブラリのインストールがうまくいかなかった。
理屈は一切わからないけど以下のおまじないでなんとかなった。
ただしフォルダはぐちゃぐちゃになる。

!git clone https://github.com/joerg84/Graph_Powered_ML_Workshop.git
!rsync -av Graph_Powered_ML_Workshop/ ./ --exclude=.git
!pip3 install dgl

とりあえず再学習とかなしでそのまま動かして、一度これで行った計算を kaggle に提出したい。目標は低いところから。

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?