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]
Respuestas:
De acuerdo con la documentación de XGBoost, XGboost espera:
set_group
método deDMatrix
en Python).fuente
sklearn.py
) está un poco incompleta para el paquete Python.set_group
es 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 .
fuente