Получить зависимые вероятности в многоклассовой классификации

Вопрос или проблема

После обучения моей модели CatBoostClassifier я вызываю функцию get_proba, которая возвращает мне список вероятностей. Проблема начинается с другой стороны… Я переношу эти данные в датафрейм, затем в Excel, после чего суммирую все числа с плавающей запятой в моем списке и получаю числа, приблизительно равные 2.

(Пример: 0,980831511 0,99695788 2,99173E-13 1,63919E-15 7,35072E-14 4,82846E-16. Их сумма равна 1,977789391)

Используемые параметры:

'loss_function': 'MultiClassOneVsAll', 
 'eval_metric': 'ZeroOneLoss',

Проблема в том, что мне нужно получить зависимый тип вероятностей, чтобы получить что-то вроде: 0.2 0.5 0.1 0.2, где их сумма будет равна 1, а самая высокая вероятность (что может быть очевидно) будет во второй категории (которая равна 0.5)

Итак, я провел несколько тестов, и вот что я получил…
Во-первых, я использовал различные цели, то есть функции потерь и метрики, так что если вам нужно получить “зависимую” вероятность, вы можете использовать все что угодно (если я не прав, исправьте меня в комментариях или где-нибудь еще 🙂 ), кроме loss_function multiclassova (другими словами OneVsAll). В любом случае, я использовал multiclassova как метрику оценки, и все казалось правильным… (В случае если что-то пойдет не так, я отредактирую или добавлю комментарий к этому ответу)
Если вы используете OneVsAll (если кто не знает), вы получаете следующий результат:
Использование multiclassova

В другом случае, как вы видите, сумма всех событий равна 1, тогда как в последнем случае она может варьироваться от 0.5 до 2.0
Использование другой функции потерь

Еще раз спасибо за разъяснения @Erwan, потому что я не заметил такую глупую ошибку 🙂

Ответ или решение

Когда вы работаете с многоклассовой классификацией и используете алгоритм CatBoostClassifier, важно учесть специфичность настройки, чтобы получить корректные вероятности классов. Ваша текущая проблема связана с выбором функции потерь MultiClassOneVsAll, которая порождает независимые вероятности для каждого класса. Это метод, при котором каждый класс рассматривается отдельно, и модель обучается предсказывать вероятность принадлежности к каждому классу независимо от остальных. Это часто приводит к тому, что суммы вероятностей по всем классам могут превышать единицу, например, 1.977789391, как вы отметили.

Чтобы корректно интерпретировать вероятности и получить зависимый тип, где сумма вероятностей по всем классам равна единице, рекомендуется использовать другой тип функции потерь — MultiClass. В этом случае модель будет возвращать нормализованные вероятности, отражающие относительное распределение вероятностей между классами.

Когда вы переключаетесь на MultiClass, модель обучается интерпретировать выходные данные как софтмакс преобразование набора логитов для каждого класса, что гарантирует, что сумма вероятностей равняется единице. Это будет отражаться в результатах get_proba, как, например, [0.2, 0.5, 0.1, 0.2], где 0.5 является наибольшей вероятностью, указывающей на наиболее вероятный класс.

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

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

Для оптимизации ваших усилий в SEO, убедитесь, что вы используете релевантные ключевые слова, такие как "многоклассовая классификация", "вероятности классов", "CatBoost", "MultiClass" и "машинное обучение". Это поможет вашему содержимому быть более видимым в поисковых системах и привлечет больше посетителей, заинтересованных в углубленном изучении данной темы.

Оцените материал
Добавить комментарий

Капча загружается...