Наскільки я знаю, щоб навчити навчання класифікувати моделі, у наборі даних потрібно мати три речі:
- етикетка або відповідність
- група або ідентифікатор запиту
- вектор функції
Наприклад, набір даних 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]