21 июня 2015

Переобучение - фундаментальная проблема, возникающая при создании предсказательных моделей



Многие современные методы регрессии и классификации способны описать очень сложные нелинейные связи между предикторами и переменной-откликом. Однако без должного контроля со стороны исследователя модели, хорошо описывающие обучающую выборку, рискуют исказить истинный характер моделируемой связи, что приведет к невозможности воспроизвести столь же точные предсказания на новых независимых данных. Эта проблема известна как "переобучение модели" (англ. "model overfitting") и занимает одно из центральных мест в теории и практическом применении предсказательных моделей.





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


Как обычно это бывает, мы не знаем истинной формы связи между содержанием сока и электрическим сопротивлением и поэтому вынуждены аппроксимировать эту истинную связь при помощи той или иной модели (подробнее см. разд. 7.1 в книге  Мастицкий, Шитиков, 2015). Даже для этого простого набора данных мы могли бы построить много разных моделей. На рисунке ниже приведены примеры трех таких моделей - линейная регрессия, полином 4-й степени и полином 20-й степени (на этих графиках использованы данные из обучающей выборки trSet, код для создания которой был приведен ранее).



Казалось бы, лучше всего для описания экспериментальных данных подходит полиномом 20-й степени, т.к. эта модель наиболее полно отражает характер расположения точек. Это можно также увидеть, рассчитав для каждой модели квадратный корень из среднеквадратичной ошибки (RMSE):

lin = lm(ohms ~ juice, trSet)
pol4 = lm(ohms ~ poly(juice, 4), trSet)
pol20 = lm(ohms ~ poly(juice, 20), data = trSet)
 
RMSE.lin = sqrt(sum((trSet$ohms - fitted(lin))^2)/nrow(trSet))
RMSE.pol4 = sqrt(sum((trSet$ohms - fitted(pol4))^2)/nrow(trSet))
RMSE.pol20 = sqrt(sum((trSet$ohms - fitted(pol20))^2)/nrow(trSet))
 
c(RMSE.lin, RMSE.pol4, RMSE.pol20)
[1] 1123.3125  939.1077  845.6730

Однако здесь следует вспомнить о том, что практически все методы регрессии и классификации в силу своего устройства пытаются найти такие модели, которые максимально хорошо описывают данные из обучающей выборки (англ. "train set"), т.е. минимизируют ошибку обучения ("train error"). Более того, при усложнении модели, т.е. при добавлении в нее новых предикторов, всегда можно подобрать такую модель, которая будет идеально описывать обучающее множество (например, в нашем случае такой моделью была бы ломаная, последовательно соединяющая все точки). К сожалению, тот факт, что некоторая модель хорошо описывает обучающее множество, совершенно не гарантирует столь же высокой верности предсказаний на новом независимом наборе данных, которые не были использованы при подгонке модели ("проверочная выборка", "экзаменационная выборка", "проверочная совокупность", "проверочное множество"; англ. "test set" или "validation set"). В нашем примере часть исходных данных перед построением моделей была случайным образом удалена и сохранена в таблице testSet для последующего использования в качестве проверочного множества. Рассчитав ошибку RMSE для этого проверочного множества, получим:

RMSE.lin.test = sqrt(sum((testSet$ohms - predict(lin, testSet))^2)/nrow(testSet))
RMSE.pol4.test = sqrt(sum((testSet$ohms - predict(pol4, testSet))^2)/nrow(testSet))
RMSE.pol20.test = sqrt(sum((testSet$ohms - predict(pol20, testSet))^2)/nrow(testSet))
 
c(RMSE.lin.test, RMSE.pol4.test, RMSE.pol20.test)
[1] 1089.9642  875.7152 1387.6341

Как видно из приведенных значений, по мере усложнения модели от линейной регрессии с одним предиктором до полинома 20-й степени ошибка предсказаний на проверочном множестве ("test error") сначала снижалась, а затем начала возрастать. На рисунке ниже значения RMSE для обучающих и проверочных данных показаны в зависимости от количества предикторов в модели.


