Я пытаюсь создать классификатор с несколькими метками, чтобы назначать темы для существующих документов с помощью scikit.
Я обрабатываю свои документы, пропускаю их через TfidfVectorizer
ярлыки MultiLabelBinarizer
и создаю в OneVsRestClassifier
качестве SGDClassifier
оценщика.
Однако при тестировании моего классификатора я получаю баллы только до .29, что, как я прочитал, довольно мало для подобных проблем. Я пробовал несколько вариантов на TfidfVectorizer, таких как стоп-слова, надписи, stemming, и ничто, кажется, не меняет результат так сильно.
Я также использовал, GridSearchCV
чтобы получить лучшие параметры для моей оценки, и в настоящее время у меня нет идей о том, что попробовать дальше.
В то же время, от того, что я понимаю , что я не могу использовать scikit.metrics
с OneVsRestClassifier
таким , как я могу получить некоторые метрики (F1, Precision, Recall и т.д.), чтобы выяснить , что не так?
Может ли быть проблема с моим корпусом данных?
Обновление: я также пытался использовать CountVectorizer
и HashingVectorizer
и конвейерную их, TfidfTransformer
но результаты похожи. Итак, я предполагаю, что подход «мешок слов» делает все возможное в области токенизации, а остальное зависит от классификатора ...
score
на классификаторе,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.
Ответы:
Точность подмножества - действительно суровая метрика. Чтобы понять, насколько хорош или плох 0.29, давайте подумаем:
Вы также можете вычислить балл Хэмминга, чтобы увидеть, является ли ваш классификатор невежественным или достаточно приличным, но у него есть проблемы с предсказанием всех меток правильно. Смотрите ниже, чтобы вычислить счет Хэмминга.
См. Как вычислить точность / отзыв для классификации мультикласса и мультиметки? , Я забыл, поддерживает ли Sklearn это, я помню, что у него были некоторые ограничения, например, Sklearn не поддерживает мульти-метки для матрицы путаницы . Было бы неплохо увидеть эти цифры действительно.
Счет Хэмминга :
В параметре классификации с несколькими метками
sklearn.metrics.accuracy_score
вычисляется только точность подмножества (3): то есть набор меток, предсказанный для выборки, должен точно соответствовать соответствующему набору меток в y_true.Этот способ вычисления точности иногда называют, возможно, менее двусмысленно, точным коэффициентом соответствия (1):
Другой типичный способ вычисления точности определен в (1) и (2), и менее неоднозначно упоминается как оценка Хэмминга (4) (так как он тесно связан с потерей Хэмминга), или точность на основе меток ). Он рассчитывается следующим образом:
Вот метод python для вычисления счета Хэмминга:
Выходы:
(1) Сороуер, Мохаммад С. " Литературное исследование по алгоритмам многокомпонентного обучения". Государственный университет Орегона, Корваллис (2010)
(2) Цумакас, Григориос и Иоаннис Катакис. « Мультимарочная классификация: обзор». Кафедра информатики, Университет Аристотеля в Салониках, Греция (2006).
(3) Гамрави, Надя и Эндрю МакКаллум. « Коллективная классификация по нескольким меткам ». Материалы 14-й международной конференции ACM по управлению информацией и знаниями. ACM, 2005.
(4) Годболе, Шантану и Сунита Сараваги. « Дискриминационные методы для классификации с несколькими метками ». Достижения в области обнаружения знаний и интеллектуального анализа данных. Springer Berlin Heidelberg, 2004. 22-30.
источник
hamming_score
функциональные ошибки вне на Keras: <IPython-вход-34-16066d66dfdd> в hamming_score (y_true, y_pred, нормализуют, sample_weight) 60 ''»61 acc_list = [] ---> 62 для г в диапазоне (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: индекс возвращен не-int (тип NoneType )Разве 0,29 балла недостаточно? Как выглядит ваша матрица путаницы? Есть ли какие-то темы, которые нельзя отделить, возможно, только просмотрев содержание слова?
В противном случае попытайтесь перевернуть проблему: предположите, что низкие оценки - это лучшее, что ваш классификатор может сделать с вашими данными. Это будет означать, что ваши документы не классифицируются с использованием этого подхода.
Чтобы проверить эту гипотезу, вам нужен набор тестовых документов с известными характеристиками пакета слов (которые вы создаете сами). Вы должны получить 100% баллов.
Если нет, значит у вас ошибка. В противном случае вам нужен другой подход для классификации ваших документов. Задайте себе вопрос: чем отличаются документы разных классов? Нужно ли мне смотреть на другие функции моих документов и т. Д.
источник