Почему разница в точности обучения при использовании конвейера sklearn и его неиспользовании? - PullRequest
0 голосов
/ 08 мая 2020

Здесь я говорю о точности обучения, которую мы видим в отчете о классификации.

Я обучил модель, используя конвейер 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'])
...