医mportブログ

雑記っき

主成分分析をゲキ簡単な手法でやってみた

こんにちは。

今回は統計学にカテゴライズされる記事で、主成分分析というものをやってみます。

主成分分析は詳しい説明は省きますが、簡単に言うと、ごちゃごちゃしたいろんな要素で構成される結果を、少ない要素で表すことはできないかという試みのこと。例えば、身長が伸びれば体重はだいたい大きくなって正の相関があるわけだから、この2つの要素はぶっちゃけどっちか一つで良くね?という要領で要素を減らしていきます。


御託はこのくらいにして、今回はContrastive PCA(
GitHub - abidlabs/contrastive: Contrastive PCA)
を用いて,
こちらのデータ
https://raw.githubusercontent.com/maromato/RNA_data_analysis_1/master/TNBC10vNormal10_Counts_2.csv

を解析しました。このデータはハーバード大学医学部バイオインフォマティックスコースで利用されている乳がん細胞と正常細胞の遺伝子発現データです。

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

これらのライブラリを用意します。
特にcontrastiveモジュールは特有のモジュールなのでgithubから必ずcloneしてそのフォルダがある位置でプログラム実行してくださいね。

それでまあ学習用データ、バリデーションデータと分けて解析したわけですが、matplotlib使わなくてもcontrastiveモジュールにグラフ表示機能が内包されているのか勝手に結果が表示されました。


f:id:doinakadoctor:20190903185017p:plain

黒が正常細胞、赤が乳がん細胞のようです。しっかりと分類されてるのがみて取れます。2軸で今回は表されてるわけですね。ほんとは多次元なところを平面2次元グラフに表すところがミソなようです。

それにしてもCPCAが便利すぎるでしょ(笑) もう少し原理に基づいてプログラムを書くためにscikit-learnのPCAで次はなにかしらやってみようと思います。

スラスラプログラム書きたい場合、プログラミングは動画教材使ったり、なんならオンラインスクールのぞいてみるのもいいですね、成長は早いです。

参考にしたサイト
https://note.mu/tokitky/n/nf2cadefc4633