Вы должны начать с преобразования ваших документов в TF-log (1 + IDF) векторов : частоты терминов редки, поэтому вы должны использовать python dict с термином в качестве ключей и считать как значения, а затем делить на общеесчитать, чтобы получить глобальные частоты.
Другое решение состоит в том, чтобы использовать abs (хэш (термин)), например, в качестве положительных целочисленных ключей.Затем вы используете векторы scipy.sparse, которые более удобны и более эффективны для выполнения операций линейной алгебры, чем диктон python.
Также постройте 150 векторов частот, усредняя частоты всех помеченных документов, принадлежащих к той же категории,Затем для нового документа для метки вы можете вычислить косинусное сходство между вектором документа и каждым вектором категории и выбрать наиболее похожую категорию в качестве метки для вашего документа.
Если это не хорошодостаточно, тогда вы должны попытаться обучить модель логистической регрессии, используя штраф L1, как объяснено в этом примере из scikit-learn (это оболочка для liblinear, как объяснено @ephes),Векторы, используемые для обучения вашей модели логистической регрессии, должны быть ранее введенными векторами TD-log (1 + IDF), чтобы получить хорошую производительность (точность и отзыв).Библиотека scikit learn предлагает модуль sklearn.metrics с подпрограммами для вычисления этих показателей для данной модели и данного набора данных.
Для больших наборов данных: вам следует попробовать vowpal wabbit , который, вероятно,Самый быстрый кролик в мире для крупномасштабных задач классификации документов (но не простой в использовании упаковщиков Python AFAIK).