Деревья решений и простота

Сегодня тяжелые облака? Тогда, вероятно, пойдет дождь, потому что в прошлом мы много раз видели дождь в облачную погоду. Но что, если пасмурно, а у нас середина лета? Тогда мы можем сказать, что вероятность дождя меньше. У каждого метода машинного обучения есть свой собственный подход к моделированию того, как учиться на прошлых данных и представлять эти знания.

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

Пример

Предположим, у нас есть данные с четырьмя столбцами или атрибутами:

  • Сообщение об аварии (правда/ложь)
  • Праздник (дата)
  • Час пик (время)
  • Перегрузка (правда/ложь)

Мы пытаемся использовать первые три атрибута для прогнозирования столбца заторы. Вот пример дерева решений, которое делает это. Чтобы использовать его, мы начнем с ответа на главный вопрос: авария зарегистрирована или нет? Если сообщается об аварии, мы прогнозируем, что будет затор. Если нет, то мы все еще немного не уверены. Поэтому мы задаем больше вопросов. Наше дерево использует два других атрибута: является ли день праздником и является ли время дня часом пик.

Еще несколько интересных наблюдений:

  • Аварии приводят к прогнозированию заторов, независимо от данных о праздниках и часах пик. Это может быть неправильно. Например, авария на Рождество может не привести к пробкам. Но ничто не мешает нам расширить левую ветвь узла accident, чтобы сделать еще несколько проверок.
  • Наше дерево рассматривает только три атрибута, чтобы прийти к выводу. Однако для большей точности может потребоваться учитывать другие атрибуты. Кроме того, один или несколько из рассматриваемых здесь факторов (авария, праздник, час пик), возможно, придется удалить, если окажется, что они не очень помогают сделать прогнозы более точными.

Несколько интересных вопросов

Как дерево решений узнает, в каком порядке располагать узлы? Например, почему бы не проверить на спешку перед проверкой на случайность? Наше дерево ставит несчастные случаи на первое место, потому что считает, что несчастные случаи являются основным фактором. Дерево решений приходит к таким выводам, просматривая данные. Вот пример данных, которые приведут к такому выводу,

  • Заторы были 30% времени, и
  • 90% времени — сообщалось об авариях
  • 50% времени — это был час пик
  • 1% времени — это был праздник

Алгоритм дерева решений на основе этих данных делает вывод о том, что несчастные случаи являются лучшим фактором для разделения данных. Разделение приводит к тому, что одна большая группа делится на две меньшие группы. Алгоритм продолжает разбивать каждую группу на более мелкие части, пока каждая группа не станет достаточно однородной. Например, если определенная группа состоит из 50% точек данных с перегрузкой и 50% точек данных без перегрузки, тогда группу необходимо разделить дополнительно, потому что трудно решить, кто «победил». Если группа состоит из 98 % перегруженных и 2 % неперегруженных, то это можно считать хорошим разделением, и всей группе присваивается метка перегрузка.

И как узнать, какие атрибуты использовать? В нашем примере их три. А на других деревьях? Ответ многогранен.

  • Прежде всего, мы ограничены имеющимися данными. Мы придерживаемся того, что у нас есть, или делаем некоторую работу, чтобы получить данные, которые, по нашему мнению, могут помочь повысить точность.
  • Затем мы используем знание предметной области. Если у нас есть тысяча доступных нам атрибутов, то использование их всех, вероятно, приведет к сложному дереву, которое не будет работать должным образом. Например, знание погоды в Лондоне, вероятно, бесполезно для прогнозирования заторов в Нью-Йорке. Всегда есть риск делать такие выводы, потому что данные иногда могут показывать удивительные результаты. С другой стороны, у нас также есть риск чрезмерно усложнить наше дерево решений, также известное как переобучение. Поэтому мы выбираем вариант с меньшим риском, чтобы в данном случае не включать атрибут, который мы обязательно будем неактуальны.
  • В-третьих, дерево решений само узнает, какие атрибуты важны. Как правило, чем менее важным является атрибут, тем ниже он появляется в дереве решений. Таким образом, обрезка дерева приводит к исключению некоторых атрибутов. Иными словами, мы говорим дереву: «Проверки, которые появляются ниже по дереву, слишком детализированы. Забудь об этом и приди к выводу раньше».

Заворачивать

Это в значительной степени моя изюминка деревьев решений. Если вы хотите еще немного углубиться в технические детали, в главе 3 книги Тома М. Митчелла Машинное обучение есть отличное объяснение деревьев решений. Для краткого обзора см. слайды Learning from Data: Decision Trees из Университета Эдинбурга.

Как мы можем применить деревья решений в реляционной базе данных или базе данных, поддерживающей SQL? Это будет темой моего следующего поста.

Первоначально опубликовано на сайте ainsightful.com 5 декабря 2016 г.