Вопрос или проблема
Я обучил обычную свёрточную нейронную сеть для распознавания, есть ли у пациентов заболевание или нет.
Я вывожу предсказанные значения для тестового набора и получаю вероятность того, что различные изображения принадлежат одному классу, а не другому… Но есть две основные проблемы.
Как я могу узнать, какой класс ‘0’, а какой ‘1’? И есть ли функция, которая быстро показывает, правильны или ошибочны результаты, предсказанные с определённой вероятностью? Например, массив с 1, если предсказание для изображения верное, и 0, если нет.
Код такой:
pred = model.predict(test, steps=len(test))
predSeq = [] # если вероятность выше 0.5, назначаем 1, иначе 0
for i in range(0,624):
if pred[i] >= 0.5:
predSeq.append(1)
else:
predSeq.append(0)
print(predSeq)
Чтобы ответить на ваш первый вопрос, вы должны быть в состоянии определить, какой класс является ‘0’, а какой ‘1’ на основе того, как вы настроили данные обучающих меток. Если вы все еще не уверены, используйте вашу модель для предсказания обучающих меток из обучающих данных и посмотрите, какое назначение классов дает наилучшие результаты.
Чтобы ответить на ваш второй вопрос, sklearn.metrics
предоставляет множество функций для вычисления метрик классификации. Но если вы хотите увидеть, какие предсказания верны, преобразуйте списки меток и предсказаний в массивы numpy и сравните их, как в этом примере:
import numpy as np
# Настройка тестовых меток
y_test = ['a', 'a', 'b', 'b', 'a', 'b'] # Классы 'a' и 'b'
y_test = (np.array(y_test) == 'b').astype(int) # Преобразование в массив numpy; класс 'b' - это 1
print(f'Transformed labels: {y_test}')
# Настройка предсказаний
y_preds = [0, 1, 1, 0, 0, 1] # предсказанные метки
y_preds = np.array(y_preds) # Преобразование в массив numpy
# Сравнение меток и предсказаний
correct = y_preds == y_test
print(f'Correct prediction: {correct}')
выход:
Transformed labels: [0 0 1 1 0 1]
Correct prediction: [ True False True False True True]
Ответ или решение
Вопрос о проверке правильности предсказанных значений в модели сверточной нейронной сети (CNN) включает несколько ключевых аспектов, связанных как с технической реализацией, так и с интерпретацией результатов. Давайте разберем их подробнее с акцентом на предложения по улучшению.
Определение классов ‘0’ и ‘1’
Первый шаг — выяснить, какой из классов соответствует ‘0’, а какой ‘1’. Обычно это определяется тем, как вы изначально разметили данные для обучения. Вот несколько способов прояснить ситуацию:
-
Проверка обучающего набора данных: Посмотрите на ваши обучающие метки и проверьте, каким классам они соответствуют. Обычно ‘0’ и ‘1’ соответствуют отсутствию или наличию определенного состояния, заболевания и т.п., в зависимости от вашей задачи.
-
Тестирование на тренинговом наборе: Прогоните ваш обучающий набор через модель и посмотрите, как она предсказывает классы. Это даст представление о том, как ваша модель их интерпретирует.
-
Анализ документации: В зависимости от фреймворка, который вы используете (например, TensorFlow или Keras), в документации может быть указано, как интерпретируются вероятности предсказанных классов.
Проверка правильности предсказаний
Для проверки корректности предсказаний вам потребуется сравнить предсказанные значения с истинными метками. Это можно сделать с помощью библиотек Python, таких как NumPy и Scikit-learn. Вот несколько шагов:
-
Импортировать библиотеки:
import numpy as np from sklearn.metrics import accuracy_score
-
Сравнение предсказаний и истинных меток:
Переведите ваши истинные метки и предсказания в форматы NumPy и сравните, как показано ниже:
y_true = np.array([...]) # ваши истинные метки y_pred = np.array(predSeq) # ваши предсказанные метки # Определение правильных предсказаний correct_predictions = (y_true == y_pred) # Вывод результатов print(f'Правильные предсказания: {correct_predictions}') print(f'Точность модели: {accuracy_score(y_true, y_pred) * 100:.2f}%')
Показ правильности на массиве
Чтобы получить массив с единицами (1), если предсказание верное, и нулями (0) в противном случае, используйте такой подход:
result_array = correct_predictions.astype(int)
print(f'Результат: {result_array}')
Заключение
Для успешной интерпретации и проверки предсказаний CNN важно понимать ваши классы и научиться использовать инструменты Python для анализа данных. Это сократит время на анализ и повысит надежность результатов. Если модель нацелена на медицинские цели, настоятельно рекомендуется подтвердить все этапы получения данных из надежных источников, чтобы избежать ошибок с реальными пациентами.