Muy buenas, soy Luis y esta vez les traigo un nuevo post.
En los problemas de aprendizaje automático, a menudo nos encontramos con conjuntos de datos desequilibrados.
Problemas como la detección de fraude, la predicción de reclamaciones, la predicción de abandono, la detección de anomalías y la detección de valores atípicos son ejemplos de problemas de clasificación que a menudo consisten en un conjunto de datos desequilibrado.
En este artículo, voy a discutir un enfoque simple para lidiar con un conjunto de datos desequilibrado mediante el uso de la biblioteca imblearn python, que está especialmente diseñada para lidiar con conjuntos de datos desequilibrados.
El conjunto de datos que estoy usando aquí está tomado del hackathon Machinehack Detección de Anomalías en la fabricación de obleas que consta de clases binarias.
Índice
¿Qué es un conjunto de datos desequilibrado?
Un conjunto de datos que consta de una clase es mayoritario y si la clase tiene un peso superior al 90%
y otra clase tiene un peso inferior al 10%
, entonces el conjunto de datos está desequilibrado.
El conjunto de datos desequilibrado está muy sesgado hacia una clase, crea un problema para entrenar nuestro modelo de aprendizaje automático. El aprendizaje automático no puede identificar correctamente las clases minoritarias.
El conjunto de datos de fabricación de obleas consta de solo dos clases: clase 0 si la etiqueta no es una anomalía y clase 1
si la etiqueta de la fila es una anomalía.
Biblioteca Imblearn
La biblioteca Imblearn está diseñada específicamente para lidiar con conjuntos de datos desequilibrados. Proporciona varios métodos como submuestreo, sobremuestreo y SMOTE para manejar y eliminar el desequilibrio del conjunto de datos.
Esta biblioteca consta de varios métodos de conjunto como clasificadores de ensacado, bosque aleatorio y clasificadores de impulso que se pueden usar para entrenar modelos para conjuntos de datos desequilibrados con una precisión muy eficiente.
Manejo del conjunto de datos desequilibrado
Para construir un buen modelo de aprendizaje automático, es necesario que tengamos suficientes puntos de muestra para cada clase. Para hacer eso, podemos usar submuestreo, sobremuestreo o SMOTE de acuerdo con nuestro problema y los requisitos del conjunto de datos.
El submuestreo es una de las técnicas que está diseñada para manejar el conjunto de datos desequilibrado y equilibrarlo. Esta técnica elimina o borra los puntos de datos de la clase mayoritaria para hacer una proporción igual de clases mayores y menores.
Hay varios métodos de submuestreo como los enlaces de Tomek, EditedNearestNeighbours, CondensedNearestNeighbour, InstanceHardnessThreshold, etc. Estos métodos se pueden implementar usando la biblioteca imblearn.
La técnica de sobremuestreo es muy útil para manejar el conjunto de datos desequilibrado. Esta técnica redistribuye aleatoriamente los puntos de datos de la clase minoritaria para aumentar la proporción en el conjunto de datos.
Duplica los puntos de datos existentes de la clase minoritaria e iguala la proporción de la clase mayoritaria y minoritaria.
SMOTE se refiere a la técnica de sobremuestreo de minorías sintéticas. Esta es también una técnica de sobremuestreo y se usa ampliamente para manejar el conjunto de datos desequilibrado.
SMOTE selecciona los puntos de datos de la clase minoritaria en el espacio de entidades para dibujar una línea entre esos puntos y generar nuevos puntos junto con la línea. Por lo tanto, esta técnica sintetiza nuevos puntos de datos para la clase minoritaria y sobremuestrea esa clase.
Este es el método más eficaz para el sobremuestreo.
Bosque aleatorio equilibrado
El bosque aleatorio equilibrado es un algoritmo de conjunto muy eficaz para tratar el conjunto de datos desequilibrado. Este algoritmo funciona de la siguiente manera:
I. Para cada iteración del algoritmo de bosque aleatorio, se toma una muestra de arranque de la clase minoritaria y el mismo número de puntos de datos forman la clase mayoritaria con reemplazos.
II. Induzca un árbol de clasificación utilizando el algoritmo CART a su tamaño máximo sin podar y en cada nodo de búsqueda forme variables seleccionadas al azar para la división óptima.
III. Repita estos dos pasos anteriores para el número deseado de veces y agregue los resultados para hacer la predicción final.
Antes de implementar este algoritmo, divido el conjunto de datos en 10 divisiones usando StratifiedKFold y luego aplico BalancedRandomForestClassifier.
from sklearn.model_selection import StratifiedKFold from imblearn.ensemble import BalancedRandomForestClassifier kfold = StratifiedKFold(n_splits=10,shuffle=True,random_state=202020) y_pred_1 = np.zeros((1,len(test) )) for fold, (tr_ind, val_ind) in enumerate(kfold.split(X, y)): X_train, X_val = X.iloc[tr_ind], X.iloc[val_ind] y_train, y_val = y.iloc[tr_ind], y.iloc[val_ind] model1 = BalancedRandomForestClassifier(n_estimators = 50, max_depth=7, min_samples_split = 3, bootstrap= True, min_samples_leaf=1,random_state=202020) model1.fit(X_train,y_train) val_pred1 = model1.predict(X_val) y_pred_1 += model1.predict(X_test) / 10 print('Auc roc score -',fold+1,': ',roc_auc_score(y_val,val_pred1))
En la imagen de abajo podemos obtener la puntuación auc_roc
para diferentes pliegues después de aplicar el clasificador de bosque aleatorio balanceado.
La biblioteca Imblearn es una de ellas y una biblioteca de enriquecimiento de características muy amplia, aunque aquí solo toco algunos temas que se usan con más frecuencia y que puede probar para su propio problema de aprendizaje automático.
Para obtener más información, proporciono algunos enlaces para obtener una intuición profunda de algunos de los temas mencionados anteriormente.
Espero que te haya sido de utilidad. Gracias por leer este post.
Añadir comentario