Manejo de datos desequilibrados: detalles técnicos y estudios de casos

Los conjuntos de datos desequilibrados son un problema común en el mundo del aprendizaje automático y la ciencia de datos. Un conjunto de datos desequilibrado se refiere a un problema de clasificación en el que las categorías de la variable objetivo están distribuidas de manera desigual, es decir, el número de muestras de una determinada categoría supera con creces al de otras categorías. Este artículo explicará en detalle cómo manejar los datos desequilibrados, incluidos los métodos de remuestreo, los métodos de conjunto y las métricas de rendimiento para los datos desequilibrados.

Tabla de contenido

1. Método de remuestreo

sobremuestreo

submuestreo

2. Método de integración

Harpillera

impulsar

3. Métricas de rendimiento

en conclusión


1. Método de remuestreo

El remuestreo es un método común para tratar datos desequilibrados, que incluye principalmente el sobremuestreo y el submuestreo.

sobremuestreo

El sobremuestreo se refiere a aumentar el número de muestras en la clase minoritaria para que el número de muestras en la clase minoritaria y la clase mayoritaria sean similares. Aquí hay un ejemplo de sobremuestreo utilizando la biblioteca de aprendizaje desequilibrado de Python:

from imblearn.over_sampling import RandomOverSampler
from sklearn.datasets import make_classification
import numpy as np

# 创建不平衡数据集
X, y = make_classification(n_classes=2, class_sep=1.5, weights=[0.9, 0.1], n_informative=3, n_redundant=1, flip_y=0, n_features=20, n_clusters_per_class=1, n_samples=1000, random_state=10)

# 打印原始数据集的类别分布
print('Original dataset shape %s' % np.bincount(y))

# 过采样
ros = RandomOverSampler(random_state=42)
X_res, y_res = ros.fit_resample(X, y)

# 打印过采样后的数据集的类别分布
print('Resampled dataset shape %s' % np.bincount(y_res))

En este ejemplo, primero creamos un conjunto de datos de clasificación binaria desequilibrada, luego RandomOverSamplerrealizamos un sobremuestreo aleatorio con clases y finalmente imprimimos las distribuciones de clase de los conjuntos de datos originales y sobremuestreados.

submuestreo

El submuestreo se refiere a reducir el número de muestras en la clase mayoritaria para que el número de muestras en la clase mayoritaria y la clase minoritaria sean similares. Aquí hay un ejemplo de submuestreo utilizando la biblioteca de aprendizaje desequilibrado:

from imblearn.under_sampling import RandomUnderSampler

# 欠采样
rus = RandomUnderSampler(random_state=42)
X_res, y_res = rus.fit_resample(X, y)

# 打印欠采样后的数据集的类别分布
print('Resampled dataset shape %s' % np.bincount(y_res))

En este ejemplo, submuestreamos RandomUnderSampleraleatoriamente con clases y luego imprimimos la distribución de clases del conjunto de datos submuestreado.

2. Método de integración

Los métodos de conjunto son otro método común para tratar con datos desequilibrados, incluidos el embolsado y el impulso.

Harpillera

El método de embolsado entrena varios modelos mediante la creación de varios subconjuntos y luego combina los resultados de predicción de estos modelos. Cuando se trata de datos desequilibrados, podemos combinar submuestreo y embolsado, es decir, submuestreo en cada subconjunto, y luego usar estos subconjuntos para entrenar el modelo.

Aquí hay un ejemplo de submuestreo y embolsado utilizando la biblioteca de aprendizaje desequilibrado de Python:

from imblearn.ensemble import BalancedBaggingClassifier
from sklearn.tree import DecisionTreeClassifier

# 创建基分类器
base_cls = DecisionTreeClassifier()

# 创建BalancedBaggingClassifier
bbc = BalancedBaggingClassifier(base_estimator=base_cls, random_state=42)

# 训练模型
bbc.fit(X, y)

En este ejemplo, primero creamos un clasificador de árbol de decisión como clasificador base y luego lo usamos BalancedBaggingClassifierpara submuestreo y empaquetado.

impulsar

Impulsar funciona entrenando múltiples modelos, donde cada modelo intenta corregir los errores del modelo anterior. Cuando se trata de datos desequilibrados, podemos utilizar métodos de refuerzo mejorados, como AdaBoost y Gradient Boosting.

Aquí hay un ejemplo de AdaBoost usando la biblioteca scikit-learn de Python:

from sklearn.ensemble import AdaBoostClassifier

# 创建AdaBoostClassifier
abc = AdaBoostClassifier(random_state=42)

# 训练模型
abc.fit(X, y)

En este ejemplo, usamos AdaBoostClassifierAdaBoost.

3. Métricas de rendimiento

Cuando se trata de datos desequilibrados, no podemos confiar únicamente en la tasa de precisión para evaluar el rendimiento del modelo, porque el número de muestras en la clase mayoritaria supera con creces al de la clase minoritaria, incluso si el modelo solo predice la clase mayoritaria, el la tasa de precisión puede ser alta. Por lo tanto, necesitamos utilizar métricas de rendimiento adecuadas para datos desequilibrados, como la matriz de confusión, la tasa de precisión, la tasa de recuperación, la puntuación F1, la curva ROC y el valor AUC.

Aquí hay un ejemplo de cómo calcular estas métricas usando la biblioteca scikit-learn de Python:

from sklearn.metrics import confusion_matrix, precision_score, recall_score, f1_score, roc_auc_score

# 预测
y_pred = bbc.predict(X)

# 计算混淆矩阵
print('Confusion Matrix:\n', confusion_matrix(y, y_pred))

# 计算精确率
print('Precision: ', precision_score(y, y_pred))

# 计算召回率
print('Recall: ', recall_score(y, y_pred))

# 计算F1分数
print('F1 Score: ', f1_score(y, y_pred))

# 计算AUC值
print('AUC: ', roc_auc_score(y, y_pred))

En este ejemplo, primero usamos el modelo para hacer predicciones y luego calculamos la matriz de confusión, la precisión, la recuperación, la puntuación F1 y el valor de AUC.

en conclusión

Tratar con datos desequilibrados es una tarea importante y compleja que requiere el uso de varias técnicas que incluyen remuestreo, métodos de conjunto y métricas de rendimiento aplicables a datos desequilibrados. Cuando se trata de datos desequilibrados, ningún método es el más eficiente en todas las situaciones. Necesitamos elegir y adaptar el método de acuerdo con el problema específico y el conjunto de datos.

Por ejemplo, si la cantidad de muestras en un conjunto de datos es grande, el sobremuestreo puede generar recursos informáticos insuficientes, mientras que el submuestreo puede provocar la pérdida de información. En este caso, podemos considerar usar métodos de conjunto o combinar métodos de remuestreo y de conjunto. Además, también podemos intentar utilizar diferentes métricas de rendimiento para evaluar el rendimiento del modelo.Por ejemplo, en el campo del control de riesgos médicos o financieros, nos preocupa más la tasa de recuperación de las clases minoritarias (enfermedad o fraude).

Después del estudio teórico, recomendamos practicar varias veces con datos y problemas reales, para comprender y dominar mejor estos métodos. Espero que este artículo lo ayude a comprender mejor cómo manejar los datos desequilibrados y lograr mejores resultados en sus proyectos de aprendizaje automático.

¡Estén atentos para la próxima publicación, donde exploraremos cómo lidiar con los datos faltantes!

Supongo que te gusta

Origin blog.csdn.net/a871923942/article/details/131418778
Recomendado
Clasificación