¿Cómo encajan los modelos de clasificación por pares en xgBoost?

14

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 ( qidarriba). 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]
tokestermw
fuente
También me encuentro con este problema, pero ¿qué tipo de set_group debo pasar a la función? cuando construyo un numpy o una lista obtengo un error como este: 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: Error de verificación: (src.info.group_ptr.size ()) == (0) el segmento no admite la estructura de grupo @amyrit
user2404620

Respuestas:

9

De acuerdo con la documentación de XGBoost, XGboost espera:

  • los ejemplos de un mismo grupo para ser ejemplos consecutivos,
  • una lista con el tamaño de cada grupo (que puede establecer con el set_groupmétodo de DMatrixen Python).
amyrit
fuente
1
Gracias, parece que API para model buildling ( sklearn.py) está un poco incompleta para el paquete Python.
tokestermw
4

set_groupes muy importante para la clasificación, porque solo los puntajes en un grupo son comparables. Puede ordenar los datos según sus puntajes en su propio grupo.

Para una clasificación fácil, puede usar mi xgboostExtension .

bigdong
fuente