Я делаю текстовую классификацию диалектов с 4 диалектами.Я разделил набор данных (размером 20К) на 75% обучения и 25% тестирования.Когда я тренировал их с наивными байесами и тестировал на тестовом наборе данных, я получил точность 90%.Но когда я сделал проверку с новым набором данных размером 400 твитов, я получил точность 63%.Вы думаете, что падение вызвано переоснащением?Если вам нужна другая информация, пожалуйста, сообщите мне.
Это мой код:
from sklearn.pipeline import Pipeline
text_clf = Pipeline([
('vect', CountVectorizer()),
('clf', MultinomialNB())])
text_clf.fit(X_train, y_train)
pred=text_clf.predict(validate['tweets'])
accuracy_score(validate['dialect'],pred)
0.63
Это мои настройки для наивных байесов и countVectorizer.Я не добавил никаких гиперпараметров для наивного байеса.Я не уверен, что добавить, или это будет иметь какое-то заметное значение.
это матрица путаницы:
array([[150, 4, 44, 1],
[ 7, 67, 105, 3],
[ 12, 10, 110, 0],
[ 0, 0, 0, 0]], dtype=int64)
Отчеты
для обучения
precision recall f1-score support
Egypt 0.96 0.98 0.97 4039
Gulf 0.99 0.97 0.98 4456
Hijazi 0.95 0.97 0.96 4905
Maghribi 1.00 0.97 0.98 3014
micro avg 0.97 0.97 0.97 16414
macro avg 0.97 0.97 0.97 16414
weighted avg 0.97 0.97 0.97 16414
accuracy: 0.97
для тестирования
precision recall f1-score support
Egypt 0.90 0.92 0.91 1321
Gulf 0.92 0.88 0.90 1533
Hijazi 0.84 0.92 0.88 1603
Maghribi 0.98 0.87 0.92 1015
micro avg 0.90 0.90 0.90 5472
macro avg 0.91 0.90 0.90 5472
weighted avg 0.90 0.90 0.90 5472
accuracy: 0.89
для новых данных
precision recall f1-score support
Egypt 0.89 0.75 0.82 199
Gulf 0.83 0.37 0.51 182
Hijazi 0.42 0.83 0.56 132
Maghribi 0.00 0.00 0.00 0
micro avg 0.64 0.64 0.64 513
macro avg 0.53 0.49 0.47 513
weighted avg 0.75 0.64 0.64 513
accuracy: 0.63
Важные примечания :
- образцымоя модель терпит неудачу, это новые твиты из твиттера.
- Набор данных Египта, Персидского залива и Магриби был аннотирован вручную.
- Набор данных хиджази был получен из твиттера с помощью Twitter API при следующих условиях: геолокация, user_location и ключевые слова (специфичные для диалекта хиджази).Я сделал это, чтобы максимально уменьшить шум, потому что эти твиты не помечены вручную.