Переобучение и обрезка
Используя описанный выше алгоритм, мы можем обучить дерево решений, которое будет идеально классифицировать обучающие примеры, предполагая, что примеры разделимы. Однако, если набор данных содержит шум, это дерево будет соответствовать данным и покажет плохую точность теста.
На следующем рисунке показан зашумленный набор данных с линейной зависимостью между признаком x и меткой y. На рисунке также показано дерево решений, обученное на этом наборе данных без какой-либо регуляризации. Эта модель правильно предсказывает все обучающие примеры (предсказания модели соответствуют обучающим примерам). Однако на новом наборе данных, содержащем тот же линейный шаблон и другой экземпляр шума, модель будет работать плохо.
Рисунок 12. Зашумленный набор данных.
Чтобы ограничить переобучение дерева решений, примените один или оба из следующих критериев регуляризации при обучении дерева решений:
- Установите максимальную глубину: не позволяйте деревьям решений превышать максимальную глубину, например 10.
- Установите минимальное количество примеров в листе: лист с меньшим количеством примеров не будет рассматриваться для разделения.
На следующем рисунке показан эффект разного минимального количества примеров на лист. Модель улавливает меньше шума.
Рисунок 13. Различное минимальное количество примеров на лист.
Вы также можете выполнить регуляризацию после обучения, выборочно удаляя (обрезая) определенные ветки, то есть преобразуя определенные нелистовые узлы в листья. Распространенным решением для выбора ветвей для удаления является использование набора проверочных данных. То есть, если удаление ветки улучшает качество модели в наборе проверочных данных, то ветвь удаляется.
Следующий рисунок иллюстрирует эту идею. Здесь мы проверяем, улучшится ли точность проверки дерева решений, если нелистовой зеленый узел превратить в лист; то есть обрезка оранжевых узлов.
Рисунок 14. Обрезка состояния и его дочерних элементов в лист.
На следующем рисунке показан эффект использования 20% набора данных в качестве проверки для сокращения дерева решений:
Рисунок 15. Использование 20% набора данных для обрезки дерева решений.
Обратите внимание, что использование набора проверочных данных уменьшает количество примеров, доступных для первоначального обучения дерева решений.
Многие создатели моделей применяют несколько критериев. Например, вы можете сделать все следующее:
- Примените минимальное количество примеров на лист.
- Примените максимальную глубину, чтобы ограничить рост дерева решений.
- Сократите дерево решений.
- Минимальное количество примеров — 5 (
min_examples = 5
). - 10% набора обучающих данных сохраняется для проверки (
validation_ratio = 0.1
).
validation_ratio=0.0
.Эти критерии вводят новые гиперпараметры, которые необходимо настроить (например, максимальную глубину дерева), часто с автоматической настройкой гиперпараметров. Деревья решений, как правило, достаточно быстры, чтобы их можно было обучить использованию настройки гиперпараметров с перекрестной проверкой. Например, в наборе данных с «n» примерами:
- Разделите обучающие примеры на p непересекающихся групп. Например:
p=10
. - Для всех возможных значений гиперпараметра; например, максимальная глубина в {3,5,6,7,8,9}, минимальные примеры в {5,8,10,20}.
- Оцените в каждой группе качество дерева решений, обученного на других группах p-1.
- Усредните оценку по группам.
- Выберите значение гиперпараметра с наилучшей усредненной оценкой.
- Обучите окончательное дерево решений, используя все «n» примеров с выбранными гиперпараметрами.
В этом разделе мы обсудили, как деревья решений ограничивают переобучение. Несмотря на эти методы, недостаточное и переоснащение являются основными недостатками деревьев решений. Леса решений вводят новые методы ограничения переобучения, которые мы увидим позже.
Прямая интерпретация дерева решений
Деревья решений легко интерпретируются. Тем не менее, изменение даже нескольких примеров может полностью изменить структуру – и, следовательно, интерпретацию – дерева решений.
Благодаря тому, как строятся деревья решений, разбивая обучающие примеры, можно использовать дерево решений для интерпретации самого набора данных (в отличие от модели). Каждый лист представляет собой определенный угол набора данных.
model.describe()
. Вы также можете получить доступ к отдельному дереву и построить его с помощью model.get_tree()
. Более подробную информацию см. в руководстве по проверке моделей YDF .Однако косвенное толкование также информативно.