Zastanawiam się, jak obliczyć dokładność i przywołać miary dla wieloklasowej klasyfikacji wielopłaszczyznowej, tj. Klasyfikacji, w której występują więcej niż dwie etykiety i gdzie każde wystąpienie może mieć wiele etykiet?
72
Zastanawiam się, jak obliczyć dokładność i przywołać miary dla wieloklasowej klasyfikacji wielopłaszczyznowej, tj. Klasyfikacji, w której występują więcej niż dwie etykiety i gdzie każde wystąpienie może mieć wiele etykiet?
Odpowiedzi:
Innym popularnym narzędziem do pomiaru wydajności klasyfikatora jest ROC / AUC ; ten również ma rozszerzenie dla wielu klas / wielu etykiet: patrz [Hand 2001]
[Hand 2001]: Proste uogólnienie obszaru pod krzywą ROC do problemów klasyfikacji wielu klas
źródło
Oto kilka dyskusji na temat wątku forum Oczywiście na temat macierzy pomyłek i wieloklasowego pomiaru precyzji / wycofania.
Podstawową ideą jest obliczenie całej precyzji i przywołanie wszystkich klas, a następnie uśrednienie ich w celu uzyskania pojedynczego pomiaru liczby rzeczywistej.
Macierz nieporozumień ułatwia obliczenie precyzji i przywołanie klasy.
Poniżej znajduje się podstawowe wyjaśnienie dotyczące macierzy pomyłek, skopiowane z tego wątku:
Macierz dezorientacji jest sposobem klasyfikowania prawdziwych pozytywów, prawdziwych negatywów, fałszywych alarmów i fałszywych negatywów, gdy istnieją więcej niż 2 klasy. Służy do obliczania precyzji i przywoływania, a tym samym f1-score dla problemów wielu klas.
Rzeczywiste wartości są reprezentowane przez kolumny. Przewidywane wartości są reprezentowane przez rzędy.
Przykłady:
10 przykładów szkolenia, które w rzeczywistości są 8, są niepoprawnie sklasyfikowane (przewidywane) jako 5
13 przykładów szkolenia, które są właściwie 4, są niepoprawnie sklasyfikowane jako 9
Macierz pomieszania
Dla klasy x:
Prawdziwie dodatni: pozycja ukośna, cm (x, x).
Fałszywie dodatni: suma kolumny x (bez głównej przekątnej), suma (cm (:, x)) - cm (x, x).
Fałszywy ujemny: suma rzędu x (bez głównej przekątnej), suma (cm (x, :), 2) -cm (x, x).
Możesz obliczyć precyzję, wycofanie i wynik F1 według formuły kursu.
Uśrednianie dla wszystkich klas (z wagą lub bez) daje wartości dla całego modelu.
źródło
W przypadku klasyfikacji obejmującej wiele marek masz dwie możliwości. Najpierw rozważ poniższe.
Na podstawie przykładu
Metryki obliczane są w sposób dla poszczególnych punktów danych. Dla każdej przewidywanej etykiety obliczany jest tylko jej wynik, a następnie wyniki te są agregowane we wszystkich punktach danych.
Istnieją również inne wskaźniki.
Na podstawie etykiet
Tutaj rzeczy są zrobione pod względem etykiet. Dla każdej etykiety obliczane są dane (np. Precyzja, przywołanie), a następnie te agregowane w oparciu o etykiety. Dlatego w tym przypadku obliczasz dokładność / przywołanie dla każdej etykiety w całym zestawie danych, podobnie jak w przypadku klasyfikacji binarnej (ponieważ każda etykieta ma przypisanie binarne), a następnie agregujesz ją.
Najprostszym sposobem jest przedstawienie ogólnej formy.
To tylko rozszerzenie standardowego ekwiwalentu wielu klas.
Możesz być zainteresowany, aby zajrzeć do kodu dla metryk mult-label tutaj , który jest częścią pakietu mldr w R . Być może zainteresuje Cię także biblioteka wielu etykiet Java MULAN .
Jest to fajny artykuł na temat różnych wskaźników: Przegląd algorytmów uczenia się wielu marek
źródło
Nie wiem o części z wieloma etykietami, ale w klasyfikacji mutli-class te linki pomogą ci
Ten link wyjaśnia, jak zbudować macierz nieporozumień, której można użyć do obliczenia dokładności i przywołania dla każdej kategorii
Link ten wyjaśnia, jak obliczyć miary mikro-f1 i makro-f1 w celu oceny klasyfikatora jako całości.
mam nadzieję, że okaże się to przydatne.
źródło
ten link pomógł mi .. https://www.youtube.com/watch?v=HBi-P5j0Kec Mam nadzieję, że to również pomoże
powiedz rozkład jak poniżej
precyzja dla A byłaby
P (A) = 100/100 + 0 + 0 + 0 = 100
P (B) = 9/9 + 80 + 1 + 1 = 9/91 psst ... zasadniczo bierze prawdziwy wynik dodatni klasy i dzieli przez dane kolumny między wierszami
przypominam, że byłoby
R (A) = 100 / 100+ 80 + 10 + 10 = 0,5
R (B) = 9 / 9+ 0 + 0 + 1 = 0,9
psst ... zasadniczo bierze prawdziwy pozytyw klasy i dzieli przez dane wiersza między kolumnami
po uzyskaniu wszystkich wartości weź średnią makro
śr. (P) = P (A) + P (B) + P (C) + P (D) / 4
avg (R) = R (A) + R (B) + R (C) + R (D) / 4
F1 = 2 * średnia (P) * średnia (R) / średnia (P) + średnia (R)
źródło
Sprawdź te slajdy z cs205.org na Harvard . Po przejściu do sekcji Miary błędów omawia się precyzję i przywołanie w ustawieniach wielu klas (np. Jeden na wszystkich lub jeden na jednym) i macierze pomieszania. Macierze zamieszania są tym, czego naprawdę chcesz.
Do Twojej wiadomości, w pakiecie oprogramowania Python scikits.learn istnieją wbudowane metody automatycznego obliczania takich rzeczy, jak macierz nieporozumień na podstawie klasyfikatorów przeszkolonych w zakresie danych wieloklasowych. Prawdopodobnie może również bezpośrednio obliczyć dla ciebie wykresy dokładnego przywołania. Warte zobaczenia.
źródło
Z Ozgur i in. (2005) można zobaczyć, że należy obliczyć Precyzja i Przywołaj zgodnie z normalnymi wyrażeniami, ale zamiast uśredniać całkowitą liczbę N wystąpień w zbiorze danych, należy użyć N = [wystąpienia z co najmniej jedną etykietą z klasa, do której przypisano].
tutaj jest wspomniane odniesienie: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.104.8244&rep=rep1&type=pdf
źródło
Dokładnie tak samo, jak zrobiłbyś to w przypadku ogólnym, z zestawami:
http://en.wikipedia.org/wiki/F1_score
http://en.wikipedia.org/wiki/Precision_and_recall
Oto proste funkcje Pythona, które dokładnie to robią:
źródło