和風ましらに

機械学習とか勉強したことを書き認めるブログ

ゲノムに畳み込みニューラルネットワーク(CNN)を使用し表現型を予測する

やったこと

小麦の遺伝子の情報から表現型を予測するという論文を読んでみました。

DeepGS: Predicting phenotypes from genotypes using Deep Learning という論文です。twitterでいい感じの論文ないかなと思って探してたら、ちょうどいいのを見つけました。

概要

データを、各個体の遺伝子が存在するかしないかを0,1で表現し、CNNで特徴を読み込んでいます。(論文中では、以下のように記載)

For the DArT markers, an allele was encoded by either 1 or 0, to indicate its presence or absence, respectively.

以下の表現型に対して、教師データ的なのがついてるっぽい。

  • grain length(GL):粒の長さ
  • grain width (GW):粒の幅
  • grain hardness (GH):粒の硬さ
  • thousand-kernel weight(TKW):千カーネルの重み(?)
  • test weight (TW):何かしらの重さ(←)
  • sodium dodecyl sulphate-sedimentation(SDS): ドデシル硫酸ナトリウム量
  • grain protein (GP):含たんぱく質
  • plant height (PHT):個体の高さ

今回のCNNの全体像はこんな感じ。

CNN_genome (論文より引用)

実際のモデルは、既存のアルゴリズム(RR-BL)と混ぜて、作成しているみたいです。 以下、ザックリと今回のCNNについて。

8-32-1 architecture (i.e. eight nodes in the first hidden layer, 32 nodes in the second hidden layer, and one node in the output layer)

超ザックリとした学習の流れ

  1. 数値で表現した遺伝子データを用意する
  2. フィルタを使って畳み込み演算を行う(畳み込み層)
  3. 行列内の指定範囲の最大値を取得する(プーリング層)
  4. 使用するデータを絞る(Drop out層。多分勾配消失を防ぐため)
  5. 情報を集約する(結合層)
  6. 目的関数を減少させる向きに、誤差逆伝播法でフィルタを更新する (2-5の繰り返し。)

所感

やっぱりゲノムの話と機械学習の話は組み合わせると面白いなと思いました。(小並感)

ただ一方で、今回の課題設定だとCNN以外にもLight GBMやCatboostとかでもいける気がする。 どうせ混ぜるなら、いろいろモデル混ぜた方が予測精度は上がるんじゃないかなと思いました。

あと、遺伝子の欠損を0,1で表現するのは問題ないんでしょうか? (実は裏で、RNA-seqとかで遺伝子の発現みてるとか?)

とりま、たまにここら辺の論文も読んでいこうと思います。