Какой метод следует рассмотреть, чтобы оценить несбалансированную мультиклассовую классификацию? - PullRequest
0 голосов
/ 07 ноября 2018

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

          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

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

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

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

Спасибо.

1 Ответ

0 голосов
/ 07 ноября 2018

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

Когда вы устанавливаете 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', вы усредняете вычисления точности каждого класса вместе и устраняете влияние несбалансированных классов. Используя вычисленную точность класса выше вашей общей точности, когда average='macro' будет:

(0.0312 + 0.1409 + 0.8985) / 3 = 0.356

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

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

...