Lightgbm lambdaMART для обучения ранжированию
Введение
LambdaMART – это улучшенная древовидная версия LambdaRank, основанная на RankNet. Было доказано, что усиленные деревья, особенно LambdaMART, очень успешны в решении реальных задач обучения ранжированию.
RankNet, LambdaRank и LambdaMART оказались очень успешными алгоритмами для решения реальных задач ранжирования. Например, ансамбль рейтинговых агентств LambdaMART выиграл трек 1 на Yahoo! 2010! Учимся ранжировать вызов.
В настоящее время существует две популярные общедоступные реализации LambdaMART: одна предоставляется библиотекой RankLib, являющейся частью проекта Lemur, и реализация LightGBM, предоставляемая Microsoft.
Мотивация
Хотя в Интернете уже доступно множество сообщений, объясняющих классификацию и регрессию LightGBM, мне удалось найти лишь несколько сообщений, касающихся LGBMRanker. В этом посте я покажу, как мы можем использовать LightGBM для обучения наших моделей обучения по рангу, а также некоторые ловушки, в которые мы можем попасть при обучении нашей модели, и, конечно же, как выбраться. из тех.
Выполнение
1. Импорт необходимых библиотек
2. Загрузка данных
Итак, представьте, что у меня есть фиктивные данные, хранящиеся в файле с именем dummy_ltr_data.csv
со следующими столбцами: query
, product_id
, 8 функций и столбец для relevance
.
3. Разделение данных на обучение и тестирование
Обратите внимание, что я разделю данные на основе запроса (qid), а не на основе случайного разделения на основе строк. Однако вы, конечно, можете выбирать запросы для обучения и тестирования случайным образом.
У фиктивных данных, которые я использую, есть 100 запросов. Итак, я сразу разделю 80% для поезда и 20% для теста на основе уникальных запросов (qid).
4. Подготовка данных для LightGBM
Прежде чем мы перейдем к обучению модели LightGBM LambdaMART на наших фиктивных данных, нам нужно будет разделить данные на функции и метку релевантности, которые по существу называются (X_train ,y_train)
для обучающего набора и (X_test, y_test)
для тестового набора.
В дополнение к этому нам также понадобится group
как для обучения, так и для тестового набора (оценочный набор). group
по сути представляет собой массив numpy, который в основном связывает запросы с функциями во время обучения.
Например, если у вас есть набор данных из 100 документов с group = [10, 20, 40, 10, 10, 10]
, это означает, что у вас есть 6 групп, где первые 10 записей находятся в первой группе, записи 11–30 — во второй группе, записи 31–70 — в третья группа и др.
5. Обучение модели LightGBM LambdaMART
В отличие от RankLib, где у вас есть зависимость от файлов java и jar, LambdaMART от LightGBM довольно легко обучить. Все, что нам нужно сделать, это подключить правильный набор параметров.
Хотя большинство параметров очень хорошо задокументированы на официальном сайте LightGBM, здесь я расскажу о некоторых, которых нет.
Во-первых, единственный objective
, который доступен для ранжирования в LightGBM, — это lambdarank
, аLambdaMART — это расширенная древовидная версия LambdaRank. Таким образом, цель lambdarank вместе с gbdt boosting_type — это то, чем является LambdaMART.
Во-вторых, цели ранжирования в LightGBM используют label_gain_
для хранения прироста каждого значения метки. По умолчанию label_gain_[i] = (1 << i) - 1
. Таким образом, усиление метки по умолчанию работает только с максимальным значением метки 31.
. Поэтому, если значение вашей метки превышает 31
, вам нужно будет указать собственное label_gain
.
В-третьих, в методе fit
при установке параметров eval_set
и eval_group
, если вы хотите оценить свою модель только на тестовом наборе, вам нужно будет передать только (X_test, y_test)
и qids_test
в параметры eval_set
и eval_group
соответственно.
5. Важность функции
Еще одна веская причина использовать LambdaMART от LightGBM — это встроенная поддержка важности функций. Все, что требуется, — это одна строка кода, чтобы посмотреть на важность функции.
Обратите внимание, что на графике показаны только 5 функций, потому что важность остальных функций равна 0. Мы также можем проверить это с помощью еще одной строки кода, ranker.feature_importances_
, которая вернет оценку важности каждой функции.
Заключение
Я широко использовал RankLib и LightGBM для обучения ранжированию моделей и могу с уверенностью сказать, что LightGBM сделал мою жизнь проще. Мало того, что LightGBM имеет лучшую реализацию LambdaMART, чем RankLib, но также имеет простой в использовании scikit-learn подобный API, стандартную поддержку важности функций, графиков и SHAPзначения, список бесконечен.
В следующем посте я расскажу о настройке гиперпараметров для обучения ранжированию с помощью поиска по сетке и современной байесовской системе оптимизации для настройки гиперпараметров под названием Optuna. Я также расскажу о некоторых важных гиперпараметрах, на которые следует обратить особое внимание при настройке гиперпараметров в LightGBM для обучения ранжированию.
Кредиты и источники
Подпишитесь на DDIntel Здесь.
Присоединяйтесь к нашей сети здесь: https://datadriveninvestor.com/collaborate