quelqu'un peut-il me dire quel est le moyen le plus simple d'appliquer class_weight à Keras lorsque l'ensemble de données est déséquilibré, s'il vous plaît.
Je n'ai que deux classes dans ma cible.
Merci
Utilisation de class_weight dans le kit sklearn.
J'utilise aussi cette méthode pour traiter les données de déséquilibre
from sklearn.utils import class_weight
class_weight = class_weight.compute_class_weight('balanced'
,np.unique(Y_train)
,Y_train)
alors model.fit
Classifier.fit(train_X,train_Y,batch_size = 100, epochs = 10
,validation_data= (test_X,test_Y),class_weight = class_weight )
Le paramètre class_weight
de la fonction fit()
est un dictionnaire mappant les classes sur une valeur de pondération.
Disons que vous avez 500 échantillons de classe 0 et 1500 échantillons de classe 1 que vous alimentez dans class_weight = {0: 3, 1: 1}. Cela donne à la classe 0 trois fois le poids de la classe 1.
train_generator.classes
vous donne les noms de classe appropriés pour votre pondération.
Si vous voulez calculer cela par programme, vous pouvez utiliser sklearn.utils.compute_class_weight () de scikit-learn.
La fonction examine la distribution des étiquettes et produit des poids pour pénaliser de manière égale les classes sous-représentées ou surreprésentées dans l'ensemble d'apprentissage.
Voir aussi ce fil utile ici: https://github.com/fchollet/keras/issues/1875
Et ce fil pourrait aussi être utile: Est-il possible de déduire automatiquement le poids_local_faire de flow_from_directory dans Keras?
Demandez-vous quelle est la bonne pondération à appliquer ou comment faire cela dans le code? Le code est simple:
class_weights = {}
for i in range(2):
class_weights[i] = your_weight
et ensuite vous passez l'argument class_weight=class_weights
dans model.fit
.
La bonne pondération à utiliser serait une sorte de fréquence inverse; vous pouvez également faire quelques essais et erreurs.