Perdonad si el título parece un poco indirecto, pero dejadme que os explique lo que intento hacer. Estoy entrenando un XGBClassifier (en python) en las muestras que no son estrictamente en la clase de 0 y 1, pero tienen un poco de granularidad de rango - en cualquier lugar de [0, 1], [.25, .75], [.5 .5], [.75, .25], [1, 0]
para cada una de las dos clases, donde [0, 1]
significa que es un 0% de clase A
y 100% de clase B
.
La razón por la que prefiero no utilizar la regresión es que los valores de entrenamiento no son técnicamente continuos, sino discretos dentro del espectro de 0 a 1, y estoy tratando de combinar el poder de hacer una clasificación multiclase sólo dentro del marco de que todas las clases son simplemente diferentes combinaciones de clase puramente A
y la clase B
. Tal vez la regresión es todavía una mejor opción, o hacer reg:linear como el objetivo - pero eso no resuelve exactamente mi problema.
Por ejemplo, para medir el sentimiento no en términos de "negativo o positivo" sino de "25% positivo 75% negativo" utilizando predict_proba()
.
Estoy tratando de averiguar cuál es la mejor manera de hacerlo. Sé que la clase base del XGBClassifier es binary:logistic, y podría intentar esto también usando multi:softmax, pero me gusta la idea de usar el predict_proba() entre 0
y 1
como una medida de dónde cae una muestra en una escala entre la clase A
y la clase B
(o realmente, entre 0
y 1
), lo que sería más difícil utilizando 5 "clases" distintas.
(Para el siguiente ejemplo, estoy utilizando las letras A
y B
pero realmente significa 0
y 1
. Es menos confuso de esta manera).
Mi primera inclinación es forzar las probabilidades de clasificación utilizando ratios de A
y B
en el conjunto de entrenamiento para cada muestra, esencialmente enviando cada uno a través de cuatro veces con diferentes clasificaciones - pero no estoy seguro de si hay una manera más fácil o si está haciendo lo que creo que es.
Por ejemplo, si tengo una muestra que quiero representar como [.5, .5]
así que básicamente, un sentimiento 50/50 o "neutro" (para que otras muestras que envié después salgan alrededor de [.5, .5]
, lo entrenaría cuatro veces con un valor de A
y cuatro veces con un valor de B
. Entonces para algo que debería ser clasificado como [0, 1]
lo entrenamos ocho veces con un valor de 1, y para algo que es [.75, .25]
, lo entrenaríamos seis veces con un valor de 0
y dos veces con un valor de 1
.
Así es como entrenaría cada muestra entonces, donde " B B B B
" significaría que entreno la misma muestra cuatro veces diciéndole al clasificador que es B
etc:
[0.00, 1.00]: B B B B
[0.25, 0.75]: A B B B
[0.50, 0.50]: A A B B
[0.75, 0.25]: A A A B
[1.00, 0.00] :A A A A
Así que salvo que este enfoque sea incorrecto, ¿hay una forma mejor de hacer lo que estoy tratando de hacer? ¿Como un análogo para predict_proba() pero para entradas de entrenamiento? Sabiendo cómo funciona el algoritmo no creo que exista, pero de nuevo, estoy aquí para ser instruido.
¿Se trata de una bastardización de un clasificador binario que se presenta como un aspirante a la regresión? ¿O es una manera correcta de hacer lo que estoy tratando de hacer?
Gracias a todos.