Лекция 7: Введение в ML. KNN и Метрики классификации
Цели лекции
- Понять общий пайплайн машинного обучения: от сырых данных до предсказания.
- Освоить Train/Test Split — главное правило валидации моделей.
- Разобрать KNN (K-Nearest Neighbors) — самый интуитивный алгоритм классификации.
- Научиться правильно оценивать качество: почему Accuracy врет и зачем нужны Precision, Recall и F1.
Часть 1: Философия ML. Обучение с учителем
В классическом программировании вы пишете правила: if age < 18: return "Child". В машинном обучении (Supervised Learning) вы даете алгоритму Данные (возраст) и Ответы (“Child”), а алгоритм сам находит правила.
1.1. Основные понятия
- Features (X, Признаки): То, на основе чего мы делаем прогноз (возраст, доход, пол). Обычно это матрица (таблица).
- Target (y, Целевая переменная): То, что мы хотим предсказать.
- Если — категория (Кошка/Собака/Хомяк) -> Классификация.
- Если — число (Цена квартиры, Температура) -> Регрессия.
1.2. Пайплайн Scikit-Learn
В Python стандартом является библиотека sklearn. Все модели в ней работают одинаково, предоставляя единый интерфейс:
- Import:
from sklearn.model import ModelName - Instantiate:
model = ModelName(hyperparameters)— создание “пустой” модели. - Fit:
model.fit(X_train, y_train)— обучение (поиск закономерностей). - Predict:
y_pred = model.predict(X_test)— предсказание на новых данных.
Часть 2: Train/Test Split — Золотое правило
Представьте, что вы готовитесь к экзамену, заучивая ответы на билеты. Если на экзамене вам дадут те же билеты, вы получите 5. Но знаете ли вы предмет? Нет. Вы просто запомнили (Overfitting). Чтобы проверить реальные знания, вопросы на экзамене должны отличаться от тех, что были в учебнике.
2.1. Разделение данных
Мы всегда делим данные на две части:
- Train (Обучающая выборка, 70-80%): На этих данных модель ищет закономерности.
- Test (Тестовая выборка, 20-30%): Эти данные мы прячем от модели. Мы используем их только для финальной проверки качества.
2.2. Реализация в коде
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
X, y,
test_size=0.2,
random_state=42
)
Зачем нужен random_state?
Параметр random_state=42 фиксирует случайность. Если не указать, каждый запуск будет давать разное разбиение и разный результат. В инженерии крайне важна воспроизводимость экспериментов.
Часть 3: Алгоритм KNN (Метод ближайших соседей)
Это простейший алгоритм, основанный на житейской мудрости: “Скажи мне, кто твои друзья, и я скажу, кто ты”.
3.1. Как это работает
У нас есть пространство признаков (например, график Вес vs Рост). Новая точка падает на график.
- Мы измеряем расстояние от новой точки до всех известных точек.
- Берем самых близких соседей.
- Смотрим на их класс. Если среди 5 соседей 4 “Синих” и 1 “Красный” — мы классифицируем новую точку как “Синюю”.
3.2. Гиперпараметр K (Количество соседей)
Выбор количества соседей кардинально меняет поведение модели.
3.3. Важность масштабирования (Scaling)
Критическое правило для KNN
KNN считает расстояния (Евклидову метрику).
- Признак А: Зарплата (10 000 — 100 000).
- Признак Б: Возраст (20 — 60).
Разница в зарплате в 1000 рублей будет для алгоритма важнее, чем разница в возрасте в 40 лет.
Правило: Перед KNN данные обязательно нужно нормализовать (используйте StandardScaler).
Часть 4: Метрики классификации
Как понять, хороша ли модель?
4.1. Accuracy (Точность) — Королева лжи
- Ситуация: Мы ищем редкую болезнь (1 больной на 100 здоровых).
- Глупая модель: Всегда говорит “Здоров”.
- Результат: Accuracy = 99%. Звучит круто, но модель бесполезна — мы пропустили больного.
Вывод: Accuracy работает только на сбалансированных классах (50/50).
4.2. Матрица ошибок (Confusion Matrix)
Это таблица 2x2, которая дает полную картину предсказаний:
- TP (True Positive): Сказали “Да”, и это правда.
- TN (True Negative): Сказали “Нет”, и это правда.
- FP (False Positive, Ложная тревога): Сказали “Болен”, а он здоров. (Ошибка I рода).
- FN (False Negative, Пропуск цели): Сказали “Здоров”, а он болен. (Ошибка II рода).