Машинное обучение: обучение с учителем и метрики качества

Виды обучения, подготовка данных, переобучение и валидация, метрики для классификации и регрессии, порядок работы над учебной моделью.

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

Виды обучения

ВидЧто даноЗадачи
С учителемПризнаки и правильные ответыКлассификация, регрессия
Без учителяТолько признакиКластеризация, снижение размерности, поиск аномалий
С подкреплениемСреда и награда за действияУправление, игры, робототехника

Порядок работы

  1. Постановка: что предсказываем и что считать успехом.
  2. Сбор и очистка данных: пропуски, выбросы, дубликаты.
  3. Формирование признаков: кодирование категорий, масштабирование, новые производные признаки.
  4. Разделение выборки: обучающая, валидационная, тестовая (обычно 60/20/20).
  5. Обучение нескольких моделей от простой к сложной.
  6. Оценка по метрикам на тестовой выборке, которую модель не видела.
  7. Интерпретация: какие признаки оказались значимыми.
Тестовую выборку нельзя использовать для подбора гиперпараметров — иначе оценка станет завышенной. Для подбора существует валидационная выборка или кросс-валидация.

Метрики классификации

Матрица ошибок:
              Предсказано 1   Предсказано 0
Факт 1            TP              FN
Факт 0            FP              TN

Accuracy  = (TP + TN) / (TP + TN + FP + FN)
Precision = TP / (TP + FP)     — из предсказанных положительных верны какие
Recall    = TP / (TP + FN)     — из реальных положительных найдены какие
F1        = 2·P·R / (P + R)    — гармоническое среднее

Accuracy обманчива на несбалансированных данных: если больных 1%, модель «все здоровы» даст 99% точности и нулевую пользу. Поэтому в медицине и антифроде смотрят на recall и precision, а не на accuracy.

ЗадачаЧто важнееПочему
Диагностика заболеванияRecallПропустить больного опаснее, чем перепроверить здорового
Спам-фильтрPrecisionПотерять важное письмо хуже, чем пропустить спам
Кредитный скорингБаланс, ROC-AUCОбе ошибки стоят денег

Метрики регрессии

MAE  = (1/n)·Σ|y − ŷ|              — средняя абсолютная ошибка, в единицах величины
MSE  = (1/n)·Σ(y − ŷ)²            — сильнее штрафует крупные промахи
RMSE = √MSE                       — в тех же единицах, что и y
R²   = 1 − Σ(y−ŷ)² / Σ(y−ȳ)²      — доля объяснённой дисперсии, до 1

Переобучение и недообучение

СимптомДиагнозЛечение
Ошибка мала на обучении, велика на тестеПереобучениеБольше данных, регуляризация, упростить модель, ранняя остановка
Ошибка велика вездеНедообучениеУсложнить модель, добавить признаки, обучать дольше
Ошибки близки и приемлемыНормаМожно фиксировать результат
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report, confusion_matrix

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42, stratify=y)

model = RandomForestClassifier(n_estimators=200, max_depth=8, random_state=42)
model.fit(X_train, y_train)

print(confusion_matrix(y_test, model.predict(X_test)))
print(classification_report(y_test, model.predict(X_test)))
print('Кросс-валидация:', cross_val_score(model, X, y, cv=5).mean())

# какие признаки оказались важными — сильный пункт в выводах работы
for name, imp in sorted(zip(X.columns, model.feature_importances_),
                        key=lambda t: -t[1])[:10]:
    print(f'{imp:.3f}  {name}')

Параметр stratify сохраняет пропорции классов при разбиении — на несбалансированных данных без него результаты скачут от запуска к запуску.

Частые вопросы

С какой модели начинать?

С самой простой: логистическая регрессия для классификации, линейная для регрессии. Она даёт базовый уровень, с которым сравнивают сложные модели. Если сложная не обходит простую — она не нужна.

Сколько данных нужно?

Ориентир — не менее нескольких десятков наблюдений на каждый признак. Если признаков больше, чем наблюдений, переобучение почти неизбежно.

Читайте также

Сделаем работу по этой теме

Опишите задачу — ответим в течение 15 минут в личных сообщениях ВКонтакте, назовём срок и цену. Предоплаты за оценку нет.

  • Оценка заявки бесплатно
  • Правки по замечаниям преподавателя
  • Работы по всем техническим и IT-дисциплинам

Нажимая кнопку, вы соглашаетесь на обработку указанных данных для ответа на заявку.