Добавление оптимизаций снижает точность, точность, f1 алгоритмов классификатора - PullRequest
0 голосов
/ 05 июня 2018

Я хочу построить алгоритм, который классифицирует текст: ветчина или спам;У меня есть данные поезда / теста для каждой категории текста.(мои данные поезда есть для каждой категории 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%.

Почему это происходит?Где я ошибаюсь?Я правильно рассчитал эти параметры?Или это нормальное поведение?

1 Ответ

0 голосов
/ 12 июня 2018

Я только что понял, что не так: недостаточно.Я выполнил перекрестную проверку

scores = cross_val_score(model, X_train, y_train, cv=10, scoring='accuracy')

и теперь все в порядке, я получаю ожидаемые результаты.

...