Come si adattano i modelli di classificazione a coppie in xgBoost?


14

Per quanto ne so, per formare l'apprendimento per classificare i modelli, devi avere tre cose nel set di dati:

  • etichetta o pertinenza
  • ID gruppo o query
  • vettore di funzionalità

Ad esempio, il set di dati di Microsoft Learning to Rank utilizza questo formato (etichetta, ID gruppo e funzionalità).

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

Sto provando xgBoost che utilizza GBM per fare una classifica a coppie. Hanno un esempio di un'attività di classificazione che utilizza il programma C ++ per apprendere sul set di dati Microsoft come sopra.

Tuttavia, sto usando il loro wrapper Python e non riesco a trovare dove posso inserire l'id del gruppo ( qidsopra). Posso allenare il modello usando solo le caratteristiche e i punteggi di pertinenza, ma sento che mi manca qualcosa.

Ecco uno script di esempio.

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]

Mi imbatto anche in questo problema, ma che tipo di set_group dovrei passare alla funzione? quando costruisco un numpy o un elenco ottengo un errore del genere: 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: Verifica non riuscita: (src.info.group_ptr.size ()) == (0) la sezione non supporta la struttura del gruppo @amyrit
user2404620

Risposte:


9

Secondo la documentazione XGBoost XGBoost, XGboost prevede:

  • gli esempi di uno stesso gruppo devono essere esempi consecutivi,
  • un elenco con le dimensioni di ciascun gruppo (che puoi impostare con il set_groupmetodo di DMatrixin Python).

1
Grazie, sembra che l'API per il modello buildling ( sklearn.py) sia un po 'incompleta per il pacchetto Python.
Tokestermw,

4

set_groupè molto importante classificare, perché solo i punteggi in un gruppo sono comparabili. È possibile ordinare i dati in base ai loro punteggi nel proprio gruppo.

Per un facile posizionamento, puoi usare my xgboostExtension .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.