Как использование большего количества n-граммных порядков может снизить точность для классификатора Multinomial NaiveBayes? - PullRequest
0 голосов
/ 04 июня 2018

Я создаю модель для классификации текста с помощью nltk и sklearn и обучаю ее на наборе данных 20newsgroups из sklearn (каждый документ содержит приблизительно 130 слов).

Моя предварительная обработка включает удалениестоп-слова и лемматизирующие токены.

Далее, в моем конвейере я передаю его tfidfVectorizer() и хочу манипулировать некоторыми входными параметрами векторизатора для повышения точности.Я читал, что n-грамм (как правило, при n меньше, чем улучшает точность, но когда я классифицирую выходные данные векторизатора с помощью классификатора multinomialNB(), используя ngram_range=(1,2) и ngram_range=(1,3) в tfidf, это ухудшает точность. Может кто-топомогите объяснить почему?

РЕДАКТИРОВАТЬ : Вот пример данных, как было запрошено, с кодом, который я использовал для его извлечения и удаления заголовка:

from sklearn.datasets import fetch_20newsgroups
news = fetch_20newsgroups(subset='all', remove="headers")
#example of data text (no header)
print(news.data[0])

I am sure some bashers of Pens fans are pretty confused about the lack
of any kind of posts about the recent Pens massacre of the Devils. Actually,
I am  bit puzzled too and a bit relieved. However, I am going to put an end
to non-PIttsburghers' relief with a bit of praise for the Pens. Man, they
are killing those Devils worse than I thought. Jagr just showed you why
he is much better than his regular season stats. He is also a lot
fo fun to watch in the playoffs. Bowman should let JAgr have a lot of
fun in the next couple of games since the Pens are going to beat the pulp out of Jersey anyway. I was very disappointed not to see the Islanders lose the final regular season game.          PENS RULE!!!

Это мойконвейер, код для обучения модели и точность печати:

    test1_pipeline=Pipeline([('clean', clean()),
                         ('vectorizer', TfidfVectorizer(ngram_range=(1,2))), 
                         ('classifier', MultinomialNB())])

train(test1_pipeline, news_group_train.data, news_group_train.target)
...