Здесь я говорю о точности обучения, которую мы видим в отчете о классификации.
Я обучил модель, используя конвейер sklearn, и я получил точность 78%. После этого тренирую модель без использования pipeline, точность 98%. Я сомневаюсь, почему такая большая разница в точности?
Модель обучения с использованием pipepilne: Функции для предварительной обработки текста:
def text_preprocess(mess):
#nopunc = [char for char in mess if char not in string.punctuation]
#nopunc = ''.join(nopunc)
stopwords = list(string.punctuation) + nltk.corpus.stopwords.words('english')
mess = str(mess)
nopunc = mess.lower()
nopunc = re.sub('((www\.[^\s]+)|(https?://[^\s]+))', 'URL', nopunc) # remove URLs
nopunc = re.sub('@[^\s]+', 'AT_USER', nopunc) # remove usernames
nopunc = re.sub(r'#([^\s]+)', r'\1', nopunc) # remove the # in #hashtag
nopunc = nltk.tokenize.word_tokenize(nopunc) # remove repeated characters (helloooooooo into hello)
#return [word for word in nopunc if word not in nltk.corpus.stopwords.words('english')]
return [word for word in nopunc if word not in stopwords]
pipeline = Pipeline([
('bow', CountVectorizer(analyzer=text_preprocess)),
('tfidf', TfidfTransformer()),
('classifier', RandomForestClassifier(n_estimators=100))
])
Обучение без конвейера:
bow_transformer = CountVectorizer(analyzer=text_preprocess).fit(train['Sentimenttext'])
messages_bow = bow_transformer.transform(train['Sentimenttext'])
tfidf_transformer = TfidfTransformer().fit(messages_bow)
messages_tfidf = tfidf_transformer.transform(messages_bow)
spam_detect_model = RandomForestClassifier().fit(messages_tfidf, train['Sentiment'])