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]
Antworten:
Laut der XGBoost-Dokumentation erwartet XGboost:
set_group
Methode vonDMatrix
in Python festlegen können ).quelle
sklearn.py
) für das Python-Paket etwas unvollständig ist.set_group
ist für das Ranking sehr wichtig, da nur die Ergebnisse in einer Gruppe vergleichbar sind. Sie können Daten nach ihren Punktzahlen in ihrer eigenen Gruppe sortieren.Für ein einfaches Ranking können Sie meine xgboostExtension verwenden .
quelle