Ошибка: метрики классификации не могут обрабатывать сочетание целей с несколькими классами-выходами и индикаторами с несколькими метками

Я новичок в машинном обучении в целом.

Я пытаюсь сделать многослойную классификацию текста. У меня есть оригинальные ярлыки для этих документов, а также результат классификации (используется классификатор mlknn), представленный в виде одного горячего кодирования (19000 документов x 200 ярлыков). Сейчас я пытаюсь оценить классификацию с помощью микро- и макроэлементов f1_score, но получаю эту ошибку (в строке 3) ValueError: Classification metrics can't handle a mix of multiclass-multioutput and multilabel-indicator targets и я не знаю, как я могу решить это. Это мой код:

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'))

Я также пытался использовать cross_val_score для классификации, чтобы получить оценку сразу, но столкнулся с другой ошибкой (из cross_val_score линия):

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

это мой код:

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)

любая помощь с любой из ошибок очень ценится, спасибо.

2 ответа

Решение

Я создавал массив y вручную, и, похоже, это была моя ошибка. Я использовал сейчас MultiLabelBinarizer создать его, как в следующем примере, и теперь он работает:

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)

вы можете найти документацию для MultiLabelBinarizer здесь

Можете ли вы показать первые пару элементов у? Вы используете scikit-multilearn? Кроме того, если вы можете использовать кандидатуру выпуска scikit-multilearn версии 0.1.0, скорее всего, вторая ошибка - это ошибка, исправленная в master, и новая версия планируется выпустить через пару дней.

Вы можете получить мастер через пункт: pip uninstall -y scikit-multilearn pip install https://github.com/scikit-multilearn/scikit-multilearn/archive/master.zip

Другие вопросы по тегам