Domanda

Per quanto ne so, per addestrare imparare a modelli di rango, è necessario disporre di tre cose nel set di dati:

  • etichetta o rilevanza
  • gruppo o query id
  • funzione di vettore

Per esempio, il Microsoft Learning per Classifica set di dati utilizza questo formato (etichetta, gruppo id e arredamento).

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

Sto provando xgBoost che utilizza GBM da fare classifica a coppie. Hanno un esempio per un compito classifica che utilizza il programma C ++ per imparare sul set di dati di Microsoft come sopra.

Comunque, io sto usando il loro involucro di Python e non riesco a trovare dove posso ingresso l'ID del gruppo (qid sopra). Posso addestrare il modello utilizzando solo le caratteristiche e la rilevanza punteggi, ma mi sento come se mi manca qualcosa.

Ecco un esempio di script.

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]
È stato utile?

Soluzione

Secondo il XGBoost documentazione , XGboost si aspetta che:

  • esempi di uno stesso gruppo essere consecutivi esempi,
  • una lista con le dimensioni di ogni gruppo (che si può impostare con il metodo set_group di DMatrix in Python).

Altri suggerimenti

set_group è molto importante per classifica, perché solo i punteggi in un gruppo sono paragonabili. È possibile ordinare i dati in base alle loro punteggi nel proprio gruppo.

Per un facile posizionamento, è possibile utilizzare il mio xgboostExtension .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
scroll top