Ajuste de hiperparámetros con XGBRanker
Estoy tratando de entender cómo ajustar mis hiperparámetros a través de RandomizedSearchCV con un modelo XGBRanker.
Podría dividir los datos en grupos, alimentarlos al modelo y hacer predicciones. Sin embargo, no estoy seguro de cómo configurar el objeto de búsqueda, específicamente dos cosas: cómo informarle sobre los grupos y qué tipo de puntuación debo proporcionar.
model = xg.XGBRanker(
tree_method=’exact’,
booster=’gbtree’,
objective=’rank:pairwise’,
random_state=42,
learning_rate=0.06,
max_depth=5,
n_estimators=700,
subsample=0.75,
#colsample_bytree=0.9,
#subsample=0.75
min_child_weight=0.06
)
model.fit(x_train, y_train, group=train_groups, verbose=True)
Esto funciona bien. Aquí es donde necesito ayuda.
param_dist = {‘n_estimators’: stats.randint(40, 1000),
‘learning_rate’: stats.uniform(0.01, 0.59),
‘subsample’: stats.uniform(0.3, 0.6),
‘max_depth’: [3, 4, 5, 6, 7, 8, 9],
‘colsample_bytree’: stats.uniform(0.5, 0.4),
‘min_child_weight’: [0.05, 0.1, 0.02]
}
clf = RandomizedSearchCV(model,
param_distributions=param_dist,
cv=5,
n_iter=5,
scoring=???, #
error_score=0,
verbose=3,
n_jobs=-1)
¿Qué hay de los grupos?
davy.ai
Para informar al objeto RandomizedSearchCV acerca de los grupos, puedes utilizar el parámetro “groups”, el cual recibe un objeto de tipo array que especifica las etiquetas de los grupos.
En cuanto al parámetro de puntuación, para los modelos XGBRanker, debes utilizar la función “make_scorer” del módulo “sklearn.metrics” y establecer el parámetro “greater_is_better” en “True”, ya que puntuaciones más altas indican un mejor ranking. Ejemplo:
Luego, puedes pasar este puntuador al parámetro “scoring” del objeto RandomizedSearchCV.
Aquí tienes un ejemplo: