Jak pasują modele rankingowe w xgBoost?

14

O ile mi wiadomo, aby trenować naukę rangowania modeli, musisz mieć w zestawie danych trzy rzeczy:

  • etykieta lub trafność
  • identyfikator grupy lub zapytania
  • wektor funkcji

Na przykład zestaw danych Microsoft Learning to Rank korzysta z tego formatu (etykieta, identyfikator grupy i funkcje).

1 qid:10 1:0.031310 2:0.666667 ...
0 qid:10 1:0.078682 2:0.166667 ...

Próbuję xgBoost, który wykorzystuje GBM do rangowania par. Mają przykład zadania rankingowego, które korzysta z programu C ++ do uczenia się w zestawie danych Microsoft jak wyżej.

Jednak używam ich opakowania Pythona i nie mogę znaleźć miejsca, w którym mogę wprowadzić identyfikator grupy ( qidpowyżej). Mogę trenować model przy użyciu tylko funkcji i ocen trafności, ale czuję, że czegoś mi brakuje.

Oto przykładowy skrypt.

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
źródło
Zetknąłem się również z tym problemem, ale jaki rodzaj set_group powinienem przekazać funkcji? podczas konstruowania numpy lub listy pojawia się błąd: d: \ build \ xgboost \ xgboost-git \ dmlc-core \ include \ dmlc \ ./ logowanie. h: 235: [12:03:09] D: \ Kompilacja \ xgboost \ xgboost-git \ src \ c_api \ c_api.cc: 342: Kontrola nie powiodła się: (src.info.group_ptr.size ()) == (0) wycinek nie obsługuje struktury grupy @amyrit
user2404620

Odpowiedzi:

9

Zgodnie z dokumentacją XGBoost, XGboost oczekuje:

  • przykłady tej samej grupy, które będą kolejnymi przykładami,
  • lista z rozmiarem każdej grupy (którą można ustawić za pomocą set_groupmetody DMatrixw Pythonie).
amyrit
źródło
1
Dzięki, wygląda na to, że API do budowania modeli ( sklearn.py) jest trochę niekompletne dla pakietu Python.
tokestermw
4

set_groupjest bardzo ważny w rankingu, ponieważ tylko wyniki w jednej grupie są porównywalne. Możesz sortować dane według ich wyników we własnej grupie.

Dla łatwego rankingu możesz użyć mojego xgboostExtension .

bigdong
źródło