Вопрос или проблема
После обучения моей модели 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 (если кто не знает), вы получаете следующий результат:
В другом случае, как вы видите, сумма всех событий равна 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" и "машинное обучение". Это поможет вашему содержимому быть более видимым в поисковых системах и привлечет больше посетителей, заинтересованных в углубленном изучении данной темы.