Está en la página 1de 5

La clasificación desequilibrada implica el desarrollo de modelos predictivos en conjuntos de datos

de clasificación que tienen un desequilibrio de clase grave.

El desafío de trabajar con conjuntos de datos desequilibrados es que la mayoría de las técnicas de
aprendizaje automático ignorarán y, a su vez, tendrán un bajo rendimiento en la clase minoritaria,
aunque lo más importante es el rendimiento en la clase minoritaria.

Un enfoque para abordar los conjuntos de datos desequilibrados es sobremuestrear la clase


minoritaria. El enfoque más simple consiste en duplicar ejemplos en la clase minoritaria, aunque
estos ejemplos no agregan ninguna información nueva al modelo. En cambio, se pueden sintetizar
nuevos ejemplos a partir de los ejemplos existentes. Este es un tipo de aumento de datos para la
clase minoritaria y se conoce como Técnica de sobremuestreo de minorías sintéticas, o SMOTE
para abreviar.

En este tutorial, descubrirá SMOTE para sobremuestrear conjuntos de datos de clasificación


desequilibrados.

Después de completar este tutorial, sabrá:

Cómo SMOTE sintetiza nuevos ejemplos para la clase minoritaria.

Cómo ajustar y evaluar correctamente los modelos de aprendizaje automático en conjuntos de


datos de entrenamiento transformados por SMOTE.

Cómo usar extensiones de SMOTE que generan ejemplos sintéticos a lo largo del límite de decisión
de clase.

Descubra SMOTE, clasificación de una clase, aprendizaje sensible a los costos, movimiento de
umbral y mucho más en mi nuevo libro, con 30 tutoriales paso a paso y código fuente completo de
Python.

Empecemos.
Resumen del tutorial

Este tutorial está dividido en cinco partes; son:

 Técnica de sobremuestreo de minorías sintéticas


 Biblioteca de aprendizaje desequilibrado
 SMOTE para equilibrar datos
 SMOTE para Clasificación
 SMOTE con generación selectiva de muestras sintéticas
 Borderline-SMOTE
 SVM límite-SMOTE
 Muestreo sintético adaptativo (ADASYN)
 Técnica de sobremuestreo de minorías sintéticas

Un problema con la clasificación desequilibrada es que hay muy pocos ejemplos de la clase
minoritaria para que un modelo aprenda efectivamente el límite de decisión.

Una forma de resolver este problema es sobremuestrear los ejemplos en la clase minoritaria. Esto
se puede lograr simplemente duplicando ejemplos de la clase minoritaria en el conjunto de datos
de capacitación antes de ajustar un modelo. Esto puede equilibrar la distribución de la clase, pero
no proporciona ninguna información adicional al modelo.

Una mejora en la duplicación de ejemplos de la clase minoritaria es sintetizar nuevos ejemplos de


la clase minoritaria. Este es un tipo de aumento de datos para datos tabulares y puede ser muy
efectivo.

Quizás el enfoque más utilizado para sintetizar nuevos ejemplos se llama Técnica de
sobremuestreo de minorías sintéticas, o SMOTE para abreviar. Esta técnica fue descrita por Nitesh
Chawla, et al. en su artículo de 2002 llamado así por la técnica titulada "SMOTE: Técnica de
sobremuestreo de minorías sintéticas".

SMOTE funciona seleccionando ejemplos cercanos en el espacio de características, dibujando una


línea entre los ejemplos en el espacio de características y dibujando una nueva muestra en un
punto a lo largo de esa línea.

Específicamente, primero se elige un ejemplo aleatorio de la clase minoritaria. Entonces se


encuentran k de los vecinos más cercanos para ese ejemplo (típicamente k = 5). Se elige un vecino
seleccionado aleatoriamente y se crea un ejemplo sintético en un punto seleccionado
aleatoriamente entre los dos ejemplos en el espacio de características.

… SMOTE primero selecciona una instancia de clase minoritaria a al azar y encuentra sus k vecinos
de clase minoritaria más cercanos. La instancia sintética se crea eligiendo uno de los k vecinos más
cercanos b al azar y conectando ayb para formar un segmento de línea en el espacio de
características. Las instancias sintéticas se generan como una combinación convexa de las dos
instancias elegidas ay b.

- Página 47, Aprendizaje desequilibrado: fundamentos, algoritmos y aplicaciones, 2013.

Este procedimiento se puede utilizar para crear tantos ejemplos sintéticos para la clase minoritaria
como sea necesario. Como se describe en el documento, sugiere primero usar un muestreo
aleatorio para recortar el número de ejemplos en la clase mayoritaria, luego usar SMOTE para
sobremuestrear la clase minoritaria para equilibrar la distribución de la clase.

La combinación de SMOTE y submuestreo funciona mejor que el submuestreo simple.

- SMOTE: Técnica de sobremuestreo de minorías sintéticas, 2011.

El enfoque es efectivo porque se crean nuevos ejemplos sintéticos de la clase minoritaria que son
plausibles, es decir, son relativamente cercanos en el espacio de características a los ejemplos
existentes de la clase minoritaria.

Nuestro método de sobremuestreo sintético funciona para hacer que el clasificador construya
regiones de decisión más grandes que contienen puntos de clase minoritarios cercanos.

- SMOTE: Técnica de sobremuestreo de minorías sintéticas, 2011.

Una desventaja general del enfoque es que los ejemplos sintéticos se crean sin considerar la clase
mayoritaria, posiblemente resultando en ejemplos ambiguos si hay una superposición fuerte para
las clases.
Ahora que estamos familiarizados con la técnica, veamos un ejemplo trabajado para un problema
de clasificación desequilibrado.

Biblioteca de aprendizaje desequilibrado


En estos ejemplos, utilizaremos las implementaciones proporcionadas por la biblioteca Python de
desequilibrio de aprendizaje, que se puede instalar a través de pip de la siguiente manera:
sudo pip install imbalanced-learn

Puede confirmar que la instalación se realizó correctamente imprimiendo la versión de la


biblioteca instalada:
# check version number

import imblearn

print(imblearn.__version__)

La ejecución del ejemplo imprimirá el número de versión de la biblioteca instalada; por ejemplo:

SMOTE para equilibrar datos


En esta sección, desarrollaremos una intuición para SMOTE aplicándola a un problema de
clasificación binaria desequilibrada.

Primero, podemos usar la función make_classification () scikit-learn para crear un conjunto de


datos de clasificación binaria sintética con 10,000 ejemplos y una distribución de clase 1: 100.
...

# define dataset

X, y = make_classification(n_samples=10000, n_features=2, n_redundant=0,

n_clusters_per_class=1, weights=[0.99], flip_y=0, random_state=1)

Podemos usar el objeto Counter para resumir el número de ejemplos en cada clase para confirmar
que el conjunto de datos se creó correctamente.

...
# summarize class distribution

counter = Counter(y)

print(counter)

También podría gustarte