Hasta donde sé, para entrenar a aprender a clasificar modelos, debe tener tres cosas en el conjunto de datos:
- etiqueta o relevancia
- ID de grupo o consulta
- vector de características
Por ejemplo, el conjunto de datos Microsoft Learning to Rank usa este formato (etiqueta, identificación de grupo y características).
1 qid:10 1:0.031310 2:0.666667 ...
0 qid:10 1:0.078682 2:0.166667 ...
Estoy probando xgBoost que utiliza GBM para hacer una clasificación por pares. Tienen un ejemplo para una tarea de clasificación que utiliza el programa C ++ para aprender sobre el conjunto de datos de Microsoft como se indicó anteriormente.
Sin embargo, estoy usando su envoltorio de Python y parece que no puedo encontrar dónde puedo ingresar la identificación del grupo ( qid
arriba). Puedo entrenar el modelo usando solo las características y los puntajes de relevancia, pero siento que me falta algo.
Aquí hay un script de muestra.
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]