He intentado utilizar una red neuronal ReLU para clasificar conjuntos de datos de 3 clases que no están equilibrados (tanto en el conjunto de entrenamiento como en el de prueba), es decir, el 30% de las muestras están en la clase A, el 10% en la clase B y el 60% en la clase C. Y, en concreto para este problema, estoy interesado sobre todo en la precisión de la clase C (con recalls razonables), ya que es la única clase de la que puedo hacer uso. Actualmente clono artificialmente y añado ajustes aleatorios de +/-5% a las muestras de las clases A y B para que cada clase tenga aproximadamente 1/3 de muestras en el conjunto de entrenamiento. Y luego elijo la época ganadora basándome en la puntuación F1 para la clase C.
NEW BEST: epoch 1, score: 0.572852844535, F1: 0.58989
5, precision 0.516919, recall 0.686862, accuracy 0.643098 (0.572852844535), learning_rate=1.0 (patience: 320000 / 1599)
F1: 0.589895, precision 0.516919, recall 0.686862, accuracy 0.643098
precisions: [ 0.19046712 0.48642075 0.61648193]
recalls: [ 0.17856346 0.10650572 0.82099259]
class[0] is predicted as class[0]: 40
class[0] is predicted as class[1]: 4
class[0] is predicted as class[2]: 180
class[1] is predicted as class[0]: 54
class[1] is predicted as class[1]: 36
class[1] is predicted as class[2]: 248
class[2] is predicted as class[0]: 116
class[2] is predicted as class[1]: 34
class[2] is predicted as class[2]: 688
NEW BEST epoch 14, score: 0.708267443522, F1: 0.5302
56, precision 0.612621, recall 0.467413, accuracy 0.556719 (0.708267443522), learning_rate=0.974310040474 (patience: 343195 / 22399)
F1: 0.530256, precision 0.612621, recall 0.467413, accuracy 0.556719
precisions: [ 0.22606464 0.33912306 0.82626222]
recalls: [ 0.49551359 0.46152481 0.44271548]
class[0] is predicted as class[0]: 111
class[0] is predicted as class[1]: 89
class[0] is predicted as class[2]: 24
class[1] is predicted as class[0]: 128
class[1] is predicted as class[1]: 156
class[1] is predicted as class[2]: 54
class[2] is predicted as class[0]: 252
class[2] is predicted as class[1]: 215
class[2] is predicted as class[2]: 371
Como se ve arriba, en la época 1, la precisión parece mucho mejor porque la red acaba de clasificar todas las muestras de prueba en la clase C; en la época 14, la precisión parece peor, pero en realidad es mejor porque la red también puede clasificar otras clases.
¿Cómo puedo entrenar o probar este conjunto de datos desequilibrado? ¿Debo equilibrar artificialmente el conjunto de prueba además del conjunto de entrenamiento?