цели ранжирования xgboost попарно против (ndcg

#python #machine-learning #xgboost #ranking

#python #машинное обучение #xgboost #Рейтинг

Вопрос:

Я использую xgboost для ранжирования набора продуктов на страницах обзора продукта. Где метка релевантности здесь означает, насколько релевантен рейтинг, приведенный с точки зрения популярности, прибыльности и т.д. Функции связаны с продуктом, такие как доход, цена, клики, показы и т.д.

Я знаю, что rank: pariwise, rank: ndcg, rank:map все реализуют алгоритм LambdaMart, но они отличаются тем, как будет оптимизирована модель.

Ниже приведены подробности моего обучающего набора. 800 точек данных разделены на две группы (тип продуктов). Следовательно, 400 точек данных в каждой группе. Метки находятся в диапазоне от 0 до 3, где 0 не имеет отношения к делу, 3 — самая высокая значимость.

форма x_train

(800, 10)

форма y_train

800

group_train

[400, 400]

метки [0., 1., 2., 3.]

Аналогично, ниже приведен мой набор для проверки и набор тестов. форма x_val

(400, 10)

форма y_val

400

group_val

[200, 200]

форма x_test

(160, 10)

форма y_test

160

ниже приведены параметры модели, которые я изначально тестирую

 params = {'objective': 'rank:pairwise', 'learning_rate': 0.1,
          'gamma': 1.0, 'min_child_weight': 0.1,
          'max_depth': 6, 'n_estimators': 100}
model = xgb.sklearn.XGBRanker(**params)
model.fit(x_train_sample, y_train_sample, group_train, verbose=False,
          eval_set=[(x_val_sample, y_val_sample)], eval_group=[group_val])
  

Предсказания выглядят так, как показано ниже, чего я и ожидал.

 7.56624222e-01,  3.05949116e 00,  3.86625218e 00,  1.57079172e 00,
4.26489925e 00,  7.92866111e-01,  3.58812737e 00,  4.02488470e 00,
3.88625526e 00,  2.50904512e 00,  3.43187213e 00,  3.60899544e 00,
2.86354733e 00,  4.36567593e 00,  1.22325927e-01,  2.79849982e 00,
  

Но когда я меняю цель на ранг: ndcg

 params = {'objective': 'rank:ndcg', 'learning_rate': 0.1,
          'gamma': 1.0, 'min_child_weight': 0.1,
          'max_depth': 6, 'n_estimators': 100}
model = xgb.sklearn.XGBRanker(**params)
model.fit(x_train_sample, y_train_sample, group_train, verbose=False,
          eval_set=[(x_val_sample, y_val_sample)], eval_group=[group_val])
  

Мои прогнозы становятся совершенно странными.

 [0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5,
   0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5,
   0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5,
  

Может ли кто-нибудь помочь узнать, почему?

Комментарии:

1. У меня та же проблема!

2. это решаемая проблема? Удаление «gamma» не работает?

Ответ №1:

Сначала у меня была такая же проблема. Удаление гаммы работает для меня. Вы можете попробовать

 params = {'objective': 'rank:ndcg', 'learning_rate': 0.1,
          'min_child_weight': 0.1,
          'max_depth': 6, 'n_estimators': 100}
model = xgb.sklearn.XGBRanker(**params)
model.fit(x_train_sample, y_train_sample, group_train, verbose=False,
          eval_set=[(x_val_sample, y_val_sample)], eval_group=[group_val])```