4 votes

Erreur : Les métriques de classification ne peuvent pas gérer un mélange de cibles multi-classes-multi-sorties et multi-labels-indicateurs.

Je suis novice en matière d'apprentissage automatique en général.

J'essaie de faire une classification de texte multi-label. J'ai les étiquettes originales de ces documents ainsi que le résultat de la classification (j'ai utilisé le classificateur mlknn) représenté sous la forme d'un encodage chaud (19000 documents x 200 étiquettes). J'essaie maintenant d'évaluer la classification avec f1_score micro et macro mais j'obtiens cette erreur (à la ligne 3) ValueError: Classification metrics can't handle a mix of multiclass-multioutput and multilabel-indicator targets et je ne sais pas comment je peux le résoudre. Voici mon code :

1. y_true = np.loadtxt("target_matrix.txt")
2. y_pred = np.loadtxt("classification_results.txt")

3. print (f1_score(y_true, y_pred, average='macro'))
4. print (f1_score(y_true, y_pred, average='micro'))

J'ai également essayé d'utiliser cross_val_score pour la classification afin d'obtenir l'évaluation immédiatement mais a rencontré une autre erreur (provenant de cross_val_score ligne) :

File "_csparsetools.pyx", line 20, in scipy.sparse._csparsetools.lil_get1
File "_csparsetools.pyx", line 48, in scipy.sparse._csparsetools.lil_get1
IndexError: column index (11) out of bounds

Voici mon code :

X = np.loadtxt("docvecs.txt", delimiter=",")
y = np.loadtxt("target_matrix.txt", dtype='int')

cv_scores = []
mlknn = MLkNN(k=10)  
scores = cross_val_score(mlknn, X, y, cv=5, scoring='f1_micro')
cv_scores.append(scores)

Toute aide concernant l'une ou l'autre de ces erreurs sera très appréciée, merci.

3voto

Lossan Points 123

Je créais le tableau des y manuellement et il semble que ce soit mon erreur. J'ai utilisé maintenant MultiLabelBinarizer pour le créer, comme l'exemple suivant et maintenant cela fonctionne :

train_foo = [['sci-fi', 'thriller'],['comedy'],['sci-fi', 'thriller'],['comedy']]
mlb = MultiLabelBinarizer()
mlb_label_train = mlb.fit_transform(train_foo)

X = np.loadtxt("docvecs.txt", delimiter=",")
cv_scores = []
mlknn = MLkNN(k=3) 
scores = cross_val_score(mlknn, X, mlb_label_train, cv=5, scoring='f1_macro')
cv_scores.append(scores)

vous pouvez trouver la documentation pour MultiLabelBinarizer aquí .

2voto

niedakh Points 28

Pouvez-vous montrer les deux premiers éléments de y ? Utilisez-vous scikit-multilearn ? De plus, si vous le pouvez, utilisez la version 0.1.0 de scikit-multilearn, la deuxième erreur est très probablement un bogue qui a été corrigé dans la version master, et une nouvelle version est prévue dans quelques jours.

Vous pouvez obtenir le maître via pip : pip uninstall -y scikit-multilearn pip install https://github.com/scikit-multilearn/scikit-multilearn/archive/master.zip

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X