Problème de déséquilibre de catégories dans la classification d'images, des exemples de code spécifiques sont nécessaires
Résumé : Dans les tâches de classification d'images, les catégories de l'ensemble de données peuvent avoir un problème de déséquilibre, c'est-à-dire que le nombre d'échantillons dans certaines catégories est beaucoup plus que les autres catégories. Ce déséquilibre de classe peut avoir un impact négatif sur la formation et les performances du modèle. Cet article décrira les causes et les effets du problème de déséquilibre de classes et fournira quelques exemples de code concrets pour résoudre le problème.
Le problème de déséquilibre des classes a des impacts négatifs sur l'entraînement et les performances du modèle. Premièrement, en raison du petit nombre d’échantillons dans certaines catégories, le modèle peut mal évaluer ces catégories. Par exemple, dans un problème à deux classifications, le nombre d'échantillons dans les deux catégories est respectivement de 10 et 1 000. Si le modèle n'effectue aucun apprentissage et prédit directement tous les échantillons en tant que catégories avec un plus grand nombre d'échantillons, la précision sera. très élevé, mais en réalité les échantillons ne sont pas efficacement classés. Deuxièmement, en raison d’une répartition déséquilibrée des échantillons, le modèle peut être biaisé en faveur de la prédiction de catégories comportant un plus grand nombre d’échantillons, ce qui entraîne de mauvaises performances de classification pour les autres catégories. Enfin, une répartition déséquilibrée des catégories peut conduire à des échantillons de formation insuffisants du modèle pour les catégories minoritaires, ce qui rend le modèle appris ayant une faible capacité de généralisation pour les catégories minoritaires.
Le sous-échantillonnage fait référence à la suppression aléatoire de certains échantillons des catégories comportant un plus grand nombre d'échantillons, afin que le nombre d'échantillons dans chaque catégorie soit plus proche. Cette méthode est simple et directe, mais peut entraîner une perte d'informations, car la suppression d'échantillons peut entraîner la perte de certaines fonctionnalités importantes.
Le suréchantillonnage fait référence à la copie de certains échantillons de catégories avec un plus petit nombre d'échantillons pour rendre le nombre d'échantillons dans chaque catégorie plus équilibré. Cette méthode peut augmenter le nombre d'échantillons, mais peut entraîner des problèmes de surajustement, car la copie d'échantillons peut entraîner un surajustement du modèle sur l'ensemble d'apprentissage et avoir une faible capacité de généralisation.
L'ajustement des poids consiste à attribuer des poids différents aux échantillons de différentes catégories dans la fonction de perte, afin que le modèle accorde plus d'attention aux catégories avec un plus petit nombre d'échantillons. Cette méthode peut résoudre efficacement le problème du déséquilibre des classes sans introduire d’échantillons supplémentaires. L'approche spécifique consiste à ajuster le poids de chaque catégorie dans la fonction de perte en spécifiant un vecteur de poids afin que les catégories avec un plus petit nombre d'échantillons aient des poids plus élevés.
Voici un exemple de code utilisant le framework PyTorch qui montre comment utiliser la méthode d'ajustement des poids pour résoudre le problème de déséquilibre des classes :
import torch import torch.nn as nn import torch.optim as optim # 定义分类网络 class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.fc1 = nn.Linear(784, 100) self.fc2 = nn.Linear(100, 10) def forward(self, x): x = x.view(-1, 784) x = self.fc1(x) x = self.fc2(x) return x # 定义损失函数和优化器 criterion = nn.CrossEntropyLoss(weight=torch.tensor([0.1, 0.9])) # 根据样本数量设置权重 optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9) # 训练模型 for epoch in range(10): running_loss = 0.0 for i, data in enumerate(trainloader, 0): inputs, labels = data optimizer.zero_grad() outputs = net(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() if i % 2000 == 1999: print('[%d, %5d] loss: %.3f' % (epoch + 1, i + 1, running_loss / 2000)) running_loss = 0.0 print('Finished Training')
Dans le code ci-dessus, les poids de deux classes sont spécifiés partorch.tensor([0.1, 0.9])
, la classe avec le plus petit nombre d'échantillons Le poids de est de 0,1 et le poids des catégories avec un plus grand nombre d'échantillons est de 0,9. Cela permet au modèle d’accorder davantage d’attention aux catégories comportant un plus petit nombre d’échantillons.
Références :
[1] He, H. et Garcia, E. A. (2009). Apprendre à partir de données déséquilibrées sur les connaissances et l'ingénierie des données, 21(9), 1263-1284.
[2] Chawla. , N. V., Bowyer, K. W., Hall, L. O. et Kegelmeyer, W. P. (2002) : technique de suréchantillonnage synthétique des minorités Journal of artificial intelligence research, 16, 321-357.
.Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!