Урок 9. Разделение выборки на Train/Test, переобучение и полиномиальная регрессия

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

1. Главная цель машинного обучения и обобщающая способность

Главная цель разработки любой прогностической модели заключается не в том, чтобы описать уже имеющиеся исторические данные, а в том, чтобы качественно работать на новых, ранее не виданных объектах. Способность алгоритма выдавать точные предсказания на новых данных называется обобщающей способностью (generalization).

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

Метрика R2

2. Три состояния модели

В зависимости от сбалансированности архитектуры и объема данных модель после обучения может находиться в одном из трех состояний:

  1. Недообучение (Underfitting): возникает, когда модель слишком простая (например, мы пытаемся описать сложную нелинейную зависимость простой прямой линией). Проявляется в виде высокой ошибки как на обучающей выборке, так и на тесте.
  2. Переобучение (Overfitting): возникает, когда модель избыточно сложная. Она идеально подстраивается под обучающие данные, буквально «зазубривая» случайные отклонения и шум. Проявляется в виде идеальной (низкой) ошибки на обучении и катастрофически высокой ошибки на новых тестовых данных.
  3. Оптимальная модель (Good Fit) — наша цель: модель обладает сбалансированной сложностью. Она достаточно сложная, чтобы уловить основной тренд (закономерность), но при этом достаточно простая, чтобы игнорировать случайные шумы и выбросы.

3. Золотой стандарт: разделение выборки (Train/Test Split)

Чтобы честно измерить обобщающую способность модели, исходный размеченный датасет делят на две (или три) части:

  • Обучающая выборка (Training Set): около \(70-80\%\) данных. На них модель настраивает свои внутренние параметры (веса).
  • Тестовая выборка (Test Set): около \(20-30\%\) данных. Эти данные модель никогда не видела в процессе обучения — они выступают в роли независимого «экзамена».

В Scikit-Learn разделение реализуется функцией train_test_split() из пакета sklearn.model_selection:

X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.7, random_state=0)

Параметр random_state фиксирует генератор псевдослучайных чисел. Это гарантирует, что при каждом запуске ячейки данные будут делиться идентично, обеспечивая воспроизводимость результатов экспериментов.

4. Введение нелинейности: полиномиальная регрессия

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

Для решения этой проблемы используется полиномиальная регрессия. Ее суть заключается в том, чтобы «обмануть» стандартную линейную модель, подав ей на вход не только исходные признаки \(X\), но и их степени (\(X^2\), \(X^3\)) и комбинации (\(X_1 \cdot X_2\)):

$$ \hat{y} = w_0 + w_1 \cdot x + w_2 \cdot x^2 $$

Для выборочной генерации степенных признаков используется класс PolynomialFeatures совместно с DataFrameMapper (библиотека sklearn-pandas), что позволяет не возводить в степень бинарные столбцы (например, признаки студии или округов, где \(1^2 = 1\), а \(0^2 = 0\)).

5. Поиск оптимальной сложности по графику

Зависимость качества предсказаний от степени нелинейности наглядно иллюстрирует график сложности модели:

  • Степень 1 (Линейная регрессия): точность на обучении — \(0.709\) (\(R^2\)), точность на тесте — \(0.686\). Модель слегка недообучена.
  • Степень 2 (Полином 2-й степени): точность на обучении выросла до \(0.757\), точность на тесте поднялась до **\(0.720\)**. Это точка оптимальной сложности (Good Fit).
  • Степень 3 (Полином 3-й степени): точность на обучении растет (\(0.790\)), но на тесте начинает падать (\(0.702\)). Начинается переобучение.
  • Степень 4 (Полином 4-й степени): точность на обучении достигает \(0.806\), а на тесте падает до \(0.693\). Модель идеально выучила шум тренировочного набора, но потеряла способность к обобщению.

Метрика R2

Таким образом, анализируя расхождение кривых обучения (черная линия) и тестирования (красная линия), мы наглядно определяем оптимальный предел сложности модели.

План занятия

  1. Главная цель обучения и концепция обобщающей способности
    • Понятие обобщающей способности (generalization): почему точность модели важно проверять на отложенных, ранее не виданных данных.
    • Дидактическая аналогия со студентом: зубрежка ответов против реального понимания логики предмета.
  2. Три состояния модели после обучения
    • Недообучение (Underfitting): чрезмерная простота модели, высокая ошибка как на обучении, так и на тесте.
    • Переобучение (Overfitting): избыточная сложность, зазубривание случайных шумов обучающего датасета при провале на новых объектах.
    • Оптимальная модель (Good Fit) — наша цель: нахождение баланса сложности, способность игнорировать шум и улавливать общую закономерность.
  3. Золотой стандарт: разделение выборки на Train и Test
    • Разделение данных в пропорциях \(70/30\) или \(80/20\) на обучающую (Train) и тестовую (Test) выборки.
    • Техническая реализация в Scikit-Learn: использование функции train_test_split().
    • Назначение гиперпараметра random_state для обеспечения воспроизводимости случайного разбиения.
    • Распаковка данных в переменные X_train, X_test, y_train, y_test и честный расчет ошибок.
  4. Полиномиальная регрессия (Polynomial Regression)
    • Проблема криволинейных зависимостей реального мира (нелинейный рост цен на квартиры с увеличением площади).
    • Математическая концепция генерации новых степенных признаков (\(X^2\), \(X^3\)) без усложнения структуры самого линейного алгоритма.
    • Реализация выборочного полиномиального преобразования числовых признаков с помощью PolynomialFeatures и DataFrameMapper.
  5. Поиск оптимальной сложности модели по графику
    • Оценка точности (\(R^2\)) на обучении и тесте при последовательном увеличении степени нелинейности (от 1-й до 4-й).
    • Практическая фиксация момента переобучения: падение точности на тесте при продолжающемся росте точности на обучении.
    • Построение графика сложности регрессии для нахождения «золотой середины» оптимальной модели.

Не уходите просто так – не упустите возможность только здесь и сейчас получить скиду!

Индивидуальная консультация по Яндекс Директу или Google Ads со скидкой

25%

"*"обозначает обязательные поля

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