Вопрос или проблема
Я только начинаю изучать машинное обучение, и мне трудно понять, как может произойти переобучение в модели линейной регрессии.
Учитывая, что мы используем только 2 признака для обучения модели, как может плоская плоскость быть переобученной по набору данных?
Я предполагаю, что линейная регрессия использует только линию для описания линейной зависимости между 2 переменными и плоскую плоскость для описания зависимости между 3 переменными. Мне трудно понять (или скорее вообразить), как может произойти переобучение в линии или плоскости?
В линейной регрессии переобучение происходит, когда модель “слишком сложная”. Это обычно случается, когда количество параметров велико по сравнению с количеством наблюдений. Такая модель не будет хорошо обобщаться на новые данные. То есть она будет хорошо работать на обучающих данных, но плохо на тестовых данных.
Простая симуляция может это показать. Здесь я использую R:
> set.seed(2)
> N <- 4
> X <- 1:N
> Y <- X + rnorm(N, 0, 1)
>
> (m0 <- lm(Y ~ X)) %>% summary()
Коэффициенты:
Оценка Ст. Ошибка t значение Pr(>|t|)
(Перехват) -0.2393 1.8568 -0.129 0.909
X 1.0703 0.6780 1.579 0.255
Стандартная ошибка остатков: 1.516 на 2 степенях свободы
Множественный R-квадрат: 0.5548, Скорректированный R-квадрат: 0.3321
F-статистика: 2.492 на 1 и 2 СВ, p-значение: 0.2552
Обратите внимание, что мы получаем хорошую оценку истинного значения для коэффициента X. Обратите внимание на скорректированный R-квадрат 0.3321, который является показателем соответствия модели.
Теперь мы подгоняем квадратичную модель:
> (m1 <- lm(Y ~ X + I(X^2) )) %>% summary()
Коэффициенты:
Оценка Ст. Ошибка t значение Pr(>|t|)
(Перехват) -4.9893 2.7654 -1.804 0.322
X 5.8202 2.5228 2.307 0.260
I(X^2) -0.9500 0.4967 -1.913 0.307
Стандартная ошибка остатков: 0.9934 на 1 степени свободы
Множественный R-квадрат: 0.9044, Скорректированный R-квадрат: 0.7133
F-статистика: 4.731 на 2 и 1 СВ, p-значение: 0.3092
Теперь у нас гораздо более высокий скорректированный R-квадрат: 0.7133, что может заставить нас подумать, что модель намного лучше. Действительно, если мы изобразим данные и предсказанные значения обеих моделей, мы получим:
> fun.linear <- function(x) { coef(m0)[1] + coef(m0)[2] * x }
> fun.quadratic <- function(x) { coef(m1)[1] + coef(m1)[2] * x + coef(m1)[3] * x^2}
>
> ggplot(data.frame(X,Y), aes(y = Y, x = X)) + geom_point() + stat_function(fun = fun.linear) + stat_function(fun = fun.quadratic)
Так что на первый взгляд квадратичная модель выглядит намного лучше.
Теперь, если мы сгенерируем новые данные, но используем ту же модель для построения предсказаний, мы получим:
> set.seed(6)
> N <- 4
> X <- 1:N
> Y <- X + rnorm(N, 0, 1)
> ggplot(data.frame(X,Y), aes(y = Y, x = X)) + geom_point() + stat_function(fun = fun.linear) + stat_function(fun = fun.quadratic)
Очевидно, что квадратичная модель работает плохо, тогда как линейная модель все еще разумна. Однако, если мы смоделируем больше данных с расширенным диапазоном, используя первоначальный семя, так чтобы начальные точки данных были теми же, что и в первой симуляции, мы обнаружим:
> set.seed(2)
> N <- 10
> X <- 1:N
> Y <- X + rnorm(N, 0, 1)
> ggplot(data.frame(X,Y), aes(y = Y, x = X)) + geom_point() + stat_function(fun = fun.linear) + stat_function(fun = fun.quadratic)
Ясно, что линейная модель все еще хорошо работает, но квадратичная модель оказывается беспомощной за пределами оригинального диапазона. Это происходит потому, что, когда мы подгоняли модели, у нас было слишком много параметров (3) по сравнению с количеством наблюдений (4).
Редактировать: Чтобы ответить на вопрос в комментариях к этому ответу о модели, которая не включает более высокие порядковые термины.
Ситуация та же: если количество параметров приближается к количеству наблюдений, модель будет переобучена. Без более высоких порядковых терминов это произойдет, когда количество переменных / признаков в модели приближается к количеству наблюдений.
Снова мы можем легко продемонстрировать это с помощью симуляции:
Здесь мы моделируем случайные данные из нормального распределения, так что у нас есть 7 наблюдений и 5 переменных / признаков:
> set.seed(1)
> n.var <- 5
> n.obs <- 7
>
> dt <- as.data.frame(matrix(rnorm(n.var * n.obs), ncol = n.var))
> dt$Y <- rnorm(nrow(dt))
>
> lm(Y ~ . , dt) %>% summary()
Коэффициенты:
Оценка Ст. Ошибка t значение Pr(>|t|)
(Перехват) -0.6607 0.2337 -2.827 0.216
V1 0.6999 0.1562 4.481 0.140
V2 -0.4751 0.3068 -1.549 0.365
V3 1.2683 0.3423 3.705 0.168
V4 0.3070 0.2823 1.087 0.473
V5 1.2154 0.3687 3.297 0.187
Стандартная ошибка остатков: 0.2227 на 1 степени свободы
Множественный R-квадрат: 0.9771, Скорректированный R-квадрат: 0.8627
Мы получаем скорректированный R-квадрат 0.86, что указывает на отличное соответствие модели. На чисто случайных данных. Модель сильно переобучена. По сравнению, если мы удвоим количество наблюдений до 14:
> set.seed(1)
> n.var <- 5
> n.obs <- 14
> dt <- as.data.frame(matrix(rnorm(n.var * n.obs), ncol = n.var))
> dt$Y <- rnorm(nrow(dt))
> lm(Y ~ . , dt) %>% summary()
Коэффициенты:
Оценка Ст. Ошибка t значение Pr(>|t|)
(Перехват) -0.10391 0.23512 -0.442 0.6702
V1 -0.62357 0.32421 -1.923 0.0906 .
V2 0.39835 0.27693 1.438 0.1883
V3 -0.02789 0.31347 -0.089 0.9313
V4 -0.30869 0.30628 -1.008 0.3430
V5 -0.38959 0.20767 -1.876 0.0975 .
---
Значимость: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Стандартная ошибка остатков: 0.7376 на 8 степенях свободы
Множественный R-квадрат: 0.4074, Скорректированный R-квадрат: 0.03707
F-статистика: 1.1 на 5 и 8 СВ, p-значение: 0.4296
..скорректированный R-квадрат падает до всего лишь 0.037
Большое количество параметров по сравнению с точками данных
В общем, одним из аспектов переобучения является попытка “придумать информацию из ничего”, когда вы хотите определить сравнительно большое количество параметров на основе ограниченного количества фактических данных.
Для простой линейной регрессии y = ax + b
есть два параметра, поэтому для большинства наборов данных она будет недопараметризована, а не перегружена параметрами. Однако давайте рассмотрим (вырожденный) случай всего с двумя точками данных. В этой ситуации вы всегда можете найти идеальное решение линейной регрессии – однако является ли это решение обязательным образом осмысленным? Возможно, нет. Если вы рассматриваете линейную регрессию двух точек данных как достаточное решение, это будет яркий пример переобучения.
Вот хороший пример переобучения с помощью линейной регрессии от Рэндала Мунро из xkcd, который иллюстрирует эту проблему:
Переобучение происходит, когда модель хорошо работает на обучающих данных, но плохо на тестовых данных. Это связано с тем, что лучшая линия подгонки вашей модели линейной регрессии не является обобщенной. Это может быть связано с различными факторами. Некоторые из общих факторов:
- Выбросы в обучающих данных.
- Обучающие и тестовые данные поступают из разных распределений.
Поэтому перед построением модели убедитесь, что вы проверили эти факторы, чтобы получить обобщенную модель.
Ответ или решение
Переобучение в линейной регрессии: детальный анализ
Переобучение (overfitting) – это распространенная проблема в машинном обучении, когда модель слишком хорошо подстраивается под обучающие данные, что приводит к плохой обобщающей способности на новых, невиданных данных. В этой статье мы рассмотрим, как переобучение может произойти в контексте линейной регрессии, даже при использовании всего лишь двух признаков (факторов).
Понимание линейной регрессии
Линейная регрессия предполагает, что существует линейная связь между зависимой переменной (Y) и одним или несколькими независимыми переменными (X). В стандартной форме уравнение линейной регрессии можно записать как:
[ Y = aX + b ]
где (a) – коэффициент наклона, а (b) – свободный член.
Для многомерной линейной регрессии уравнение принимает форму:
[ Y = a_1X_1 + a_2X_2 + b ]
где (X_1) и (X_2) – независимые переменные.
Как может произойти переобучение
На первый взгляд может показаться, что линейная регрессия использует простую прямую или плоскость для описания взаимосвязей, и переобучение в таком контексте трудно представить. Однако переобучение может произойти, даже если модель представлена в виде простой линии или плоскости. Вот как это можно объяснить:
-
Количество параметров и число наблюдений: Переобучение часто происходит, когда количество параметров модели приближается к количеству наблюдений. Когда модель имеет слишком много параметров (например, полиномиальные признаки или взаимодействия между переменными) по сравнению с количеством доступных данных, она может "подстраиваться" под шум в данных, а не под истинные закономерности.
-
Необъективные данные и выбросы: Присутствие выбросов или нерепрезентативных данных в обучающей выборке может привести к искажению модели. Модель будет стараться учитывать эти выбросы, что может ухудшить ее производительность на новых данных.
-
Деградированные случаи: Рассмотрим случай, когда у нас всего два наблюдения. Линейная регрессия с двумя точками всегда будет идеально соответствовать этим точкам, но это решение может быть неинформативным, особенно если данные не представляют целевой популяции.
Пример линейной регрессии и переобучения
На практике переобучение можно проиллюстрировать с помощью симуляций. Предположим, у нас есть небольшой набор данных, состоящий из всего лишь нескольких точек. Если мы сначала обучим модель с одним параметром, а затем добавим дополнительные полиномиальные признаки, получим следующие результаты:
-
Линейная модель: Подходит довольно хорошо, но некомплексна. Параметры не зависят от шума и хорошо обобщаются на новые данные.
-
Квадратичная модель: Показатель (R^2) может значительно увеличиться, что создает иллюзию улучшения точности модели. Однако когда мы тестируем эту модель на новых, случайных данных, она показывает гораздо более низкую производительность, так как она идеально подстроилась под обучающую выборку, игнорируя истинные взаимосвязи.
Проверка на обобщающую способность
Чтобы избежать переобучения при обучении модели, необходимо провести несколько проверок:
- Кросс-validation: Используйте метод кросс-валидации, чтобы оценить, как модель будет работать на независимых наборах данных.
- Обработка выбросов: Проведите анализ выбросов и постарайтесь устранить их влияние на модель.
- Сравнение моделей: Сравнивайте модель с различными уровнями сложности (например, линейную и полиномиальную) и анализируйте их производительность не только по показателю (R^2), но и по метрикам, основанным на ошибках (например, MSE или RMSE).
Заключение
Переобучение в линейной регрессии может быть непростой концепцией, особенно если в модели инсценируется простая линейная зависимость. Однако важно помнить, что сложные модели с большим количеством параметров подвержены значительному риску переобучения. Фокусируйтесь на ясных и обобщающих моделях, и проводите проверки для оценки их эффективности в реальных сценариях.