Menu
CoddyTech

2種類のセル

CoddyのMachine Learningジャーニー「教師なし学習」セクションの一部。レッスン 51/51。

ある研究室で、569個の組織サンプルを測定し、それぞれについて30個の細胞測定値を得ました。プロットするには多すぎて、目視で分類することもできません。

24個のサンプルと30個の測定値を並べたグリッド。各セルは値の低さを青、高さを赤で示しており、明確なパターンのない寄せ集めになっている

各サンプルの診断結果(良性か悪性か)は、封筒に入れて封がされています。診断結果を知らなくても、細胞は自分たちを2種類に分けられるでしょうか?

PCAで30個の測定値を縮約し、残ったデータをクラスタリングしてから、最後に封筒を開けて細胞がどれほど近くに集まったかを確認しましょう。

challenge icon

チャレンジ

難しい

プログラムは保持する分散の割合(0.7以上)を読み込みます。スターターコードではグラフが設定されています。

  1. スケーリングしてから、その割合に達する最小数の主成分を保持します。数と、それらが保持する割合を出力します。
  2. その主成分をk-meansでクラスタリングします。k = 2、n_init=10、random_state=0。
  3. 封筒を開けます。各クラスタについて、サンプル数の多い順に、診断結果と多数派を出力します。続いて、一致率、つまりクラスタ内の多数派と診断が一致する割合を出力します。
  4. 各クラスタについて最初の2つの主成分を散布図にし、mostly benignまたはmostly malignantというラベルを付けます。凡例を付けて表示します。

最初の300サンプルを使い、0.8を指定した場合:

Components for 80% of the variance: 5 (they keep 0.844)
Cluster of 175: 146 benign, 29 malignant, so mostly benign
Cluster of 125: 8 benign, 117 malignant, so mostly malignant
Agreement with the diagnosis: 0.877

そのグラフ:

最初の2つの主成分にプロットした最初の300サンプル。左側に主に良性のクラスタがあり、右側に主に悪性のクラスタが広がっている。凡例付き

その後、Coddyがあなたの結果を説明します。

自分で試してみよう

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans

# 組織サンプル569件、各サンプルにつき細胞の測定値30項目
cancer = load_breast_cancer(as_frame=True)
cells = cancer.data
# 封をした封筒:各サンプルが良性か悪性かを示す情報。開くのは最後だけ。
diagnosis = pd.Series(cancer.target_names[cancer.target])

# 保持する分散の割合。0.7以上
share = float(input())

fig, ax = plt.subplots()
ax.set_title("Cells on Two Components")
ax.set_xlabel("Component 1")
ax.set_ylabel("Component 2")

# 以下にコードを書いてください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

教師なし学習のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