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

Я обучил задачу бинарной классификации (положительная и отрицательная) и имею модель .h5. И у меня есть внешние данные (которые ни разу не использовались ни в обучении, ни в валидации). Всего имеется 20 образцов, принадлежащих к обоим классам.

preds = model.predict(img)
y_classes = np.argmax(preds , axis=1)

Предполагается, что приведенный выше код вычисляет вероятность (preds) и метки классов (0 или 1), если он был обучен с softmax в качестве последнего выходного слоя. Но preds — это только одно число между [0;1], а y_classes всегда равно 0.

Чтобы вернуться немного назад, модель оценивалась по средней AUC с площадью около 0,75. Я вижу, что вероятности этих 20 образцов в основном (17) находятся в диапазоне от 0 до 0,15, остальные - 0,74, 0,51 и 0,79.

Как мне сделать из этого вывод?

EDIT: 10 из 20 образцов для тестирования модели относятся к положительному классу, остальные 10 относятся к отрицательному классу. Все 10, принадлежащие поз. класс имеют очень низкую вероятность (0 - 0,15). 7 из 10 отрицательных классов имеют такую ​​же низкую вероятность, только 3 из них (0,74, 0,51 и 0,79).

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


person bit_scientist    schedule 25.06.2020    source источник


Ответы (2)


сигмовидная функция активации используется для генерации вероятностей в задачах бинарной классификации. в этом случае модель выводит массив вероятностей с формой, равной длине предсказываемых изображений. мы можем получить прогнозируемый класс, просто проверив показатель вероятности... если он выше 0,5 (это обычная практика, но вы также можете изменить его в соответствии с вашими потребностями), изображение принадлежит к классу 1, иначе оно принадлежит к классу 0.

preds = model.predict(img) # (n_images, 1)
y_classes = ((pred > 0.5)+0).ravel() # (n_images,)

в случае сигмоида ваш последний выходной слой должен быть Dense(1, activation='sigmoid')

в случае softmax (как вы только что сделали) предсказанный класс извлекается с использованием argmax

preds = model.predict(img) # (n_images, n_class)
y_classes = np.argmax(preds , axis=1)  # (n_images,)

в случае softmax ваш последний выходной слой должен быть Dense(n_classes, activation='softmax')

ПОЧЕМУ AUC НЕ ХОРОШИЙ ПОКАЗАТЕЛЬ

Значение AUC может вводить в заблуждение и иногда заставлять нас переоценивать, а иногда и недооценивать реальную производительность модели. Поведение Average-Precision является более выразительным при получении представления о том, как работает модель, потому что оно более разумно при различении хорошей и очень хорошей модели. Более того, это напрямую связано с точностью: показатель, который понятен человеку. Вот отличный справочник по темам, который объясняет все, что вам нужно: using-the-roc-curve-a46a9adc728" rel="nofollow noreferrer">https://towardsdatascience.com/why-you-should-stop-using-the-roc-curve-a46a9adc728

person Marco Cerliani    schedule 25.06.2020
comment
Отличный конкретный ответ, но важно отметить, что выбор порога должен происходить в соответствии с целью вашей модели. Если вы фильтруете спам-сообщения, вам потребуется максимально возможная точность, поскольку вы не хотели бы пропустить важные письма из-за того, что они были классифицированы как спам. В этом случае вы выберете более высокий порог, чем 0,5, как вы упомянули. - person My Koryto; 25.06.2020
comment
пожалуйста, обратитесь к РЕДАКТИРОВАТЬ. Мой вопрос не о разнице между сигмоидом и софтмаксом. Мне нужно понять, почему модель неправильно предсказывает выборки. - person bit_scientist; 26.06.2020
comment
хорошо, извините, название немного вводит в заблуждение, как интерпретировать вероятность. Однако, если модель предсказывает неправильно, это означает, что это плохая модель или проблема слишком сложна (вы никогда не сообщаете, как вы построили модель). Я также отредактировал трюк, чтобы управлять (заменять) оценкой AUC модели. Не забудьте проголосовать и принять как ответ ;-) - person Marco Cerliani; 26.06.2020

Используя сигмовидную функцию в качестве функции активации, вы фактически сжимаете выходные данные предыдущих слоев до значение вероятности от 0 до 1.

Функция Softmax просто берет последовательность сигмовидных функций, агрегирует их и показывает соотношение между вероятностью определенного класса и всеми агрегированными вероятностями для всех классов.

Например: если я использую модель, чтобы предсказать, является ли изображение изображением банана, яблока или винограда, и моя модель распознает, что определенное изображение имеет 0,75 банана, 0,20 яблока и 0,15 винограда (каждая вероятность генерируется с сигмовидная функция), мой слой softmax сделает этот расчет:

банан: 0,75 / (0,75 + 0,20 + 0,15) = 0,6818 && яблоко: 0,20 / 1,1 = 0,1818 && виноград: 0,15 / 1,1 = 0,1364.

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

Итак, если мы, наконец, дойдем до сути, я бы сказал, что интерпретация вывода сигмовидной функции должна быть аналогична той, которую вы делаете с помощью слоя softmax, но в то время как слой softmax дает вам сравнение между одним классом и во-вторых, сигмовидная функция просто говорит вам, насколько вероятно, что эта часть информации принадлежит положительному классу.

Чтобы сделать окончательный выбор и решить, относится ли определенный элемент к положительному классу или нет, вам нужно выбрать порог (не обязательно 0,5). Выбор порога — это последний шаг интерпретации выходных данных. Если вы хотите максимизировать точность своей модели, вы выберете высокий порог, но если вы хотите максимизировать отзыв своей модели, вы определенно можете выбрать более низкий порог.

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

person My Koryto    schedule 25.06.2020
comment
Спасибо за ваш отзыв. 1. Ваше распределение вероятностей неверно. 2. Я уже знаю, что означают эти две функции. 3. 17 из 20 образцов показывают, что вероятность не достигает даже 0,2, что означает отказ. Только 3 из них превышают 0,5 (скажем, пороговое значение равно 0,5), что, скажем, соответствует 15% точности с точки зрения неопределенной точности. Как это возможно, когда среднее значение AUC составляет около 0,75? - person bit_scientist; 26.06.2020