Tengo un conjunto de datos para el que estoy tratando de predecir variables objetivo.
Col1 Col2 Col3 Col4 Col5
1 2 23 11 1
2 22 12 14 1
22 11 43 38 3
14 22 25 19 3
12 42 11 14 1
22 11 43 38 2
1 2 23 11 4
2 22 12 14 2
22 11 43 38 3
He proporcionado una muestra de datos, pero la mía tiene miles de registros distribuidos de manera similar. Aquí, Col1, Col2, Col3, Col4 son mis características y Col5 es la variable de destino. Por lo tanto, la predicción debe ser 1,2,3 o 4, ya que estos son mis valores para la variable objetivo. He intentado utilizar algoritmos como bosque aleatorio, árbol de decisión, etc. para las predicciones.
Aquí, si ve, los valores 1,2 y 3 ocurren más veces en comparación con 4. Por lo tanto, mientras pronostico, mi modelo está más sesgado hacia 1 2 y 3, mientras que obtengo solo un menor número de predicciones para 4 (Obtuve solo 1 predicho para la política 4 de miles de registros cuando vi la matriz de confusión).
Para que mi modelo se generalice, eliminé el mismo porcentaje de datos que pertenecen al valor 1,2 y 3 al azar. Agrupe por cada valor en Col5 y luego eliminé cierto porcentaje, de modo que reduje el número de registros. Ahora pude ver cierto aumento en el porcentaje de precisión y también un aumento razonable en las predicciones para el valor 4 en la matriz de confusión.
¿Es este el enfoque correcto para tratar (eliminar los datos al azar de los grupos en los que el modelo está sesgado)?
Probé algoritmos de Python incorporados como Adaboost, técnicas GradientBoost usando sklearn. Leí que estos algoritmos son para manejar la clase de desequilibrio. Pero no pude lograr mejorar mi precisión, sino eliminando aleatoriamente los datos, donde pude ver algunas mejoras.
¿Es esta reducción una técnica de submuestreo y este es el enfoque correcto para el submuestreo?
¿Hay algún paquete predefinido en sklearn o alguna lógica que pueda implementar en python para hacer esto, si mi eliminación aleatoria es incorrecta?
Además, aprendí sobre la técnica SMOTE, que se ocupa del sobremuestreo. ¿Debo probar esto para el valor 4? ¿Y podemos hacer esto usando cualquier paquete incorporado en Python? Sería genial si alguien me ayuda en esta situación.
class_weight
hace es construir una matriz de costos para usted en cada clasesample_weight=[C_k for k in y]
aaccuracy_score
o algo así como el usof1_score
.Sí, esta es una buena técnica para abordar el problema del desequilibrio de clase. Sin embargo, los métodos de submuestreo conducen a la pérdida de información en el conjunto de datos (por ejemplo, acaba de eliminar un patrón interesante entre las variables restantes, que podría haber contribuido a una mejor capacitación del modelo). Es por eso que se prefieren los métodos de sobremuestreo, específicamente en el caso de un conjunto de datos más pequeño.
En respuesta a su consulta sobre los paquetes de Python, la caja de herramientas de aprendizaje desequilibrado está especialmente dedicada para la misma tarea. Proporciona varios métodos de submuestreo y sobremuestreo. Recomendaría probar la técnica SMOTE .
fuente
Depende de la técnica de conjunto que desee utilizar. El problema básico que está trabajando con el problema de desequilibrio de datos de varias clases. El submuestreo se puede utilizar de manera eficiente en el ensacado y en las técnicas de refuerzo. El algoritmo SMOTE es muy eficiente en la generación de nuevas muestras. El problema del desequilibrio de datos ha sido ampliamente estudiado en la literatura. Le recomiendo que lea sobre uno de estos algoritmos: SMOTE-Boost SMOTE-Bagging Rus-Boost EusBoost Estas son técnicas de refuerzo / embolsado diseñadas específicamente para problemas de desequilibrio de datos. En lugar de SMOTE, puede probar ADA-SMOTE o Border-Line SMOTE. He usado y modificado el Border-Line SMOTE para multi-clase y es muy eficiente. Si su base de datos es muy grande y el problema es fácil, intente: viola - jones clasificador. También lo he usado con el problema de desequilibrio de datos y es realmente eficiente
fuente
Ya hay algunas buenas respuestas aquí. Solo pensé que agregaría una técnica más ya que pareces estar usando conjuntos de árboles. En muchos casos, busca optimizar la curva de elevación o el AUC para el ROC. Para esto, recomendaría el criterio de distancia de Hellinger para dividir las ramas en sus árboles. Al momento de escribir esto, no está en el paquete de aprendizaje desequilibrado, pero parece que hay un plan .
fuente
Cuando se trata de un problema de desequilibrio de clase, debe concentrarse principalmente en la métrica de error y debe elegir la puntuación F1 como métrica de error.
Después de elegir la métrica correcta, podemos usar diferentes técnicas para tratar este problema.
Si está interesado, puede consultar el siguiente blog, se explica muy bien sobre las técnicas utilizadas para resolver este problema de desequilibrio de clase:
https://knowledgengg.wordpress.com/2019/03/04/this-is-suresh/
fuente