Введение в ML: Классификация с KNN
Цель: Построить свой первый полноценный пайплайн машинного обучения: от разделения данных до оценки качества модели. Мы решим задачу бинарной классификации, используя алгоритм k-ближайших соседей (KNN), и научимся выбирать правильные метрики, когда Accuracy врет.
Инструменты:
sklearn.model_selection: для разделения данных.sklearn.preprocessing: для масштабирования (StandardScaler).sklearn.neighbors: сама модель KNN.sklearn.metrics: инструменты оценки.
Данные: Мы будем работать с классическим датасетом Breast Cancer Wisconsin (Рак груди).
- Признаки (X): Характеристики клеточного ядра (радиус, текстура, периметр и т.д.).
- Целевая переменная (y): Диагноз (0 = Malignant/Злокачественная, 1 = Benign/Доброкачественная).
- Примечание: В sklearn часто 0 - это Malignant, но всегда лучше проверять
target_names.
- Примечание: В sklearn часто 0 - это Malignant, но всегда лучше проверять
Часть 1: Подготовка данных и Train/Test Split
Модели нельзя давать "подглядывать" в ответы теста.
Задание 1.1: Загрузка и первичный осмотр
- Загрузите датасет
load_breast_cancerизsklearn.datasets. - Создайте DataFrame для удобства просмотра.
- Посмотрите баланс классов (сколько 0 и сколько 1). Это важно для выбора метрики.
Часть 2: Масштабирование (Scaling) — Критически важно для KNN
KNN измеряет расстояния. Если один признак изменяется в пределах [0, 0.1], а другой [0, 1000], второй будет полностью доминировать. Нужно привести их к одному масштабу.
Золотое правило масштабирования
Правило: StandardScaler обучается (fit) ТОЛЬКО на Train, и применяется (transform) к Train и Test. Иначе — утечка данных.
Задание 2.1: StandardScaler
- Создайте объект
StandardScaler. - Обучите его на
X_trainи трансформируйтеX_train. - Трансформируйте
X_test(без обучения!).
Часть 3: Обучение и Предсказание
Задание 3.1: KNN Classifier
- Импортируйте
KNeighborsClassifier. - Создайте модель с
n_neighbors=5. - Обучите (
fit) на масштабированных данных. - Сделайте предсказание (
predict) для теста.
Часть 4: Оценка качества (Evaluation)
Мы диагностируем рак.
Типы ошибок классификации
- Ошибка I рода (False Positive): Сказали "Рак", а человек здоров. Стресс, биопсия, но человек жив.
- Ошибка II рода (False Negative): Сказали "Здоров", а у человека рак. Человек может умереть.
В этой задаче Recall (способность найти всех больных) важнее Precision.
Примечание: В sklearn датасете 0 = Malignant (Злокачественная). Чтобы метрики считались корректно для "Болезни" (класса 0), можно либо инвертировать метки, либо смотреть внимательно на отчет. В classification_report мы увидим метрики для каждого класса.
Задание 4.1: Матрица ошибок и Метрики
- Постройте Confusion Matrix (тепловую карту).
- Выведите
classification_report. - Посчитайте
accuracy_score.
Часть 5 (Бонус): Поиск лучшего K
Как выбрать n_neighbors? Давайте переберем значения от 1 до 20 и посмотрим, как меняется ошибка.
Задание 5.1: Цикл обучения
- Запустите цикл
kот 1 до 20. - В каждой итерации обучайте KNN, делайте предсказание и сохраняйте
accuracy(или F1) в список. - Постройте график зависимости метрики от K.