Как подходят попарно ранжирования моделей в xgBoost?

14

Насколько я знаю, обучать обучение моделей ранга, вам нужно иметь три вещи в наборе данных:

  • ярлык или релевантность
  • идентификатор группы или запроса
  • характерный вектор

Например, набор данных Microsoft Learning to Rank использует этот формат (метка, идентификатор группы и функции).

1 qid:10 1:0.031310 2:0.666667 ...
0 qid:10 1:0.078682 2:0.166667 ...

Я пробую xgBoost, который использует GBM для парного ранжирования. У них есть пример для ранжирования задачи , которая использует программу на C ++ , чтобы узнать о наборе данных Microsoft , как выше.

Тем не менее, я использую их оболочку Python и не могу найти, где я могу ввести идентификатор группы (см. qidВыше). Я могу обучить модель, используя только функции и оценки релевантности, но чувствую, что что-то упустил.

Ниже приведен пример сценария.

gbm = XGBRegressor(objective="rank:pairwise")

X =  np.random.normal(0, 1, 1000).reshape(100, 10)
y = np.random.randint(0, 5, 100)

gbm.fit(X, y) ### --- no group id needed???

print gbm.predict(X)

# should be in reverse order of relevance score
print y[gbm.predict_proba(X)[:, 1].argsort()][::-1]
tokestermw
источник
Я также сталкивался с этой проблемой, но какой set_group я должен передать функции? когда я создаю numpy или список, я получаю ошибку, подобную этой: d: \ build \ xgboost \ xgboost-git \ dmlc-core \ include \ dmlc \ ./ logging.h: 235: [12:03:09] D: \ Build \ xgboost \ xgboost-git \ src \ c_api \ c_api.cc: 342: проверка не удалась: (src.info.group_ptr.size ()) == (0) срез не поддерживает структуру группы @amyrit
user2404620

Ответы:

9

Согласно документации XGBoost, XGboost ожидает:

  • примеры одной группы должны быть последовательными примерами,
  • список с размером каждой группы (который вы можете установить с помощью set_groupметода DMatrixв Python).
amyrit
источник
1
Спасибо, похоже, API для построения модели ( sklearn.py) немного неполон для пакета Python.
tokestermw
4

set_groupЭто очень важно для ранжирования, потому что только оценки в одной группе сопоставимы. Вы можете сортировать данные по их оценкам в своей группе.

Для удобства ранжирования вы можете использовать мой xgboostExtension .

bigdong
источник