Frage

Soweit ich weiß, müssen Sie im Datensatz drei Dinge im Datensatz haben, um das Lernen für die Rangliste von Modellen zu trainieren:

  • Etikett oder Relevanz
  • Gruppen- oder Abfrage -ID
  • Feature -Vektor

Zum Beispiel die Microsoft Learning, um den Datensatz zu rangieren Verwendet dieses Format (Etikett, 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, der GBMs verwendet, um ein paarweise Ranking zu erzielen. Sie haben eine Beispiel für eine Ranking -Aufgabe Das wird das C ++ - Programm verwendet, um wie oben oben auf dem Microsoft -Datensatz zu lernen.

Ich benutze jedoch ihre Python -Wrapper und kann nicht herausfinden, wo ich die Gruppen -ID eingeben kann (qid Oben). Ich kann das Modell nur mit den Funktionen und Relevanzwerken trainieren, aber ich habe das Gefühl, dass ich 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]
War es hilfreich?

Lösung

Laut dem Xgboost -Dokumentation, Xgboost erwartet:

  • Die Beispiele derselben Gruppe, um aufeinanderfolgende Beispiele zu sein,
  • eine Liste mit der Größe jeder Gruppe (mit der Sie festlegen können set_group Methode von DMatrix in Python).

Andere Tipps

set_group ist sehr wichtig für das Ranking, da nur die Ergebnisse in einer Gruppe vergleichbar sind. Sie können Daten nach ihren Punktzahlen in ihrer eigenen Gruppe sortieren.

Für das einfache Ranking können Sie meine verwenden xgboostxtsion.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit datascience.stackexchange
scroll top