Нужна помощь в применении scikit-learn к этой несбалансированной задаче категоризации текста

У меня многоклассовая проблема классификации / категоризации текста. У меня есть набор наземных данных правды с K разные взаимоисключающие классы. Это несбалансированная проблема в двух отношениях. Во-первых, некоторые занятия намного чаще, чем другие. Во-вторых, некоторые классы представляют для нас больший интерес, чем другие (обычно они положительно коррелируют с их относительной частотой, хотя есть некоторые классы, которые встречаются довольно редко).

Моя цель состоит в том, чтобы разработать отдельный классификатор или набор из них, чтобы иметь возможность классифицировать k << K классы, представляющие интерес с высокой точностью (не менее 80%) при сохранении разумного отзыва (то, что "разумно", немного расплывчато).

Функции, которые я использую, в основном типичные, основанные на униграмме / биграмме, плюс некоторые бинарные функции, поступающие из метаданных входящих документов, которые классифицируются (например, были ли они отправлены по электронной почте или через веб-форму).

Из-за несбалансированных данных я склоняюсь к разработке двоичных классификаторов для каждого из важных классов, а не одного, такого как многоклассовый SVM.

Какие алгоритмы обучения ML (бинарные или нет) реализованы в scikit-learn разрешить тренировку, настроенную на точность (по сравнению, например, с отзывом или F1), и какие опции мне нужно для этого установить?

Какие инструменты анализа данных в scikit-learn Можно использовать для выбора признаков, чтобы сузить характеристики, которые могут быть наиболее релевантными для точной классификации определенного класса?

Это на самом деле не проблема "больших данных": K около 100, k около 15общее количество образцов, доступных мне для обучения и тестирования, составляет около 100,000,

Спасибо

1 ответ

Учитывая, что k мало, я бы просто сделал это вручную. Для каждого желаемого класса обучите свой индивидуальный (один против остальных) классификатор, посмотрите на кривую точности-отзыва, а затем выберите порог, который дает желаемую точность.

Другие вопросы по тегам