Soweit ich weiß, müssen drei Dinge im Datensatz enthalten sein, um das Erlernen von Ranglistenmodellen zu trainieren:
- Label oder Relevanz
- Gruppen- oder Abfrage-ID
- Merkmalsvektor
Beispielsweise verwendet das Microsoft Learning to Rank-Dataset dieses Format (Bezeichnung, Gruppen-ID und Funktionen).
1 qid:10 1:0.031310 2:0.666667 ...
0 qid:10 1:0.078682 2:0.166667 ...
Ich probiere xgBoost aus, das GBMs verwendet, um ein paarweises Ranking durchzuführen. Sie haben ein Beispiel für eine Ranking-Aufgabe , bei der das C ++ - Programm verwendet wird, um das Microsoft-Dataset wie oben zu lernen.
Ich verwende jedoch ihren Python-Wrapper und kann anscheinend nicht finden, wo ich die Gruppen-ID ( qid
oben) eingeben kann . Ich kann das Modell nur mit den Funktionen und Relevanzwerten trainieren, aber ich habe das Gefühl, dass mir etwas fehlt.
Hier ist ein Beispielskript.
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]