Я хочу построить алгоритм, который классифицирует текст: ветчина или спам;У меня есть данные поезда / теста для каждой категории текста.(мои данные поезда есть для каждой категории 8000 sentences
, и для теста каждая категория содержит 2000 sentences
)
X_train выглядит следующим образом ['please, call me asap!', 'watch out the new sales!', 'hello jim can we talk?', 'only today you can buy this', 'don't miss our offer!']
y_train выглядит следующим образом [1 0 1 0 0]
где 1= ham, 0 = spam
то же самое с X_test и y_test.
Это фрагмент моего кода:
# classifier can be LogisticRegression, MultinomialNB, RandomForest, DecisionTree
text_clf = Pipeline([('vect', CountVectorizer()),
('tfidf', TfidfTransformer()),
('clf', classifier),
])
model = text_clf.fit(X_train, y_train)
y_predict = model.predict(X_test)
И это параметры, которые я измеряю:
print(accuracy_score(y_test, y_predict))
print(f1_score(y_test, y_predict, average="weighted"))
print(recall_score(y_test, y_predict, pos_label=1, average="binary"))
print(precision_score(y_test, y_predict, average="weighted"))
Если я не использую оптимизацию (remove stop words, remove punctuation, stem words, lemmatize words
), я получаю результаты около 95% каждого параметра.Если я использую эти оптимизации, точность, оценка f1 и точность резко снижаются до 50-60%.Функция возврата остается неизменной на уровне 95%.
Почему это происходит?Где я ошибаюсь?Я правильно рассчитал эти параметры?Или это нормальное поведение?