Умная рыбалка (часть 2)
Уважаемый Искусственный Интеллект, подскажи, ехать на рыбалку или нет? Погодка вроде выдалась, что надо: солнышко светит, но не жарко, ветерок еле заметный. Правда уже две недели дождя не было, и на небе ни облака. А что там показывает барометр? В общем, сомнения одолевают.
Здесь нам и поможет машинное обучение. Напомню, в прошлый раз мы сформулировали задачу: предсказать будет ли клёв при заданных условиях, опираясь на исторические данные. Иными словами вычислить значение столбца Клёв? для жёлтой строки:
Существует множество подходов для решения таких задач. Все они основаны на математике и статистике. Мы же попробуем самый простой и наглядный способ: дерево принятия решений. При большом желании и наличии терпения его можно применить и без компьютера, вооружившись ручкой и бумагой.
Идея заключается в том, чтобы найти среди прошлых записей такие дни, которые максимально похожи на сегодняшний. И посмотреть, хорошо ли клевала рыба в те дни. Логично будет предположить, что при одинаковых условиях рыба поведёт себя аналогично.
Но как среди этой огромной таблицы быстро найти похожие строки? Давайте упростим задачу: разделим одну большую таблицу на три поменьше, в зависимости от погоды. Мы знаем, что в столбце Погода встречаются три возможных варианта: Солнце, Облачно и Дождь. Для каждого варианта выберем соответствующие строки и получим такую картину:
Такая структура часто встречается в программировании и называется деревом. С точки зрения биологии, это – скорее перевёрнутое дерево: у него есть корень Погода и три ветви – Солнце, Облачно и Дождь. Дальше наше дерево продолжит ветвиться вниз.
Обратите внимание, что в получившихся табличках уже нет колонки Погода: в ней теперь просто нет смысла, потому что для всех записей на одной ветви значения будут одинаковые.
Ещё раз: для чего мы это сделали? Погода – это, пожалуй, один из самых важных факторов: если сегодня светит солнце, то нас в первую очередь интересует, как клюёт рыба в такую же солнечную погоду. А если идёт дождь, то хотелось бы знать реакцию рыбы именно на дождь.
Давайте продолжим. Каждую из трёх получившихся таблиц можно снова разделить, уже по другому признаку – например, по температуре. Однако использовать точные значения температуры (+14℃, +15℃, +18℃, +19℃ и так далее) не очень удобно – получится слишком много ответвлений. Лучше здесь применить диапазоны:
- меньше 18℃
- от 18℃ до 23℃
- больше 23℃
Это позволит нам снова разделять данные на три группы. Почему именно на три? Почему именно такие диапазоны? Сейчас это не принципиально, числа могут быть и другими. Но для наглядности пусть будет так. В результате из ветви Солнце нашего дерева вырастают новые:
Заметьте, что на каждом шаге мы получаем всё больше полезной информации. Предыдущая картинка говорила, что в солнечные дни 20 раз клёв был и 11 не был (20 Да / 11 Нет) – что, в принципе, не даёт достаточной уверенности рыболову. Но если учесть ещё и температуру, то видим в интервале от 18℃ до 23℃ довольно оптимистичные 10 Да / 2 Нет. А вот при более жарком воздухе цифры уже не такие радужные: 3 Да / 6 Нет – тут стоит хорошо подумать, прежде чем отправляться за добычей.
Цифры бывают и более очевидные. Если, скажем, взять ветку Дождь и разделить данные в зависимости от силы ветра, может получиться такая ситуация:
При сильном ветре и дожде клёв ни разу не был зафиксирован: 0 Да / 5 Нет. Понятно, что в такие дни на озере делать нечего.
Таким образом и строится дерево принятия решений. Чем больше данных мы насобирали и чем больше разных параметров учитываем, тем оно будет выше и ветвистее.
Вы спросите: а где же здесь машинное обучение? Всю работу можно проделать вручную и получить тот же результат. Здесь есть нюансы. Пока мы рисовали дерево, то несколько раз принимали интуитивные решения:
- с какого параметра начать строить дерево? (мы выбрали Погоду)
- какой параметр выбрать следующим? (мы взяли Температуру)
- на какие интервалы лучше всего разбить температуру? (мы выбрали три произвольных диапазона)
- до каких пор продолжать строить дерево?
Дело в том, что в зависимости от ответов могут получиться совершенно разные деревья. Вот здесь нам и поможет компьютер. Программисты разработали алгоритмы, которые отвечают на все эти вопросы и умеют строить дерево оптимальным образом. А именно, они строят его так, чтобы на каждом этапе выжимать максимально полезную информацию.
В третьей части мы поговорим, как можно ещё улучшить рассмотренный метод. А пока вам для раздумий такая картинка:
После аккуратного построения дерева на одной из ветвей мы видим всего одну запись: 0 Да / 1 Нет. Означает ли это, что при таких обстоятельствах никогда не стоит выбираться на рыбалку? Что делать в таком случае? Ответим на этот вопрос в следующий раз.