Вопрос или проблема
Имея модель классификации с несколькими классами и n признаками, как я могу измерить неопределенность модели для данной классификации?
Предположим, что для одного класса точность модели потрясающая, но для другого — нет. Я хотел бы найти метрику, которая позволила бы мне решить, стоит ли “прислушиваться” к модели для данного образца или нет.
Я думал об использовании интервалов предсказания, но не уверен, как их рассчитать.
В качестве альтернативы принятому ответу, другой способ оценить неопределенность конкретного предсказания — это комбинировать вероятности, возвращаемые моделью для каждого класса, с использованием определенной функции. Это распространенная практика в “Активном обучении”, где, имея обученную модель, вы выбираете подмножество неназванных образцов для разметки (чтобы увеличить первоначальный набор данных для обучения) на основе некоторой оценки неопределенности. Три наиболее популярных функции (в литературе называемых стратегиями выборки [1]) включают:
-
Энтропия Шеннона: просто применяете энтропию Шеннона к вероятностям, возвращаемым моделью для каждого класса. Чем выше энтропия, тем выше неопределенность.
-
Наименее уверенные: вы просто смотрите на самую высокую вероятность, возвращаемую моделью среди всех классов. Интуитивно уровень уверенности ниже для тестового образца с ‘низкой’ самой высокой вероятностью (например, [.6, .35, .05] –> .6) по сравнению с ‘высокой’ самой высокой вероятностью (например, [.9, .05, .05] –> .9).
-
Оценка маржи: вы вычитаете из самой высокой вероятности вторую по величине вероятность (например, [.6, .35, .05] –> .6-.35=.25). Это концептуально похоже на стратегию наименее уверенных, но немного более надежно, так как вы смотрите на расстояние между двумя вероятностями, а не на одно сырое значение. Также в этом случае небольшая разница означает высокий уровень неопределенности.
Другой более интересный способ оценить уровень неопределенности для тестового образца, применимый к глубоким моделям с отключенными слоями, — это глубокое активное обучение [2]. В основном, оставляя отключение активным при выполнении предсказаний, вы можете получить множество различных результатов (в терминах вероятностей для каждого класса), из которых можно оценить среднее и дисперсию. В данном случае дисперсия показывает, насколько модель не уверена в этом образце.
Тем не менее, учтите, что это всего лишь грубые приближения, использование модели, которая специально оценивает неопределенность конкретного предсказания, как предложено в принятом ответе, безусловно, лучший вариант.
Тем не менее, эти оценки могут быть полезны, потому что они потенциально применимы к любой модели, которая возвращает вероятности (и имеются также адаптации для моделей, таких как SVM).
[1] http://www.robotics.stanford.edu/~stong/papers/tong_thesis.pdf
В модели вы решаете, как лучше всего получить неопределенность. Если вы использовали Байесовскую оптимизацию (в Python есть отличный пакет для этого), например, вы получаете матрицу ковариации вместе с вашими ожидаемыми значениями, и, следовательно, получаете меру неопределенности. В этом случае вы можете делать предсказания относительно основной функции ваших данных, и (ко-)дисперсия предоставит уровни неопределенности, что показывается шириной зеленых полос вокруг линии ниже:
Таким образом, красные точки показывают, где у нас есть выборочные данные… обратите внимание, что у нас их нет, например, при X = 4
и X = -1
, поэтому у нас высокая неопределенность; 95% доверительный интервал очень велик.
Если вы используете стандартную глубокую нейронную сеть для выполнения классификации, например, нет внутренней меры неопределенности. Единственное, что у вас действительно есть, это ваша точность тестирования, чтобы вы знали, насколько хорошо модель работает на отложенных данных. Я не помню, где это объясняется, но, по моему мнению, невозможно интерпретировать значения предсказания классов с точки зрения неопределенности.
Например, если вы предсказываете кот
или собака
для изображения, и два класса получают (нормализованные) значения логитов [0.51, 0.49]
соответственно, вы не можете предположить, что это означает очень низкую уверенность.
Хотя это не совсем измеряет неопределенность для модели классификации, вы можете взглянуть на уровень доверия.
Недавняя работа (2024 г.) разработала достаточно простой метод извлечения неопределенности модели из байесовских нейронных сетей (NNs). Метод предназначен для либо Монте-Карло отключения, либо глубоких ансамблей NNs, но критическим аспектом является возможность брать выборки из апостериорного предсказательного распределения. Таким образом, если вы можете приблизительно аппроксимировать апостериорное предсказательное распределение, как описано ниже, вы можете использовать этот метод:
Извлечение неопределенности модели затем столь же просто, как вычисление энтропии над средним значением выборок (чтобы получить общую неопределенность), после чего вычитание средней энтропии для каждой выборки (неопределенность данных):
Мой ответ неверен, но я оставляю его, потому что другие люди могут совершить ту же ошибку, а комментарии ниже моего ответа ценны
Я думаю, вы ищете
model.predict_prob()
во многих моделях в Python есть эта функция. и с помощью этой функции вы можете рассчитать, насколько сильно модель уверена в своем ответе.
.
Ответ или решение
Измерение неопределенности прогнозов в моделях мультиклассовой классификации
В задаче мультиклассовой классификации часто возникает потребность в оценке уровня неопределенности модели для конкретного предсказания. Это важно, так как точность модели может варьироваться для различных классов, и иногда необходимо принять решение, следует ли "доверять" модели в каждом конкретном случае. В данной статье рассматриваются различные стратегии для измерения неопределенности предсказаний.
Стратегии измерения неопределенности
-
Шенноновская энтропия:
Использование энтропии для оценки неопределенности. Чем выше энтропия, тем выше неопределенность. Формула для вычисления энтропии выглядит следующим образом:
[
H(p) = -\sum_{i} p_i \log(p_i)
]
где (p_i) — вероятность принадлежности к классу (i). -
Стратегия наименее уверенного класса:
Рассматривается наивысшая вероятность среди всех классов. Если эта вероятность невысока (например, 0.6), модель обладает низкой уверенностью в своем выборе. Например, если распределение вероятностей выглядит как [0.6, 0.35, 0.05], модель "менее уверена", чем при распределении [0.9, 0.05, 0.05]. -
Отбор по границе вероятностей:
Вычисление разницы между высшей и второй по величине вероятностями. Маленькая разница указывает на высокую неопределенность. Формула:
[
\text{Margin} = p{\max} – p{\text{second max}}
]
Например, для распределения [0.6, 0.35, 0.05] разница составит 0.25.
Глубокое активное обучение: В глубоких моделях с использованием dropout можно применять метод "глубокого активного обучения". Оставляя активными слои dropout при прогнозировании, можно получить набор вероятностей для каждого класса и на их основе оценить среднее и дисперсию. Дисперсия будет представлять собой меру неопределенности.
Баесовские подходы и доверительные интервалы: Использование Баесовских оптимизаций позволяет получить ковариационные матрицы, которые естественным образом предоставляют оценки неопределенности при помощи доверительных интервалов.
Методы доверия: Например, "Scores доверия" могут предложить некий показатель доверия к конкретному предсказанию, анализируя векторы признаков нового образца в сравнении с обучающей выборкой.
Многие современные стратегии также включают использование ансамблей моделей и техник MC-дропаута для оценки неопределенности, расширяя акценты классических методов.
Понимание уровня неопределенности является важным аспектом для более взвешенного и уверенного принятия решений в контексте задач машинного обучения. Комплексный подход, использование описанных методов и адаптация их под конкретные задачи позволит более точно оценивать надежность и точность предсказаний моделей.