ValueError: ne Peut pas gérer mélange de multilabel-indicateur binaire et
Je suis à l'aide de Keras avec le scikit-learn wrapper. En particulier, je veux utiliser GridSearchCV pour les hyper-paramètres d'optimisation.
C'est un multi-classe de problème, c'est à dire la variable cible peut avoir qu'une seule étiquette choisie sur un ensemble de n classes. Par exemple, la variable cible peut être "Class1', 'Classe 2' ... 'Classn'.
# self._arch creates my model
nn = KerasClassifier(build_fn=self._arch, verbose=0)
clf = GridSearchCV(
nn,
param_grid={ ... },
# I use f1 score macro averaged
scoring='f1_macro',
n_jobs=-1)
# self.fX is the data matrix
# self.fy_enc is the target variable encoded with one-hot format
clf.fit(self.fX.values, self.fy_enc.values)
Le problème est que, lorsque le score est calculé lors de la validation croisée, la véritable label pour les échantillons de validation est codé chaude, tandis que la prédiction pour quelque raison s'effondre binaire étiquette (lorsque la variable cible n'a que deux classes). Par exemple, c'est la dernière partie de la trace de la pile:
...........................................................................
/Users/fbrundu/.pyenv/versions/3.6.0/lib/python3.6/site-packages/sklearn/metrics/classification.py in _check_targets(y_true=array([[ 0., 1.],
[ 0., 1.],
[ 0... 0., 1.],
[ 0., 1.],
[ 0., 1.]]), y_pred=array([1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1,...0, 1, 0, 0, 1, 0, 0, 0,
0, 0, 0, 0, 1, 1]))
77 if y_type == set(["binary", "multiclass"]):
78 y_type = set(["multiclass"])
79
80 if len(y_type) > 1:
81 raise ValueError("Can't handle mix of {0} and {1}"
---> 82 "".format(type_true, type_pred))
type_true = 'multilabel-indicator'
type_pred = 'binary'
83
84 # We can't have more than one value on y_type => The set is no more needed
85 y_type = y_type.pop()
86
ValueError: Can't handle mix of multilabel-indicator and binary
Comment puis-je charger Keras/sklearn de donner en retour des prédictions dans un chaud encodage?
- Ce qui se passe lorsque vous utilisez
fy
directement, sans codant les valeurs. Il ne devrait pas être un problème dans la multiclasse. "One-hot" de l'encodage de la cible est seulement nécessaire pour les multi-étiquette problèmes à mon humble avis
Vous devez vous connecter pour publier un commentaire.
Suivantes Vivek commentaire, j'ai utilisé l'original (pas de " one-hot-codée) de matrice cible, et je l'ai configuré (dans mon Keras modèle, voir code) de la perte
sparse_categorical_crossentropy
, comme par les commentaires à cette question.loss='sparse_categorical_crossentropy';
métriques=['f1_score']`, Mon F1 score est supérieur à 1, ce qui est évidemment faux.