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 ( qid
sopra). 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]