Наивная байесовская классификация Scikit для текста

Я пытаюсь использовать scikit для классификации Наивного Басиса. У меня есть пара вопросов (также я новичок в scikit)

1) Алгоритмам Scikit требуется ввод в виде массива numpy и метка в виде массивов. В случае классификации текста должен ли я сопоставлять каждое свое слово с номером (идентификатором), сохраняя хэш слов в словаре и уникальный идентификатор, связанный с ним? это стандартная практика в scikit?

2) В случае присвоения одного и того же текста более чем одному классу, как мне действовать. Один из очевидных способов - воспроизвести каждый обучающий пример по одному для каждой связанной метки. Есть ли лучшее представление?

3) Аналогично для тестовых данных, как я могу получить более одного класса, связанного с тестом?

Я использую http://scikit-learn.org/stable/modules/generated/sklearn.naive_bayes.MultinomialNB.html в качестве моей базы.


person David    schedule 07.12.2013    source источник


Ответы (1)


1) да. Используйте DictVectorizer или HashVectorizer из модуля feature_extraction. 2) Это проблема с несколькими ярлыками. Возможно, используйте OneVsRestClassifier из модуля multi_class. Он обучит отдельный классификатор для каждого класса. 3) Использование классификатора с несколькими ярлыками / одного классификатора на каждый запрос сделает это.

Взгляните на http://scikit-learn.org/dev/auto_examples/grid_search_text_feature_extraction.html и http://scikit-learn.org/dev/auto_examples/plot_multilabel.html

person Andreas Mueller    schedule 07.12.2013
comment
Спасибо за хороший ответ. У меня есть несколько вопросов по стратегии: скажем, если я использую OneVsAll / OneVsRestClassifier, не будет ли это восприимчивым к тому факту, что перестановка меток будет составлять другой класс, хотя он должен быть таким же. Например, для конкретного теста, скажем, у меня есть метка X, Y, Z для почти аналогичного текста, если у меня есть Z, Y, A в качестве метки, классификатор OneVsAll будет в неправильном впечатлении от подгонки первого текста к X, а второй текст - к Z? Пока перестановка значения не имеет. Поможет ли сортировка этикеток? - person David; 08.12.2013
comment
Scikit-learn позаботится об этом за вас, но я бы рекомендовал применить LabelBinarizer к вашим меткам, что создаст уникальное представление. - person Andreas Mueller; 09.12.2013