Données déséquilibrées et pondérés de la croix de l'entropie
J'essaie de former un réseau de données déséquilibrées. J'ai Une (198 échantillons), B (436 échantillons), C (710 échantillons), D (272 échantillons) et j'ai lu sur la "weighted_cross_entropy_with_logits" mais tous les exemples que j'ai trouvé sont pour la classification binaire donc je ne suis pas très confiant sur la façon de définir ces poids.
Nombre Total d'échantillons: 1616
A_weight: 198/1616 = 0.12?
L'idée derrière, si j'ai bien compris, est de sanctionner les erreurs de la mayority de la classe et de la valeur de façon plus positive les résultats dans la minorité, pas vrai?
Mon morceau de code:
weights = tf.constant([0.12, 0.26, 0.43, 0.17])
cost = tf.reduce_mean(tf.nn.weighted_cross_entropy_with_logits(logits=pred, targets=y, pos_weight=weights))
J'ai lu cette une et d'autres exemples de classification binaire, mais pas encore très clair.
Merci d'avance.
Vous devez vous connecter pour publier un commentaire.
Noter que
weighted_cross_entropy_with_logits
pondéré par la variante desigmoid_cross_entropy_with_logits
. Sigmoïde de la croix de l'entropie est généralement utilisé pour binaire de classification. Oui, il peut gérer plusieurs labels, mais sigmoïde de la croix de l'entropie fait, fondamentalement, un (binaire) décision sur chacun d'eux, par exemple, pour un visage net, ceux (non mutuellement exclusifs) les étiquettes pourraient être "le sujet porte des lunettes?", "Est le sujet féminin?", etc.Dans la classification binaire(s), chaque canal de sortie correspond à un fichier binaire (soft) de la décision. Par conséquent, la pondération doit se faire dans le calcul de la perte. C'est ce que
weighted_cross_entropy_with_logits
n', par la pondération d'un terme de l'entropie croisée sur l'autre.Mutuellement exclusifs multilabel classification, nous utilisons
softmax_cross_entropy_with_logits
, qui se comporte différemment: chaque canal de sortie correspond à la partition d'une classe candidat. La décision vient après, en comparant les résultats de chaque canal.Pondération en avant que la décision finale est donc une simple question de modifier les partitions avant de les comparer, généralement par multiplication avec des poids. Par exemple, pour une tâche de classification ternaire,
Vous pouvez également compter sur
tf.losses.softmax_cross_entropy
pour gérer les trois dernières étapes.Dans votre cas, où vous avez besoin pour s'attaquer à des données de déséquilibre, la classe de poids pourrait en effet être inversement proportionnelle à leur fréquence dans le train de données. De les normaliser, de sorte que leur somme soit égale à un, ou le nombre de classes a aussi du sens.
Remarque que ci-dessus, nous avons pénalisé la perte de la vraie étiquette des échantillons. Nous avons pu également pénalisé la perte de la estimé étiquettes en définissant simplement
et le reste du code n'a pas besoin de changer grâce à la radiodiffusion à de la magie.
Dans le cas général, vous voulez des poids qui varient selon le genre d'erreur que vous faites. En d'autres termes, à chaque paire d'étiquettes
X
etY
, vous pouvez choisir la façon de sanctionner le choix de l'étiquetteX
quand le vrai label estY
. Vous vous retrouvez avec un ensemble avant la matrice de poids, ce qui entraîneweights
au-dessus de tous les(num_samples, num_classes)
tenseur. Cela va un peu au-delà de ce que vous voulez, mais il pourrait être utile de savoir cependant que seul votre définition du poids tenseur besoin de changer dans le code ci-dessus.tf.nn.softmax_cross_entropy_with_logits
a été dépréciée en faveur detf.nn.softmax_cross_entropy_with_logits_v2
Class A = 157 obs (0.272 of total) :: Class B = 345 obs (0.597 of total) :: Class C = 75 (0.129 of total).
Beaucoup apprécié.1
dans un chaud vecteurs), l'utilisationtf.gather
comme indiqué dans ce répondre pour être plus efficace.Voir cette réponse pour une autre solution qui fonctionne avec sparse_softmax_cross_entropy:
@DankMasterDan
: Le lien est bon de donner du crédit et du contexte, mais faire de copier coller référencé code dans votre réponse, de sorte qu'il est auto-suffisant.