Я делаю проект, в котором я пытаюсь классифицировать комментарии по различным категориям: «ядовитые», «суровые_отоксичные», «непристойные», «оскорбительные», «индивидуальные_ ненависти». Набор данных, который я использую, взят из этой задачи Kaggle: https://www.kaggle.com/c/jigsaw-toxic-comment-classification-challenge. Текущая проблема, с которой я сталкиваюсь, заключается в том, что независимо от того, насколько мал тренировочный набор данных, в который я помещаю свои данные, когда я прогнозирую метки для данных теста, моя точностьвсегда около или выше 90%. В этом случае я тренируюсь на 15 строках данных и тестирую на 159 556 строках. Обычно я был бы рад иметь высокую точность тестирования, но в этом случае я чувствую, что делаю что-то не так.
Я читаю данные в кадр данных pandas:
trainData = pd.read_csv('train.csv')
Вот как выглядят данные при печати:
id comment_text \
0 0000997932d777bf Explanation\nWhy the edits made under my usern...
1 000103f0d9cfb60f D'aww! He matches this background colour I'm s...
2 000113f07ec002fd Hey man, I'm really not trying to edit war. It...
3 0001b41b1c6bb37e "\nMore\nI can't make any real suggestions on ...
4 0001d958c54c6e35 You, sir, are my hero. Any chance you remember...
... ... ...
159566 ffe987279560d7ff ":::::And for the second time of asking, when ...
159567 ffea4adeee384e90 You should be ashamed of yourself \n\nThat is ...
159568 ffee36eab5c267c9 Spitzer \n\nUmm, theres no actual article for ...
159569 fff125370e4aaaf3 And it looks like it was actually you who put ...
159570 fff46fc426af1f9a "\nAnd ... I really don't think you understand...
toxic severe_toxic obscene threat insult identity_hate
0 0 0 0 0 0 0
1 0 0 0 0 0 0
2 0 0 0 0 0 0
3 0 0 0 0 0 0
4 0 0 0 0 0 0
... ... ... ... ... ... ...
159566 0 0 0 0 0 0
159567 0 0 0 0 0 0
159568 0 0 0 0 0 0
159569 0 0 0 0 0 0
159570 0 0 0 0 0 0
[159571 rows x 8 columns]
Затем я разделяю данные на train и test, используя train_test_split:
X = trainData.drop(labels= ['id','toxic','severe_toxic','obscene','threat','insult','identity_hate'],axis=1)
Y = trainData.drop(labels = ['id','comment_text'],axis=1)
trainX,testX,trainY,testY = train_test_split(X,Y,test_size=0.9999,random_state=99)
Яс помощью HashingVectorizer для преобразования комментариев в числовые векторы для классификации:Наконец, вот где я вызываю функции, и получаю вывод:
sol = hashVec()
logRegOVR(sol[0],sol[1])
toxic :
Train Accuracy: 0.8666666666666667
Test Accuracy: 0.9041590413397177
severe_toxic :
Train Accuracy: 1.0
Test Accuracy: 0.9900035097395272
obscene :
Train Accuracy: 1.0
Test Accuracy: 0.9470468048835519
threat :
Train Accuracy: 1.0
Test Accuracy: 0.9970041866178646
insult :
Train Accuracy: 1.0
Test Accuracy: 0.9506317531148938
identity_hate :
Train Accuracy: 1.0
Test Accuracy: 0.9911943142219659
Точность тестирования очень похожа, когда у меня более разумный train_test_split, 80% обучения и 20% тестирования.
Спасибо за помощь