f-score: ValueError: Классификационные метрики не могут обрабатывать сочетание целых индикаторов с несколькими метками и непрерывных выходов - PullRequest
2 голосов
/ 07 июня 2019

Я пытаюсь вычислить показатель микро F для прогноза, который сделала моя модель.Я обучил модель, используя word2vec Векторы с Keras и Tensorflow.Я использую библиотеку scikit для вычисления меры mirco F.

Но функция выдает это сообщение: ValueError: Классификационные метрики не могут обрабатывать сочетание целых индикаторов с несколькими метками и целей с непрерывным и множественным выходом

Кроме того, я делаю прогноз правильно?Я обучил модель на x_train (wordVectors) и y_train (resultVectors) и проверил с помощью x_test и y_test.

Теперь я сделал прогноз x_test и хочу оценить прогноз, используя y_test.До сих пор я делаю это правильно?

Массив прогнозирования выглядит следующим образом:

[[ 1.7533608e-02  5.8055294e+01  2.2185498e-03 ... -1.2394511e-03
   1.0454212e+00 -1.6698670e-03]
 [ 1.7539740e-02  5.8173992e+01  2.1747553e-03 ... -1.2764656e-03
   1.0475068e+00 -1.6941782e-03]
 [ 1.7591618e-02  5.8222389e+01  2.2053251e-03 ... -1.2856000e-03
   1.0484750e+00 -1.6668942e-03] ...

, а истинные значения выглядят так:

[[0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]...

Я уже пробовалпреобразовать оба массива в двоичные значения (с помощью np.argmax (..., axis = 1)).Тогда нет ошибки, и я получаю микро F меру, которая составляет около 0,59 ... что очень много, и поэтому я думаю, что я сделал ошибку.У меня вопрос, есть ли другой способ преобразования данных?Могу ли я преобразовать прогноз в значения с несколькими метками?

model = load_model('model.h5')
prediction = model.predict(x_test)

prediction_binary = np.argmax(prediction, axis=1)
y_test_binary = np.argmax(y_test, axis=1)

print(f1_score(y_test_binary, prediction_binary, average='micro'))

Я ожидаю, что результат <0,20, но вместо этого я получаю 0,59, что является очень хорошим значением. </p>

Любые предложения значительнооценили!

1 Ответ

0 голосов
/ 07 июня 2019

Проблема в том, что вы вычисляете свою метрику только по метке, рассчитанной по наибольшему значению выходного вектора, с одним значением тестового вектора.

Действительно, np.argmax возвращает только одно значение, дажеесли вектор имеет несколько минимальных значений.например, np.argmax([0,0,1,0,1,1]) вернет только 2.

Поскольку ваша проблема состоит из задачи классификации с несколькими метками , вы хотите, чтобы ваш вклад был, возможно, классифицирован по нескольким категориям.Для этого вам необходимо преобразовать выходные векторы вашего классификатора в ту же форму, что и ваши тестовые векторы.

Вы можете сделать это следующим образом:

prediction_int = np.zeroes_like(prediction)
prediction_int[prediction > 0.5] = 1
...