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.