Матрица неточностей, учитывающая только прогнозы> порогового значения - PullRequest
0 голосов
/ 30 мая 2020

Уровень вывода моей сети:

model.add(Dense(2, activation=activations.softmax))

, на выходе получается одно предсказание категории с горячим кодированием.

model.predict, следовательно, возвращает n прогнозов, например

[9.9584144e-01, 4.1585001e-03],
[7.5779420e-01, 2.4220583e-01],
...

Теперь мне нужна не только полная матрица путаницы, предоставляемая sklearn через

metrics.confusion_matrix(y_TEST.argmax(axis=1), y_pred.argmax(axis=1), normalize='pred')

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

Что-то вроде

metrics.confusion_matrix(y_TEST.argmax(axis=1), y_pred.argmax(axis=1), normalize='pred', 
                         min_confidence_threshold='0.9')

Предоставляет ли sklearn или какой-либо из стандартных инструментов такую ​​функциональность?

Если нет, как мне отфильтровать два массива (y_TEST, y_pred) на основе состояния одного из массивов?

1 Ответ

0 голосов
/ 30 мая 2020

Вот функция, которая может это сделать:

def threshold_matrix(labels,probs,threshold=0):
    assert 0 <= threshold <= 1
    t_map = lambda x : 1 if tf.math.reduce_max(x) > threshold else 0
    thres = tf.map_fn(t_map, probs)

    pred  = tf.boolean_mask(tf.argmax(probs,1),thres)
    labs  = tf.boolean_mask(tf.cast(labels, tf.int64),thres)

    return tf.math.confusion_matrix(labs,pred)
...