Какой метод следует рассматривать, чтобы оценить несбалансированность классификации мульти-класса?

голоса
0

Я работаю на MultiClass-несбалансированных данных. Моя зависимая переменная сильно искажены.

          Injury

       2(No Injury)              208753
       1(Medium Injury)       22318
       0(severe Injury)            3394

Я использовал алгоритм случайного леса с параметром «class_weight = сбалансированным»для управления несбалансированностью класса 2.

Я получаю следующие результаты, когда я использую «микро» средний =.

       [[   34   107   688]
        [  148   778  4592]
        [  905  4635 46730]]
        Accuracy Score: 0.8110616374089428
        precision score: 0.8110616374089428
        Recall score: 0.8110616374089428
        AUC Score: 0.8582962280567071
        F1 score: 0.8110616374089428
        Kappa Score: 0.05522284663052324 

Для среднего = «макро», результаты ниже.

        [[   31   125   684]
         [  157   838  4559]
         [  890  4694 46639]]
         Accuracy Score: 0.8104816009007626
          precision score: 0.3586119227436326
          Recall score: 0.3602869806251181
         AUC Score: 0.5253225798824679
         F1 score: 0.3592735337079687
         Kappa Score: 0.06376296115668922

Таким образом, результаты которого следует рассмотреть, чтобы оценить модель? Если я должен рассмотреть макрос, то мое выступление модели действительно плохо. Просьба предложить, если есть какие-либо методы для повышения точности, вспомнить и АУК счета?

Если я считаю микро результатов, мою точность, напомнит, f1 счета таких же. Как я могу обосновать это в проекте?

Любая помощь будет оценена.

Спасибо.

Задан 07/11/2018 в 19:59
источник пользователем
На других языках...                            


1 ответов

голоса
0

Как и большинство научных данных, касающихся вопросов, ответ на вопрос «какой из них лучше» сводится к тому, «это зависит». Это важно иметь хорошие показатели для каждого класса в отдельности? Или вы больше озабочены получить хорошую общую производительность?

При установке average='micro'вы измеряете эффективность работы алгоритма через классы. Например, чтобы вычислить точность вы бы добавить все ваши истинные позитивные прогнозы и разделить на всех истинных позитивов и всех ложных срабатываний, которые , используя ваши данные будут:

(34 + 778 + 46730) / ((34 + 778 + 46730) + (157 + 890 + 125 + 4694 + 688 + 4592))

В результате 0,81106. Когда вы смотрите на детали, однако, заметить , что для каждого из классов есть широкий разброс в точности вычислений в пределах каждого класса , и что точность вычислений в основном гонят в No Injuryклассе:

Severe Injury = 0.0312
Medium Injury = 0.1409
No Injury     = 0.8985

При установке average='macro'вы усреднение точности вычисления каждого класса вместе и устранении влияния несбалансированных классов. Используя расчетное Precisions класса выше вашей общей точности , когда average='macro'будешь:

(0.0312 + 0.1409 + 0.8985) / 3 = 0.356

Обратите внимание , здесь , что входы являются точными расчетами для каждого отдельного класса , и каждый из них взвешивается одинаково. Поскольку No Injuryи Medium Injuryклассы имеют гораздо более низкую точность оценки и так как вы удаляете влияние несбалансированных классов этой macroточность будет ниже.

Итак, что один лучше , зависит от того, что важно для вас и вашего использования. Если вы обеспокоены убедившись , что большинство случаев, независимо от класса, присваивается соответствующий класс , то average='micro'есть метрический использовать, но обратите внимание , что при этом этот результат будет перегружен одного класса в вашем примере. Если какая- либо «Тяжелые» или категории «средний» имеют наибольшее значение , то вы , вероятно , не хотели бы, чтобы оценить вашу модель с использованием , average='micro'так как высокий уровень производительности будет показан в целом даже с плохими результатами для этих классов сами по себе.

Ответил 07/11/2018 в 20:41
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more