Практические руководства

Создание функций с помощью деревьев решений с градиентным усилением

TL;DR

В этом блоге мы реализуем идею, ранее упомянутую в исследовательской статье Facebook AI: Практические уроки прогнозирования кликов по рекламе в Facebook

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

Реализация представляет собой конвейерный преобразователь Python, размещенный в пакете sktools, который можно загрузить с помощью:

pip install sktools

И некоторый фрагмент кода, который нужно интегрировать, чтобы воспроизвести

Вступление

В процессе моделирования задачи машинного обучения существует необходимость в создании новых функций, которые описывают проблему и позволяют модели достичь более высокой производительности, это так называемый «процесс разработки функций». Это часть каждого проектного цикла машинного обучения.

На протяжении всего процесса разработки этих новых функций мы должны получать знания о выполняемой задаче, искать взаимодействия функций, пытаться визуализировать, как эта новая функция будет вести себя с другими функциями, рассмотреть возможность объединения непрерывных функций, создания оптимального количества кварталов, обрабатывать категориальные особенности таким образом, чтобы повысить производительность линейной регрессии. Все это в многомерном пространстве, где наша интуиция двумерного или трехмерного пространства уже вводит в заблуждение. Этот процесс требует не только знаний предметной области, он занимает много времени и подвержен ошибкам, но он также зависит от проблем, и методы и функции должны разрабатываться для каждого нового набора данных. Не забывая, что нет никакой гарантии, что создание функций приведет к оптимальной производительности в любой момент, и это зависит от человеческого творчества и терпения.

Автоматизация создания функций позволяет извлекать более полезную и значимую информацию из данных в рамках, которые можно применить к любой проблеме. Позволяя инженеру по машинному обучению тратить больше времени на более полезные задачи.

Создание функций с помощью деревьев решений с градиентным усилением

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

Если индивидуальный прогноз / одна строка / экземпляр больше определенного значения в X_i, тогда он пойдет вправо, если нет, он пойдет влево. Типичное расщепление бинарных деревьев решений.

Для решения на рисунке есть пять возможностей для каждого экземпляра: [0,0,0,0,1], [0,0,0,1,0], [0,0,1,0,0], [0,1,0,0,0] и [1,0,0,0,0] Это можно обобщить для любого заданного дерева решений, имея больше возможностей каждый раз, когда выполняется двоичное разбиение.

Учитывая любой набор данных, после обучения GBM каждый экземпляр может быть кодифицирован в зависимости от того, какой лист он почувствовал на каждом дереве. Если GBM состоит из ансамбля из N деревьев решений, для каждого экземпляра будет N кодировок.

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

Некоторые эксперименты

В этом разделе мы предлагаем несколько тестов для сравнения производительности алгоритмов.

Логистика - относится к логистической регрессии.

Повышение градиента - деревья принятия решений для повышения градиента

GB Features - относится к ранее упомянутому алгоритму, в котором функции преобразуются с помощью дерева принятия решений с градиентным усилением, а окончательной оценкой является логистическая регрессия.

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

Фрагмент кода

Установка пакета sktools

pip install sktools

Интеграция техники проектирования признаков в конвейер с окончательной оценкой

Классификация

Реализация обрабатывает несколько гиперпараметров.

stack_to_X: bool, default = True

Если установлено значение True, возвращаются исходные столбцы плюс новые, сгенерированные алгоритмом деревьев решений с градиентным усилением. Если False, он возвращает только новые столбцы.

add_probs: bool, default = False

Если установлено значение True, будут возвращены созданные функции плюс вероятность, оцененная с помощью повышения градиента. Обратите внимание, что это можно рассматривать как ансамбль. Тем не менее, значение по умолчанию - False, поэтому вероятности не добавляются.

Также можно передать все аргументы в пользу повышения градиента scikit-learn.

Регресс

Чтобы построить ее как задачу регрессии, необходимо изменить гиперпараметр regression = True.

Обратите внимание, что этот метод генерации признаков может рассматриваться как ансамбль, поэтому во время проверки необходимо проявлять особую осторожность.

Благодарности

Этот проект был выполнен с Дэвидом Бучака ранее в Барселонском суперкомпьютерном центре.

Хостинг sktools python package принадлежит David Masip.

Большое спасибо Винсенту Вармердаму за крутые видео об открытом исходном коде на https://calmcode.io/