Два типа клеток
Часть раздела Обучение без учителя путешествия по Machine Learning на Coddy. Урок 51 из 51.
В лаборатории измерили 569 образцов тканей, по 30 измерений клеток в каждом. Слишком много, чтобы построить график, да и глаз не может их упорядочить:
Диагноз каждого образца — доброкачественный или злокачественный — находится в запечатанном конверте. Смогут ли клетки разделиться на два типа без этой информации?
Сократите 30 измерений с помощью PCA, кластеризуйте то, что останется, и только потом вскройте конверт, чтобы увидеть, насколько близко оказались ячейки.
Задание
СложноПрограмма считывает долю дисперсии, которую нужно сохранить: 0.7 или больше; заготовка настраивает график.
- Масштабируй данные, затем оставь минимальное число компонент, обеспечивающее эту долю. Выведи их количество и долю дисперсии, которую они сохраняют.
- Кластеризуй эти компоненты методом k-means: k = 2,
n_init=10,random_state=0. - Открой конверт: для каждого кластера, начиная с самого большого, выведи диагнозы и диагноз большинства. Затем выведи долю совпадений с диагнозом большинства в соответствующем кластере.
- Построй диаграмму рассеяния по первым двум компонентам для каждого кластера, обозначив их как
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и их график:
Затем 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")
# Напишите свой код ниже
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Обучение без учителя
1Поиск групп
Обучение без метокИзмерение сходстваK-Means вручнуюK-Means в scikit-learnПовторение: участники спортзала4Иерархическая кластеризация
Пошаговое объединениеАгломеративные моделиДендрограммыПовторение: породы собак2Выбор k
ИнерцияМетод локтяОценки силуэтаМасштабирование перед кластеризациейПовторение: зоны доставкиПотренируйтесь самостоятельно: Онлайн-компилятор Python