Menu
CoddyTech

Два типа клеток

Часть раздела Обучение без учителя путешествия по Machine Learning на Coddy. Урок 51 из 51.

В лаборатории измерили 569 образцов тканей, по 30 измерений клеток в каждом. Слишком много, чтобы построить график, да и глаз не может их упорядочить:

Сетка из 24 образцов и 30 измерений, каждая ячейка окрашена от синего для низких значений до красного для высоких — лоскутная картина без чёткого узора

Диагноз каждого образца — доброкачественный или злокачественный — находится в запечатанном конверте. Смогут ли клетки разделиться на два типа без этой информации?

Сократите 30 измерений с помощью PCA, кластеризуйте то, что останется, и только потом вскройте конверт, чтобы увидеть, насколько близко оказались ячейки.

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