Usiłuję zbudować klasyfikator z wieloma etykietami, aby przypisywać tematy do istniejących dokumentów za pomocą programu scikit
Ja przetwarzanie moich dokumentów przepuszczanie ich przez TfidfVectorizer
etykiet poprzez podjęcie działań MultiLabelBinarizer
i stworzył OneVsRestClassifier
ze związkiem SGDClassifier
jako estymatora.
Jednak podczas testowania mojego klasyfikatora otrzymuję tylko wyniki do 0,29, które z tego, co przeczytałem, są dość niskie w przypadku podobnych problemów. Wypróbowałem wiele opcji w TfidfVectorizer, takich jak stopery, unigramy, wywodzenie i nic nie wydaje się tak bardzo zmieniać wyniku.
Kiedyś GridSearchCV
uzyskiwałem najlepsze parametry mojego estymatora i obecnie nie mam pomysłów, co dalej.
Jednocześnie, z tego co rozumiem, nie mogę korzystać scikit.metrics
z OneVsRestClassifier
tak jak mogę dostać jakieś metryki (F1, precyzja, Recall etc), tak aby dowiedzieć się, co jest nie tak?
Czy to może być problem z moim korpusem danych?
Aktualizacja: Ja również spróbował wykorzystać CountVectorizer
i HashingVectorizer
i szybkiego odbierania im TfidfTransformer
, ale wyniki są podobne. Zgaduję więc, że metoda work-of-words robi najlepiej w dziedzinie tokenizacji, a reszta należy do klasyfikatora ...
źródło
score
na klasyfikatorze,Returns the mean accuracy on the given test data and labels. In multi-label classification, this is the subset accuracy which is a harsh metric since you require for each sample that each label set be correctly predicted.
Odpowiedzi:
Dokładność podzestawu jest rzeczywiście trudną miarą. Aby zorientować się, jak dobry lub zły jest 0,29, jakiś pomysł:
Możesz także obliczyć wynik Hamminga, aby sprawdzić, czy twój klasyfikator nie ma pojęcia, czy jest całkiem dobry, ale ma problem z przewidywaniem wszystkich etykiet poprawnie. Zobacz poniżej, aby obliczyć wynik Hamminga.
Zobacz Jak obliczyć precyzję / przywołanie dla klasyfikacji wieloklasowej-wielowarstwowej? . Zapomniałem, czy sklearn je obsługuje, pamiętam, że miał pewne ograniczenia, np. Sklearn nie obsługuje wielu etykiet dla macierzy pomieszania . Byłoby dobrym pomysłem, aby zobaczyć te liczby.
Wynik Hamminga :
W ustawieniach klasyfikacji wielowarstwowej
sklearn.metrics.accuracy_score
oblicza tylko dokładność podzestawu (3): tj. Zestaw etykiet przewidziany dla próbki musi dokładnie odpowiadać odpowiadającemu zestawowi etykiet w y_true.Ten sposób obliczania dokładności nazywa się czasem, być może mniej jednoznacznie, dokładnym współczynnikiem dopasowania (1):
Innym typowym sposobem obliczenia dokładności jest zdefiniowany w (1) i (2), a mniej jednoznacznie określany jako wynik Hamminga (4) (ponieważ jest ściśle związany ze stratą Hamminga) lub dokładnością opartą na etykietach ). Oblicza się go w następujący sposób:
Oto metoda pythonowa do obliczenia wyniku Hamminga:
Wyjścia:
(1) Sorower, Mohammad S. „ Badanie literatury na temat algorytmów uczenia się wielu marek. ” Oregon State University, Corvallis (2010).
(2) Tsoumakas, Grigorios i Ioannis Katakis. „ Klasyfikacja wielu marek: przegląd. ” Departament Informatyki, Aristotle University of Thessaloniki, Grecja (2006).
(3) Ghamrawi, Nadia i Andrew McCallum. „ Zbiorowa klasyfikacja wielu marek. ” Materiały z 14. międzynarodowej konferencji ACM na temat zarządzania informacjami i wiedzą. ACM, 2005.
(4) Godbole, Shantanu i Sunita Sarawagi. „ Dyskryminacyjne metody klasyfikacji wielu marek ” . Postępy w odkrywaniu wiedzy i eksploracji danych. Springer Berlin Heidelberg, 2004. 22-30.
źródło
hamming_score
błędy funkcyjne odchodzący na Keras <ipython Input 34-16066d66dfdd> w hamming_score (y_true, y_pred, normalizacja, sample_weight) 60 ''”, 61 acc_list = [] ---> 62 do i w zakresie (y_true.shape [ 0]): 63 set_true = set (np.where (y_true [i]) [0]) 64 set_pred = set (np.where (y_pred [i]) [0]) TypeError: indeks zwrócił non-int (typ NoneType )Czy wynik 0,29 to za mało? Jak wygląda twoja macierz dezorientacji? Czy są jakieś tematy, których nie można oddzielić, patrząc tylko na treść słowa?
W przeciwnym razie postaraj się odwrócić problem: postaw hipotezę, że niskie wyniki są najlepszymi wynikami klasyfikatora w danych. Oznaczałoby to, że twoje dokumenty nie podlegają klasyfikacji przy użyciu tego podejścia.
Aby przetestować tę hipotezę, potrzebujesz zestawu dokumentów testowych o znanej charakterystyce work-of-word (które sam tworzysz). Powinieneś uzyskać 100% wyników.
Jeśli nie, to masz błąd. W przeciwnym razie potrzebujesz innego podejścia do klasyfikacji dokumentów. Zadaj sobie pytanie: czym różnią się dokumenty z różnych klas? Czy muszę spojrzeć na inne funkcje moich dokumentów itp.
źródło