Глиф Учебники

Что такое переобучение модели

Справочник · Искусственный интеллект · 2 минуты чтения

Переобучение (overfitting) — модель запомнила обучающие примеры вместе со случайными особенностями и ошибками, а общую закономерность не уловила. На обучающих данных она почти не ошибается, на новых — ошибается часто. Как ученик, который вызубрил ответы к задачнику: на тех же задачах — пятёрка, на контрольной с новыми — двойка.

Главный признак: точность на обучающей выборке высокая, на проверочной — заметно ниже.

Пример: зубрила и правило

Две модели решают, спам ли письмо, по числу восклицательных знаков. «Зубрила» запоминает каждый пример, а на незнакомое отвечает «не спам». «Правило» — простой порог: спам, если знаков 4 и больше. В обучающих данных есть одна ошибка-«шум»: поздравление с 7 восклицательными знаками — не спам.

Python
train = [(0, 0), (1, 0), (2, 0), (3, 0), (4, 1), (5, 1), (6, 1), (7, 0)]
test = [(2, 0), (3, 1), (5, 1), (7, 1), (8, 1), (9, 1)]

memory = dict(train)

def memorizer(marks):
    return memory.get(marks, 0)

def rule(marks):
    return 1 if marks >= 4 else 0

def score(model, data):
    correct = sum(1 for marks, label in data if model(marks) == label)
    return f"{correct} из {len(data)}"

for name, model in [("Зубрила", memorizer), ("Правило", rule)]:
    print(name, "— обучение:", score(model, train), "проверка:", score(model, test))
Вывод
Зубрила — обучение: 8 из 8 проверка: 2 из 6
Правило — обучение: 7 из 8 проверка: 5 из 6

На обучающих данных «зубрила» безупречна, но на проверке проваливается: она выучила и шумный пример, и не знает, что делать с письмами, которых не видела. Простое правило ошибается на обучении один раз, зато на новых данных работает лучше. Это и есть переобучение — и причина, по которой модели проверяют на отдельной выборке.

Почему так бывает

Что помогает

Обратная беда — недообучение

Недообучение (underfitting) — модель слишком простая и не улавливает даже основную закономерность: ошибается и на обучающих данных, и на новых. Помогают модель посложнее и более полезные признаки. Хорошая модель — между этими крайностями.

Подводный камень

Проверочную выборку нельзя использовать для подбора настроек модели много раз подряд: модель постепенно «подгоняется» и под неё. Поэтому данные часто делят на три части: обучающую, валидационную (для подбора настроек) и тестовую — её открывают один раз, в самом конце.

Как делить данные на практике — в уроке Машинное обучение на Python.