Cómo resolver el problema del desequilibrio de categorías en las tareas de clasificación de aprendizaje automático

1. Preparación

(1) Instalación de Imblearn

¿Cómo debemos lidiar con los desequilibrios en las categorías de datos? En Python, existe el paquete Imblearn, que se crea para hacer frente a los desequilibrios de datos.

Instale Imblearn, el valor predeterminado es la versión python3.6 y superior. Al instalar, preste atención al uso de la autoridad del administrador, de lo contrario, se puede informar un error. Si es un sistema Windows, si abre la ventana cmd como administrador, si es un entorno Linux, debe agregar sudo

pip install imbalanced-learn

(2) Crear conjuntos de datos de categorías no balanceados

from sklearn.datasets import make_classification
import matplotlib.pyplot as plt

#使用make_classification生成样本数据
X, y = make_classification(n_samples=5000, 
                           n_features=2,  # 特征个数= n_informative() + n_redundant + n_repeated 
                           n_informative=2,  # 多信息特征的个数
                           n_redundant=0,   # 冗余信息,informative特征的随机线性组合
                           n_repeated=0,  # 重复信息,随机提取n_informative和n_redundant 特征 
                           n_classes=3,  # 分类类别
                           n_clusters_per_class=1,  # 某一个类别是由几个cluster构成的
                           weights=[0.01, 0.05, 0.94],  # 列表类型,权重比
                           random_state=12)

Visualización de datos:

Ver la distribución numérica de cada categoría en los datos generados a través de colecciones. Entre las 5000 muestras generadas, hay 70 de categoría 0, 265 de categoría 1 y 4,665 de categoría 2.

from collections import Counter
print(Counter(y))

 

plt.scatter(X[:, 0], X[:, 1], c=y)
plt.show()

2. Método de sobremuestreo

Sobremuestrear las clases de minorías en el conjunto de capacitación, es decir, agregar algunas muestras de clases de minorías para acercar el número de ejemplos positivos y negativos, y luego aprender.

(2) Método de sobremuestreo aleatorio

Realice un sobremuestreo aleatorio a través del código:

# 使用imblearn进行随机过采样
from imblearn.over_sampling import RandomOverSampler
ros = RandomOverSampler(random_state=0)
X_resampled, y_resampled = ros.fit_resample(X, y)
#查看结果
print(Counter(y_resampled))

#过采样后样本结果
# Counter({2: 4674, 1: 4674, 0: 4674})

# 数据集可视化
plt.scatter(X_resampled[:, 0], X_resampled[:, 1], c=y_resampled)
plt.show()

Los puntos morados en el gráfico de la visualización de datos se vuelven más gruesos, lo cual es el resultado de un muestreo de copias al azar.

Desventajas:

  • Para el sobremuestreo aleatorio, la complejidad del entrenamiento del modelo aumenta debido a la necesidad de replicar muestras minoritarias para expandir el conjunto de datos .
  • Por otro lado, es fácil provocar un ajuste excesivo del modelo , porque el muestreo excesivo aleatorio es simplemente una muestra de copia de la muestra inicial, lo que hace que las reglas aprendidas por el alumno sean demasiado específicas, lo que no conduce a la generalización. rendimiento del alumno, lo que resulta en un problema de sobreajuste.

(2) Algoritmo representativo de sobremuestreo-SMOTE


# SMOTE过采样
from imblearn.over_sampling import SMOTE
X_resampled, y_resampled = SMOTE().fit_resample(X, y)
Counter(y_resampled)

# 采样后样本结果
# [(0, 4674), (1, 4674), (2, 4674)]

# 数据集可视化
plt.scatter(X_resampled[:, 0], X_resampled[:, 1], c=y_resampled)
plt.show()

 

Tres, método de submuestreo

Dirija las muestras del conjunto de entrenamiento de la clase mayoritaria "submuestreo" (submuestreo), es decir, con la excepción de algunas muestras de modo que la mayoría de la realización de la clase positiva, el número de contraejemplos de proximidad, luego el aprendizaje.

(1) Método de submuestreo aleatorio

Código:

# 随机欠采样
from imblearn.under_sampling import RandomUnderSampler
rus = RandomUnderSampler(random_state=0)
X_resampled, y_resampled = rus.fit_resample(X, y)
Counter(y_resampled)

# 采样后结果
[(0, 64), (1, 64), (2, 64)]

# 数据集可视化
plt.scatter(X_resampled[:, 0], X_resampled[:, 1], c=y_resampled)
plt.show()

Desventajas:

  • El método de submuestreo aleatorio logra el propósito de modificar la distribución de la muestra cambiando la proporción de la mayoría de las muestras, para hacer que la distribución de la muestra sea más equilibrada, pero esto también tiene algunos problemas. Para el submuestreo aleatorio, dado que el conjunto de muestras muestreado es menor que el conjunto de muestras original, faltará alguna información, es decir, eliminar la muestra de la clase mayoritaria puede hacer que el clasificador pierda información importante sobre la clase mayoritaria.

 

 

 

Supongo que te gusta

Origin blog.csdn.net/qq_39197555/article/details/115297269
Recomendado
Clasificación