Такое поведение ошибки является универсальным и справедливо практически для любых алгоритмов и методов создания предсказательных моделей - при усложнении той или иной модели, когда она становится все более гибкой ("flexible") в связи с возрастающим числом степеней свободы, ошибка обучения монотонно снижается, тогда как ошибка предсказаний на проверочном множестве имеет U-образную форму, т.е. постепенно снижается, достигает некоторого минимума, а затем снова начинает возрастать. Этот повторный рост ошибки на проверочных данных после достижения некоторого минимума является сигналом о том, что модель стала переобученной. Переобученные модели характеризуются тем, что описывают случайный шум в данных, который не имеет ничего общего с истинной формой связи между откликом и предикторами. Задача исследователя заключается в нахождении предсказательной модели оптимальной сложности, которая обеспечивает минимальную ошибку на проверочном множестве.

С математической точки зрения, U-образная форма кривой, описывающей изменение ошибки прогноза на проверочном множестве по мере увеличения гибкости модели, объясняется тем что, называют "компромиссом между смещением и дисперсией" (англ. "bias - variance trade-off"). Предположим, что наша модель является аппроксимирующей функцией \(\hat{f}\) некоторой неизвестной нам истинной функции \(f\). Для любого проверочного наблюдения \(x_0\) ожидаемую среднеквадратичную ошибку можно разложить на сумму трех величин: дисперсии \(\hat{f}(x_0)\), квадрата смещения \(\hat{f}(x_0)\) и дисперсии остатков \(\epsilon\) (подробнее см. James et al. 2013):

\[E \left ( y_0 - \hat{f}(x_0) \right )^2 = Var(\hat{f}(x_0)) + [Bias(\hat{f}(x_0))]^2 + Var(\epsilon).\]

Здесь \(E \left ( y_0 - \hat{f}(x_0) \right )^2\) обозначает математическое ожидание среднеквадратичной ошибки, которое мы получили бы при многократном повторном оценивании истинной функции \(f\) с использованием большого числа обучающих выборок и вычислении ошибки для каждого \(x_0\) с последующим усреднением результатов этих вычислений. Bias означает смещение, а Var - дисперсию.

Из приведенного уравнения следует, что для минимизации ожидаемой ошибки прогноза на проверочном множестве мы должны подобрать такой метод обучения модели, который одновременно достигает низкого смещения и низкой дисперсии. Обратите внимание, что дисперсия по определению является положительной величиной. Следовательно, ошибка на проверочном множестве никогда не может быть ниже некоторого уровня неустранимой ошибки \(Var(\epsilon)\) ("irreducible error"; см. также эту статью).

Говоря о дисперсии статистической модели имеют в виду величину, на которую \(\hat{f}\) изменилась бы при оценивании этой функции по другой обучающей выборке. Очевидно, что в силу случайного формирования таких выборок, оценки \(\hat{f}\) несколько отличались бы от раза к разу (см. пример здесь). В идеале эта вариация не должна быть большой. Однако если некоторый метод характеризуется высокой дисперсией, тогда даже небольшое изменение состава обучающей выборки может вызвать существенное изменение \(\hat{f}\). В свою очередь под смещением понимают ошибку, которая вносится из-за аппроксимации сложной и неизвестной нам истинной функции более простой функцией.

Как правило, при использовании более гибких методов дисперсия возрастает, а смещение снижается. Относительная скорость изменения этих величин как раз и определяет то, будет ли ошибка предсказания на проверочных данных снижаться или возрастать (подробнее см. James et al. 2013). Хороший результат, достигаемый той или иной моделью на проверочном множестве, требует как низкой дисперсии, так и низкого квадрата смещения. Отсюда и вытекает упомянутый выше "компромисс" - можно легко получить модель с очень низким смещением (см. пример выше - в значительной мере переобученная полиномиальная модель 20-й степени), но с высокой дисперсией, или модель с очень низкой дисперсией, но высоким смещением (путем подгонки горизонтальной линии к данным). Трудность, таким образом, заключается в нахождении модели, у которой низки как дисперсия, так и смещение. Методы, позволяющие создавать такие модели, будут рассмотрены в последующих сообщениях.


3 комментария :

Эдуард Бабушкин комментирует...

Сергей, будете показывать как в caret тренируют модели?

Sergey Mastitsky комментирует...

Да, конечно.

Эдуард Бабушкин комментирует...

спасибо

Отправить комментарий