Je ne sais pas comment interpréter le comportement par défaut de Keras dans la situation suivante :
Mon Y (vérité terrain) a été mis en place en utilisant la méthode de scikit-learn. MultilabelBinarizer
().
Par conséquent, pour donner un exemple au hasard, une ligne de mon fichier y
est codée comme telle : [0,0,0,1,0,1,0,0,0,0,1]
.
J'ai donc 11 classes qui peuvent être prédites, et plus d'une peut être vraie ; d'où la nature multi-label du problème. Il y a trois étiquettes pour cet échantillon particulier.
J'entraîne le modèle comme je le ferais pour un problème non multilabel (comme d'habitude) et je n'obtiens aucune erreur.
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.optimizers import SGD
model = Sequential()
model.add(Dense(5000, activation='relu', input_dim=X_train.shape[1]))
model.add(Dropout(0.1))
model.add(Dense(600, activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(y_train.shape[1], activation='softmax'))
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy',
optimizer=sgd,
metrics=['accuracy',])
model.fit(X_train, y_train,epochs=5,batch_size=2000)
score = model.evaluate(X_test, y_test, batch_size=2000)
score
Que fait Keras lorsqu'il rencontre mon y_train
et voit qu'il est codé en "multi" one-hot, ce qui signifie qu'il y a plus d'un "un" dans chaque ligne de y_train
? En gros, est-ce que Keras effectue automatiquement la classification multi-label ? Y a-t-il des différences dans l'interprétation des mesures de notation ?