Tengo un conjunto de datos muy desequilibrado. Estoy tratando de seguir el consejos de afinación y utilizar scale_pos_weight
pero no estoy seguro de cómo debo afinarla.
Puedo ver que RegLossObj.GetGradient
lo hace:
if (info.labels[i] == 1.0f) w *= param_.scale_pos_weight
por lo que un gradiente de una muestra positiva sería más influyente. Sin embargo, según el papel xgboost se utiliza siempre la estadística del gradiente localmente \= dentro de las instancias de un nodo específico en un árbol específico:
- en el contexto de un nodo, para evaluar la reducción de pérdidas de una división candidata
- en el contexto de un nodo hoja, para optimizar el peso dado a ese nodo
Así que no hay manera de saber de antemano lo que sería un buen scale_pos_weight
- es un número muy diferente para un nodo que termina con una proporción de 1:100 entre instancias positivas y negativas, y para un nodo con una proporción de 1:2.
¿Alguna pista?