Wie passen paarweise eingestufte Modelle in xgBoost?

13

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 ( qidoben) 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]
tokestermw
quelle
Ich stoße auch auf dieses Problem, aber welche Art von set_group soll ich an die Funktion übergeben? Wenn ich eine Nummer oder Liste erstelle, wird folgende Fehlermeldung angezeigt: 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: Überprüfung fehlgeschlagen: (src.info.group_ptr.size ()) == (0) Slice unterstützt keine Gruppenstruktur @amyrit
user2404620

Antworten:

9

Laut der XGBoost-Dokumentation erwartet XGboost:

  • die Beispiele derselben Gruppe sollen aufeinanderfolgende Beispiele sein,
  • Eine Liste mit der Größe jeder Gruppe (die Sie mit der set_groupMethode von DMatrixin Python festlegen können ).
Amyrit
quelle
1
Vielen Dank, es sieht so aus, als ob die API für model buildling ( sklearn.py) für das Python-Paket etwas unvollständig ist.
Tokestermw
4

set_groupist 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 .

Bigdong
quelle