Подмножество матриц путаницы не работает должным образом - PullRequest
3 голосов
/ 15 июня 2019

enter image description hereenter image description here Я искал ответ на этот вопрос в Интернете, включая предложение при написании названия, но все еще безрезультатно, так что, надеюсь, кто-то может помочь!

Я пытаюсь построить путаницу с помощью sci-kit learn. Это происходит после модели керас.

Это странно, потому что у меня возникла следующая проблема: Для обучающего и тестового набора исходных данных ... Я могу построить матрицу путаницы следующим образом (обратите внимание, что это проблема с несколькими метками, поэтому данные должны быть подмножеством для разных меток.

Отлично работает следующее:

cm = confusion_matrix(y_train[:,0:6].argmax(axis=1), trainpred[:,0:6].argmax(axis=1))

и 6:18 и т. Д. ... пока все классы не будут подмножеством. Матрица путаницы, которая образуется в результате, отражает истинный результат модели керас ..

Проблема возникает при развертывании модели на совершенно невидимых данных.

Я развернул модель, позвонив по номеру model.predict(), и получил результаты, как указано выше. Тем не менее, теперь я не могу подставить матрицы путаницы таким же образом.

Код cm = confusion_matrix и т. Д. Приводит к тому, что выходные данные CM будут неправильными размерами, даже при указании 0: 6 и т. Д.

Поэтому я использовал приведенный выше код, но с модификацией аргумента метки:

age[0,1,2,3,4]
organ[5,6,7,8]

cm = confusion_matrix(y_train[:,0:6].argmax(axis=1), trainpred[:,0:6].argmax(axis=1), labels=age)

Метка FIRST (1: 5) работает отлично ... Однако следующие метки - нет! Я не получаю правильные значения в матрицах путаницы, и сопоставление также неверно для тех, которые там.

Для сравнения: в невидимых тестовых данных содержится более 400 образцов.

model.predict показывает очень высокую классификацию и правильные оценки для большинства этикеток.

вызов CM = ytest [:, 4: 8] и т. Д. Действительно производит матрицу 4x4, однако там есть как 5 значений, а не 400, и те значения, которые там находятся, не соответствуют должным образом.

Кроме того ... с возрастом меток 012345, подстановка ytest в 0: 6 приводит к формированию правильной матрицы путаницы (я не уверен, почему эти 6 должны быть включены в подмножество ... тем не менее, я пытался различные комбинации с одной и той же проблемой!

Я искал высоко и низко этот ответ, поэтому был бы очень признателен за некоторую помощь, поскольку он невероятно расстраивает. любой другой код / ​​информацию, которую я могу предоставить, я буду рад !!

Большое спасибо!

1 Ответ

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

Это происходит из-за того, что вы пытаетесь создать подмножество сгенерированной матрицы путаницы, но на самом деле вам необходимо сгенерировать новую матрицу путаницы вручную с указанными метками классов.Если вы занимаетесь A, B, C, вы получите матрицу 3X3.Если вы хотите создать матрицу, фокусирующуюся только на классе A, другие классы станут классом false, но false positive и false negative изменится, и, следовательно, вы не сможете просто взять исходную матрицу.

Вот как вы показываете это на самом деле

import matplotlib.pytplot as plt
import seaborn as sns

def generate_matrix(y_true, predict, class_name):
    TP, FP, FN, TN = 0, 0, 0, 0
    for i in range(len(y_true)):
        if y_true[i] == class_name:
            if y_true[i] == predict[i]:
                TP += 1
            else:
                FN += 1
        else:
            if y_true[i] == predict[i]:
                TN += 1
            else:
                FP += 1
    return np.array([[TP, FP],
                     [FN, TN]])

# Plot new matrix
matrix = generate_matrix(actual_labels, 
                         predicted_labels, 
                         class_name = 'A')

Это создаст путаницу для class A.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...