Menu
CoddyTech

두 종류의 세포

Coddy Machine Learning 여정의 비지도 학습 섹션에 포함된 레슨. 51개 중 51번째.

한 실험실에서 조직 샘플 569개를 측정했으며, 각 샘플에는 세포 측정값이 30개씩 있습니다. 그래프로 나타내기에는 너무 많고, 사람이 눈으로 분류할 수도 없습니다:

측정값 30개씩이 있는 샘플 24개의 격자. 각 셀은 낮은 값의 파란색부터 높은 값의 빨간색까지 색으로 표시되어 있으며, 뚜렷한 패턴 없이 뒤섞여 있습니다

각 샘플의 진단 결과인 양성 또는 악성은 봉인된 봉투 안에 들어 있습니다. 진단 결과를 알지 못해도 세포들이 스스로 두 종류로 나뉠 수 있을까요?

PCA를 사용해 30개의 측정값을 축소하고, 남은 데이터로 군집화한 다음에야 봉투를 열어 세포들이 얼마나 가까이 모였는지 확인하세요.

challenge icon

챌린지

어려움

이 프로그램은 유지할 분산의 비율(0.7 이상)을 입력받으며, 시작 코드는 차트를 설정합니다.

  1. 스케일링한 다음 해당 비율에 도달하는 최소 개수의 주성분을 유지합니다. 개수와 이 주성분들이 유지하는 비율을 출력합니다.
  2. k-means로 해당 주성분들을 군집화합니다: k = 2, n_init=10, random_state=0.
  3. 봉투를 엽니다. 각 군집에 대해 크기가 큰 순서대로 진단 결과와 다수 진단을 출력합니다. 그런 다음 군집의 다수 진단과 일치하는 비율인 일치도를 출력합니다.
  4. 군집별로 처음 두 주성분을 산점도로 표시하고, 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

그리고 해당 차트는 다음과 같습니다.

처음 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 컴파일러