Мені цікаво, як обчислити точність і відкликати заходи для багаторівневої класифікації багаторівневих, тобто класифікації, де існує більше двох міток і де кожен екземпляр може мати кілька міток?
Мені цікаво, як обчислити точність і відкликати заходи для багаторівневої класифікації багаторівневих, тобто класифікації, де існує більше двох міток і де кожен екземпляр може мати кілька міток?
Відповіді:
Іншим популярним інструментом для вимірювання продуктивності класифікатора є ROC / AUC ; цей теж має розширення для багатьох класів / мульти-етикетки: див. [Hand 2001]
[Hand 2001]: просте узагальнення площі під кривою ROC до задач класифікації декількох класів
Ось декілька обговорень теми форуму курсу про матрицю плутанини та вимірювання точності / відкликання в багатьох класах.
Основна ідея полягає в тому, щоб обчислити всю точність і згадати всі класи, а потім оцінити їх середнє для отримання єдиного реального вимірювання числа.
Матриця плутанини полегшує обчислення точності та відкликання класу.
Нижче наведено декілька основних пояснень щодо матриці плутанини, скопійованої з цього потоку:
Матриця плутанини - це спосіб класифікації справжніх позитивних, істинних негативів, помилкових позитивних та помилкових негативів, коли існує більше 2 класів. Він використовується для обчислення точності та відкликання, а отже, f1-балів для задач, що займаються різними класами.
Фактичні значення представлені стовпцями. Прогнозовані значення представлені рядками.
Приклади:
10 прикладів навчання, яких насправді 8, класифікуються (прогнозуються) неправильно, як 5
13 прикладів навчання, які насправді 4, класифікуються неправильно як 9
Матриця плутанини
см = 0 1 2 3 4 5 6 7 8 9 10 1 298 2 1 0 1 1 3 1 1 0 2 0 293 7 4 1 0 5 2 0 0 3 1 3 263 0 8 0 0 3 0 2 4 1 5 0 261 4 0 3 2 0 1 5 0 0 10 0 254 3 0 10 2 1 6 0 4 1 1 4 300 0 1 0 0 7 1 3 2 0 0 0 264 0 7 1 8 3 5 3 1 7 1 0 289 1 0 9 0 1 3 13 1 0 11 1 289 0 10 0 6 0 1 6 1 2 1 4 304
Для класу x:
Справжнє позитивне: діагональне положення, см (х, х).
Хибне додатне: сума стовпця х (без основної діагоналі), сума (см (:, х)) - см (х, х).
Помилковий мінус: сума рядка x (без основної діагоналі), сума (cm (x, :), 2) -cm (x, x).
Ви можете обчислити точність, відкликання та оцінку F1 за формулою курсу.
Усереднення по всіх класах (з або без зважування) дає значення для всієї моделі.
Для класифікації на декількох марках у вас є два шляхи. Спочатку розглянемо наступне.
Показники обчислюються у розрахунку на кожну точку даних. Для кожної передбачуваної мітки обчислюється лише її оцінка, а потім ці показники агрегуються за всіма точками даних.
Є й інші показники.
Тут все робиться на етикетках. Для кожної мітки обчислюються метрики (наприклад, точність, відкликання), а потім ці метричні показники агрегуються. Отже, у цьому випадку ви закінчуєте обчислення точності / виклику для кожної мітки протягом усього набору даних, як і для двійкової класифікації (оскільки кожна мітка має двійкове призначення), а потім агрегуєте її.
Найпростіший спосіб - представити загальну форму.
Це лише розширення стандартного еквівалента в багатьох класах.
Усереднене макро
Мікро середнє значення
Тут - справжні позитивні, помилкові позитивні, справжні негативні та хибні негативні підрахунки відповідно лише для мітки . j t h
Тут означає будь-яку метрику на основі матриці плутанини. У вашому випадку ви підключите стандартні формули точності та нагадування. Для макро середнього значення ви передаєте підрахунок на одну мітку, а потім підсумовуєте, для мікро середнього значення ви спочатку оцінюєте підрахунки, а потім застосовуєте свою метричну функцію.
Ви можете бути зацікавлені , щоб подивитися в код для метрики мульт-мітки тут , яка входить до складу пакету млдр в R . Також вам може бути цікаво заглянути в бібліотеку мультиварок Java MULAN .
Це приємний документ для ознайомлення з різними показниками: Огляд алгоритмів навчання з мітками
Я не знаю про мульти-етикетку, але для класифікації mutli-клас ці посилання вам допоможуть
Це посилання пояснює, як побудувати матрицю плутанини, яку можна використовувати для обчислення точності та виклику для кожної категорії
І це посилання пояснює, як обчислити заходи micro-f1 та macro-f1 для оцінки класифікатора в цілому.
сподіваюся, що ви знайшли це корисним.
це посилання допомогло мені .. https://www.youtube.com/watch?v=HBi-P5j0Kec Я сподіваюся, що це допоможе і вам
скажіть розподіл, як показано нижче
A B C D
A 100 80 10 10
B 0 9 0 1
C 0 1 8 1
D 0 1 0 9
точність для A була б
P (A) = 100/100 + 0 + 0 +0 = 100
P (B) = 9/9 + 80 + 1 + 1 = 9/91 psst ... по суті прийняти справжній позитив класу і розділити на дані стовпців на рядки
згадати для себе було б
R (A) = 100 / 100+ 80 + 10 + 10 = 0,5
R (B) = 9 / 9+ 0 + 0 + 1 = 0,9
psst ... по суті прийняти справжній позитив класу і розділити на дані рядків на стовпці
як тільки ви отримаєте всі значення, візьміть середню макрокоманду
avg (P) = P (A) + P (B) + P (C) + P (D) / 4
avg (R) = R (A) + R (B) + R (C) + R (D) / 4
F1 = 2 * avg (P) * avg (R) / avg (P) + avg (R)
Ознайомтеся з цими слайдами з сайту cs205.org у Гарварді . Як тільки ви потрапите в розділ "Заходи помилок", відбувається обговорення точності та відкликання в налаштуваннях багатьох класів (наприклад, одна проти всіх або один проти одного) та матриці плутанини. Матриці плутанини - це те, що вам тут справді хочеться
FYI, в пакеті програмного забезпечення Python scikits.learn є вбудовані методи автоматичного обчислення таких речей, як матриця плутанини з класифікаторів, підготовлених за даними багатокласових даних. Можливо, він може безпосередньо обчислити графіки точності нагадування і для вас. Варто подивитися.
З Ozgur et al (2005) можна побачити, що слід обчислити точність та відкликання, дотримуючись звичайних виразів, але замість усереднення по загальній кількості N екземплярів у вашому наборі даних слід використовувати N = [екземпляри принаймні однієї мітки з клас, про який йдеться].
тут згадується посилання: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.104.8244&rep=rep1&type=pdf
Точно так само, як і в загальному випадку, з наборами:
http://en.wikipedia.org/wiki/F1_score
http://en.wikipedia.org/wiki/Precision_and_recall
Ось прості функції Python, які роблять саме так:
def precision(y_true, y_pred):
i = set(y_true).intersection(y_pred)
len1 = len(y_pred)
if len1 == 0:
return 0
else:
return len(i) / len1
def recall(y_true, y_pred):
i = set(y_true).intersection(y_pred)
return len(i) / len(y_true)
def f1(y_true, y_pred):
p = precision(y_true, y_pred)
r = recall(y_true, y_pred)
if p + r == 0:
return 0
else:
return 2 * (p * r) / (p + r)
if __name__ == '__main__':
print(f1(['A', 'B', 'C'], ['A', 'B']))