Перейти к содержимому

Валидационные кривые

Валидационная кривая показывает, как меняется качество модели при разных значениях одного гиперпараметра.

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

Если гиперпараметр выбран неудачно, модель может недообучиться или переобучиться.

Для дерева решений это выглядит так:

  • слишком маленькая глубина — дерево слишком простое;
  • подходящая глубина — дерево улавливает закономерность;
  • слишком большая глубина — дерево начинает запоминать детали обучающих данных.

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

Гиперпараметры нельзя подбирать по итоговой тестовой выборке. Если много раз смотреть на test и выбирать вариант, который лучше всего сработал именно на нём, тестовая оценка перестаёт быть честной.

Поэтому в реальных задачах часто используют три части данных:

  • обучающая выборка — для обучения модели;
  • валидационная выборка — для подбора гиперпараметров;
  • тестовая выборка — для финальной оценки выбранной модели.

Построим валидационные кривые для дерева решений. Будем менять maxDepth от 1 до 10 и смотреть, как меняется Accuracy.

uses MLABC, PlotML;
begin
var (X, y) := Datasets.MakeCircles(
500,
noise := 0.25,
factor := 0.5,
seed := 42);
var cv := Validation.StratifiedKFold(y, 5, seed := 42);
var curve := Validation.ValidationCurve(
Arr(1..10),
d -> new DecisionTreeClassifier(d),
X,
y,
Metrics.Accuracy,
cv
);
Plot.ValidationCurve(
curve,
xLabel := 'maxDepth',
yLabel := 'Accuracy',
title := 'Accuracy при разной глубине дерева'
);
end.

StratifiedKFold задаёт разбиения для кросс-валидации. Это важно для классификации: в каждой части данных сохраняется соотношение классов.

Validation.ValidationCurve строит данные для графика: для каждого значения maxDepth создаётся новая модель, затем качество оценивается с помощью Accuracy.

После запуска программа строит график зависимости качества от глубины дерева.

Валидационная кривая для глубины дерева решений

На валидационной кривой сравнивают качество на обучающих данных и качество на валидационных данных.

Синяя кривая показывает качество на обучающих данных. При увеличении maxDepth дерево становится сложнее, поэтому качество на обучающей выборке почти всё время растёт.

Красная кривая показывает качество на валидационных данных. Сначала оно тоже растёт: модель перестаёт быть слишком простой. Затем после maxDepth = 4 качество начинает снижаться: дерево становится слишком подробным и хуже работает на новых данных.

Поэтому подходящее значение гиперпараметра выбирают по красной кривой. В этом примере лучший результат получается примерно при maxDepth = 4.

Валидационная кривая нужна для подбора гиперпараметров.

Она отвечает на вопрос: при каком значении параметра модель лучше работает на новых данных?