Как обработать результаты прогнозирования двоичного классификатора для ROC, AUC и матрицы путаницы с данными, сгенерированными с помощью image_dataset_from_directory?

#python #tensorflow #machine-learning #keras #conv-neural-network

Вопрос:

Я построил двоичный классификатор CNN, чтобы различать пациентов с респираторными заболеваниями по спектрограммам звука их кашля. Модель работала довольно хорошо во всем, с высокой точностью и точностью проверки. Однако, когда я обработал результаты model.predict(val_set), результаты кажутся совершенно случайными. Я подозреваю, что допустил некоторую ошибку в изменении выходных данных.

Сначала я сгенерировал набор проверки следующим образом

 val_set = tf.keras.preprocessing.image_dataset_from_directory(
  data_dir,
  validation_split=0.1,
  subset="validation",
  seed=123,
  image_size = (image_height, image_width),
  batch_size = batch_size)
 

Затем я разделил набор данных на test_images и test_labesl следующим образом

 test_labels = np.concatenate([y for x, y in val_set], axis=0)
test_images = np.concatenate([x for x, y in val_set], axis=0)
 

Затем я подключил test_images к модели, и она выдала следующее, какова вероятность того, что вы заболеете или нет

 [[0.000000e 00 1.000000e 00]
 [1.000000e 00 0.000000e 00]
 [2.143078e-19 1.000000e 00]
 ...
 [0.000000e 00 1.000000e 00]
 [0.000000e 00 1.000000e 00]
 [0.000000e 00 1.000000e 00]]
 

После этого я обработал этот массив, взяв ng.argmax. 728-это общее количество элементов в наборе проверки

 predict = []
label = []
for i in range(0,728):
  predict.append(np.argmax(test_predict[i]))

for i in range (0,728):
  if test_label[i] == 2:
    label.append(1)
  else:
    label.append(0)

test_predict = predict
test_predict = np.array(predict)
test_label = np.array(label)
test_label = test_label.astype('float64')
 

Наконец, подключив метку и прогноз к матрице путаницы и ROC, AUC, я получаю следующие результаты, но модель. оценка(val_set) дает совершенно другой результат. Я неправильно обработал информацию или моя модель просто плохая?

Матрица путаницы:

 tf.Tensor(
[[101 163]
 [197 267]], shape=(2, 2), dtype=int32)
 

модель.оценка(val_set)

 23/23 [==============================] - 561s 24s/step - loss: 16.6204 - accuracy: 0.8407
[16.620380401611328, 0.8406593203544617]
 

Really bad ROC and AUC

ROC AUC