Насколько я знаю, обучать обучение моделей ранга, вам нужно иметь три вещи в наборе данных:
- ярлык или релевантность
- идентификатор группы или запроса
- характерный вектор
Например, набор данных 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]
Ответы:
Согласно документации XGBoost, XGboost ожидает:
set_group
методаDMatrix
в Python).источник
sklearn.py
) немного неполон для пакета Python.set_group
Это очень важно для ранжирования, потому что только оценки в одной группе сопоставимы. Вы можете сортировать данные по их оценкам в своей группе.Для удобства ранжирования вы можете использовать мой xgboostExtension .
источник