Gérer les données déséquilibrées : détails techniques et études de cas

Les ensembles de données déséquilibrés sont un problème courant dans le monde de l'apprentissage automatique et de la science des données. Un ensemble de données déséquilibré fait référence à un problème de classification dans lequel les catégories de la variable cible sont inégalement réparties, c'est-à-dire que le nombre d'échantillons d'une certaine catégorie dépasse de loin celui des autres catégories. Cet article explique en détail comment traiter les données déséquilibrées, y compris les méthodes de rééchantillonnage, les méthodes d'ensemble et les mesures de performance pour les données déséquilibrées.

Table des matières

1. Méthode de rééchantillonnage

suréchantillonnage

sous-échantillonnage

2. Méthode d'intégration

Ensachage

Booster

3. Mesures de performances

en conclusion


1. Méthode de rééchantillonnage

Le rééchantillonnage est une méthode courante pour traiter les données déséquilibrées, notamment le suréchantillonnage et le sous-échantillonnage.

suréchantillonnage

Le suréchantillonnage consiste à augmenter le nombre d'échantillons dans la classe minoritaire afin que le nombre d'échantillons dans la classe minoritaire et dans la classe majoritaire soit similaire. Voici un exemple de suréchantillonnage à l'aide de la bibliothèque d'apprentissage déséquilibré 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))

Dans cet exemple, nous créons d'abord un ensemble de données de classification binaire déséquilibré, puis RandomOverSamplersuréchantillonnons aléatoirement avec des classes, et enfin imprimons les distributions de classe des ensembles de données d'origine et suréchantillonnés.

sous-échantillonnage

Le sous-échantillonnage fait référence à la réduction du nombre d'échantillons dans la classe majoritaire afin que le nombre d'échantillons dans la classe majoritaire et la classe minoritaire soient similaires. Voici un exemple de sous-échantillonnage à l'aide de la bibliothèque "balanced-learn" :

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))

Dans cet exemple, nous RandomUnderSamplersous-échantillonnons aléatoirement avec des classes, puis imprimons la distribution de classe de l'ensemble de données sous-échantillonné.

2. Méthode d'intégration

Les méthodes d'ensemble sont une autre méthode courante pour traiter les données déséquilibrées, notamment le Bagging et le Boosting.

Ensachage

La méthode de bagging entraîne plusieurs modèles en créant plusieurs sous-ensembles, puis combine les résultats de prédiction de ces modèles. Lorsque nous traitons des données déséquilibrées, nous pouvons combiner le sous-échantillonnage et le bagging, c'est-à-dire le sous-échantillonnage dans chaque sous-ensemble, puis utiliser ces sous-ensembles pour entraîner le modèle.

Voici un exemple de sous-échantillonnage et de mise en sac à l'aide de la bibliothèque d'apprentissage déséquilibré 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)

Dans cet exemple, nous créons d'abord un classificateur d'arbre de décision comme classificateur de base, puis nous l'utilisons BalancedBaggingClassifierpour le sous-échantillonnage et l'ensachage.

Booster

Le boosting fonctionne en formant plusieurs modèles, où chaque modèle essaie de corriger les erreurs du modèle précédent. Lorsque nous traitons des données déséquilibrées, nous pouvons utiliser des méthodes de Boosting améliorées telles que AdaBoost et Gradient Boosting.

Voici un exemple d'AdaBoost utilisant la bibliothèque scikit-learn de Python :

from sklearn.ensemble import AdaBoostClassifier

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

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

Dans cet exemple, nous utilisons AdaBoostClassifierAdaBoost.

3. Mesures de performances

Lorsqu'il s'agit de données déséquilibrées, on ne peut pas se fier uniquement au taux de précision pour évaluer les performances du modèle, car le nombre d'échantillons dans la classe majoritaire dépasse largement celui de la classe minoritaire, même si le modèle ne prédit que la classe majoritaire, la le taux de précision peut être élevé. Par conséquent, nous devons utiliser des mesures de performance adaptées aux données déséquilibrées, telles que la matrice de confusion, le taux de précision, le taux de rappel, le score F1, la courbe ROC et la valeur AUC.

Voici un exemple de calcul de ces métriques à l'aide de la bibliothèque 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))

Dans cet exemple, nous utilisons d'abord le modèle pour faire des prédictions, puis calculons la matrice de confusion, la précision, le rappel, le score F1 et la valeur AUC.

en conclusion

Le traitement des données déséquilibrées est une tâche importante et complexe qui nécessite l'utilisation de diverses techniques, notamment le rééchantillonnage, les méthodes d'ensemble et les mesures de performance applicables aux données déséquilibrées. Lorsqu'il s'agit de données déséquilibrées, aucune méthode n'est la plus efficace dans toutes les situations. Nous devons choisir et adapter la méthode en fonction du problème spécifique et de l'ensemble de données.

Par exemple, si la taille de l'échantillon de l'ensemble de données est grande, le suréchantillonnage peut entraîner des ressources informatiques insuffisantes, tandis qu'un sous-échantillonnage peut entraîner une perte d'informations. Dans ce cas, on peut envisager d'utiliser des méthodes d'ensemble ou de combiner des méthodes de rééchantillonnage et d'ensemble. De plus, on peut aussi essayer d'utiliser différentes métriques de performance pour évaluer la performance du modèle.Par exemple, dans le domaine de la maîtrise des risques médicaux ou financiers, on s'intéresse plus au taux de rappel des classes minoritaires (maladie ou fraude).

Après étude théorique, nous recommandons de pratiquer plusieurs fois sur des données et des problèmes réels, afin de mieux comprendre et maîtriser ces méthodes. J'espère que cet article vous aidera à mieux comprendre comment gérer les données déséquilibrées et à obtenir de meilleurs résultats dans vos projets d'apprentissage automatique.

Restez à l'écoute pour le prochain article, où nous explorerons comment traiter les données manquantes !

Je suppose que tu aimes

Origine blog.csdn.net/a871923942/article/details/131418778
conseillé
Classement