【Aidemy X Bio】がん細胞データをつかって、機械学習最先端手法Constrastive PCAをつかってみる

これまで乳がん細胞と正常細胞の遺伝子発現データをつかって、Aidemyの機械学習のコードを利用しながらいくつかプラットフォームをつくってきた。

【Aidemy X Bio】Aidemyのコースを応用して、遺伝子解析データ用の教師なし学習プラットフォームを作ってみた

【Aidemy X Bio】機械学習はがん細胞を見分けられるか?:遺伝子解析データをもとに教師あり学習(分類)を行ってみる!

教師なし学習の一つの手法であるPCAであるが、データ間のvariationが大きい場合、うまくクラスターがわかれないことがある。これを克服するためにコントロール群のデータvariationを前もって除去しておいて、データ内のクラスター間の分離を良くする手法Contrastive PCAが最近Stanford大のJames Zouらにより

Nature Communications volume 9, Article number: 2134 (2018)

に発表された。

 著者による説明は以下のyoutubeで参照できる

このContrastive PCAについて彼らはpython libraryを作り、チュートリアルをGithubで公開しているので、

これを利用して、乳がん細胞と正常細胞の遺伝子発現データを利用して、Contrastive PCAをおこなってみた!

%matplotlib inline
from sklearn.cluster import AffinityPropagation, KMeans, DBSCAN, SpectralClustering
from sklearn.manifold import MDS, TSNE, Isomap
from sklearn.metrics import silhouette_score

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from scipy.linalg import logm, expm
from contrastive import CPCA

ライブラリを読み込み

df_wine = pd.read_csv("TNBC10vNormal10_cpm_2.csv", sep=",",header=0, index_col=0)
df_wine_2 = df_wine.T
print(df_wine_2)

df_wine_2 = pd.DataFrame(df_wine_2)

X,y = df_wine_2.iloc[:, :].values, np.array([1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0])

データの読み込み

foreground_data = X[:,:]
background_data = X[10:20,:]
background_data
mdl = CPCA()
pre_cluster_lables = np.array([1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0])
                            
projected_data = mdl.fit_transform(foreground_data, background_data, plot=True,active_labels=pre_cluster_lables)

学習用データと、バックグラウンドデータをアサインし、教師なし学習させた。学習用データとして全データを、バックグラウンドデータを正常細胞データとする。

alphaの値が大きくなるに従って、バッククラウンドデータの正常細胞のクラスターが小さくなり、正常細胞(黒)とがん細胞(赤)の差が広がっているのがわかる。

foreground_data = X[:,:]
background_data = X[18:20,:]
background_data
mdl = CPCA()

pre_cluster_lables = np.array([1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0])
                            
projected_data = mdl.fit_transform(foreground_data, background_data, plot=True,active_labels=pre_cluster_lables)

正常細胞の一部をバックグラウンドデータとしてみても

同様の傾向が得られる

もともとそこそこよく分かれているデータなのでいまひとつ有効性がわかりにくが、チュートリアルによるデモの図だと、分離の悪いクラスター群がきちんと4群に分かれることがわかり。こうしたPCA等の手法はできるだけ多くのクラスターを見いだすことが重要であるから、この手法はかなりパワフルであると考えられる。

まずはContrastive PCAの導入がうまくいったようなので、今後これを利用していろいろ知見を深めていきたいと思う。またこの3月には機械学習はまったくの素人と言っていいほどだったので、Aidemyのコースをやったおかげで機械学習がある程度できるようになり、こんな風に新しい知見を取り入れていろいろ検討できるようになったのはありがたい。

この記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。

6

toshi

ボストン在住の医学系研究者!! @tokitky 最近R、Python, MLなどバイオインフォマティックスを勉強しています! 初学者に役立つ情報を紹介していきたいです。 (個人の見解を述べています)

機械学習ノート

機械学習の勉強のために行った解析やそのヒントを載せています!ぜひ覗いてみてください。あとコメントもお待ちしております。

コメント4件

初めまして。現在大学院修士一年で薬学を専攻している舟橋と申します。
僕も、toshihiko_okiさんのようにpythonで遺伝子解析をやっていこうと思い、Aidemyでまずpythonについて学んでいるところなのですが、
どのコースをやるのが一番良いでしょうか。
今、python入門コースが終わり、次は機械学習のコースをやろうと思っているのですが、これをやったほうがいいというコースなどがあったら、教えていただきたいです。


コメント長くなってしまい、申し訳ありませんが、お返事いただけると幸いです。
船橋さん、初めまして!

まず生物系のバックグランドある場合は、実際に自分に何が必要で、コースで習ったことを自分の仕事にどう生かせるのかをイメージしながら学習していくのが効率が良いですね。

特に機械学習ででてくるPCAとかクラスタリング、分類などは遺伝子解析に多用される手法なので自分の仕事に関連してイメージしやすいですし、またこのブログにもあるようにそのコードをそもまま利用して自分自身の仕事に使うこともできますのでおすすめです。
早速のご返信ありがとうございます。
とてもご丁寧なご指摘で大変ありがたいです。

なるほど。
まずは何をやりたいか明確にした方がということですね。
僕は、幼少期から耳が遠くて「難聴の原因遺伝」を調べたいと思い、まず初めは耳が遠い人と健常者の遺伝子を比較して、配列に有意差があるところがあるかないかを調べていこうと思っています。


早速今日から機械学習のコースをやっていきます。
本当にありがとうございます。
そして、検証として
いくつかのヒトゲノムを用いて、その遺伝子を持った人は難聴かそうでないか予想させるところまでやりたいと思っております。

お忙しい中、ご返信いただきありがとうございます。
本当に助かりました。
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。