29. Estrategias para lidiar con datos desequilibrados
En muchos problemas de aprendizaje automático y aprendizaje profundo, nos enfrentamos a conjuntos de datos desequilibrados. Un conjunto de datos se considera desequilibrado cuando las clases objetivo están representadas de manera desproporcionada. Esto puede causar problemas importantes para el desempeño de los modelos de aprendizaje, ya que pueden volverse sesgados hacia la clase mayoritaria. Afortunadamente, existen varias técnicas y estrategias que podemos emplear para mitigar este problema. En este capítulo, exploraremos algunos de los enfoques más efectivos para lidiar con datos desequilibrados cuando trabajamos con Python.
Comprender el problema
Antes de profundizar en las estrategias, es fundamental comprender el impacto de los datos desequilibrados. Los modelos de aprendizaje automático y aprendizaje profundo están entrenados para minimizar los errores durante el proceso de aprendizaje. Cuando una clase domina el conjunto de datos, el modelo siempre puede simplemente predecir la clase mayoritaria y aun así lograr una alta precisión. Sin embargo, esto no significa que el modelo esté funcionando bien a la hora de clasificar las clases minoritarias, que suelen ser las más importantes.
Medición del desequilibrio
Antes de aplicar cualquier técnica, es importante medir el grado de desequilibrio. Esto se puede hacer simplemente contando las instancias de cada clase. En Python, podemos usar bibliotecas como Pandas para obtener este recuento fácilmente:
importar pandas como pd # Cargar los datos datos = pd.read_csv('seu_dataset.csv') # Contar instancias de cada clase class_counts = datos['target_class'].value_counts() imprimir(class_counts)
Una vez que entendemos el grado de desequilibrio, podemos elegir la estrategia más adecuada para abordar el problema.
Remuestreo de datos
Uno de los enfoques más comunes es volver a muestrear los datos. Esto se puede hacer de dos maneras: sobremuestreo de la clase minoritaria o submuestreo de la clase mayoritaria.
- Sobremuestreo: El sobremuestreo implica duplicar instancias de la clase minoritaria o generar nuevas instancias sintéticas. Una técnica popular es SMOTE (Técnica de sobremuestreo de minorías sintéticas), que crea ejemplos sintéticos a partir de ejemplos existentes de la clase minoritaria.
- Submuestreo: El submuestreo, por otro lado, implica eliminar instancias de la clase mayoritaria. Esto se puede hacer de forma aleatoria o en función de ciertos criterios, como eliminar las instancias más cercanas al límite de decisión.
En Python, la biblioteca de aprendizaje imequilibrado ofrece implementaciones listas para usar para estas técnicas:
desde imblearn.over_sampling importar SMOTE desde imblearn.under_sampling importar RandomUnderSampler # Sobremuestreo con SMOTE hirió = hirió() X_resampled, y_resampled = smote.fit_resample(X, y) # Submuestreo con RandomUnderSampler under_sampler = RandomUnderSampler() X_resampled, y_resampled = under_sampler.fit_resample(X, y)
Algoritmos sensibles al desequilibrio
Algunos algoritmos de aprendizaje automático son más sólidos frente a conjuntos de datos desequilibrados. Por ejemplo, los árboles de decisión y los bosques aleatorios pueden manejar mejor el desequilibrio debido a su estructura de partición espacial. Además, podemos ajustar los pesos de clase durante el entrenamiento del modelo para hacerlo más sensible a la clase minoritaria.
de sklearn.ensemble importar RandomForestClassifier # Ajustar los pesos de las clases rf = RandomForestClassifier(class_weight='equilibrado') rf.fit(tren_X, tren_y)
Perspectiva cambiante: evaluación del modelo
Cuando tratamos con datos desequilibrados, las métricas de evaluación tradicionales, como la precisión, pueden no ser adecuadas. Métricas como la precisión, la recuperación y la puntuación F1 proporcionan una visión más equilibrada del rendimiento del modelo en todas las clases. La matriz de confusión también es una herramienta valiosa para comprender el rendimiento del modelo en términos de verdaderos positivos, falsos positivos, verdaderos negativos y falsos negativos.
de sklearn.metrics importar ranking_report, confusion_matrix # Predicciones del modelo y_pred = modelo.predict(X_test) # Informe de clasificación imprimir(informe_clasificación(y_test, y_pred)) # Matriz de confusión imprimir(matriz_confusión(y_test, y_pred))
Conjunto modelo
Otra estrategia eficaz es el uso de conjuntos modelo. Técnicas como el embolsado y el impulso pueden mejorar la clasificación de conjuntos de datos desequilibrados. AdaBoost, por ejemplo, ajusta de forma iterativa los pesos de las instancias, dando más importancia a los ejemplos clasificados erróneamente en iteraciones anteriores.
Conclusión
Trabajar con datos no balanceados es un desafío común en proyectos de aprendizaje automático y aprendizaje profundo. Sin embargo, con las estrategias adecuadas, podemos construir modelos que sean más justos y eficaces a la hora de clasificar todas las clases. La clave es elegir la técnica adecuada para el contexto del problema específico y siempre validar el rendimiento del modelo con métricas adecuadas para datos desequilibrados.
En resumen, lidiar con datos desequilibrados requiere una combinación de técnicas de remuestreo, elegir algoritmos apropiados, ajustar hiperparámetros y una evaluación cuidadosa del modelo. Al aplicar estas estrategias, podemos garantizar que nuestros modelos de aprendizaje automático y aprendizaje profundo realicen predicciones precisas y equilibradas, independientemente del desequilibrio de los datos.