Почему я получаю 100% точность обучения с помощью SVM для определения настроения? - PullRequest
1 голос
/ 19 апреля 2020

Я пытаюсь создать автоматический c детектор настроений, который должен назначать настроение (положительное, отрицательное, нейтральное и т. Д. c.) На основе текста его целевого контекста. Но почему-то я получаю точность обучения 100%. Я пытался понять это слишком долго, и я чувствую, что упускаю что-то довольно очевидное сейчас. Что я делаю не так?

Мне очень жаль, если это плохо отформатировано. Я присоединился к этому сайту несколько дней go, и я в отчаянии и тороплюсь с моим крайним сроком Uni среди всего этого хаоса, поэтому, пожалуйста, прости меня.

import pandas as pd
import os

df_train = pd.read_csv("combined-sentiment-judgments.tsv", sep='\t', header=None)
df_train.head()

df_train.shape

Результат таков: (980, 6 )

import sys
import csv
import random

csv.field_size_limit(sys.maxsize)

with open ("combined-sentiment-judgments.tsv") as data:
  trainData = [row for row in csv.reader(data, delimiter='\t')]
random.shuffle(trainData)

context = []
for i in range (len(trainData)):
  result =[]
  f= ""
  result.append(trainData[i][3])
  result.append(trainData[i][4])
  result.append(trainData[i][5])
  context.append(f.join(result))

labels = []
for i in range (len(context)):
  res = []
  s= ""
  res.append(trainData[i][1])
  labels.append(s.join(res))


for label,text in list(zip(labels,context))[:20]:
  print(label,text[:50]+"...")

Это несколько строк, которые я напечатал с этим, чувства на английском языке sh, но предложения на финском sh:

нейтральный Kyseinen auto taitaa olla Mursu. Niissä on nykyää ...

нейтрально, позитивно, нейтрально, неясно Tällä hetkellä Liptonin vihreä sitrushedelmätee. ...

отрицательный, нейтральный, отрицательный, отрицательный mutta eikös Windows 8 ole ihan paska? en nyt muis ...

положительный, смешанный, нейтральный, смешанный Tarkoitus olisi ostaa b230ft koneellinen volvo, k ...


import sklearn
from sklearn.feature_extraction.text import CountVectorizer

vectorizer=CountVectorizer(max_features=100000,binary=True,ngram_range=(1,1))
feature_matrix=vectorizer.fit_transform(context)
print("shape=",feature_matrix.shape)

Результаты: shape = (980, 10861)

from sklearn.model_selection import train_test_split

train_texts, dev_texts, train_labels, dev_labels=train_test_split(context,labels,test_size=0.2)
vectorizer=CountVectorizer(max_features=100000,binary=True,ngram_range=(1,2))
feature_matrix_train=vectorizer.fit_transform(train_texts)
feature_matrix_dev=vectorizer.transform(dev_texts)

print(feature_matrix_train.shape)
print(feature_matrix_dev.shape)

Результаты снова:

(784, 27827)

(196, 27827)

import sklearn.svm
classifier=sklearn.svm.LinearSVC(C=0.009,verbose=1)
classifier.fit(feature_matrix_train, train_labels)

print("DEV",classifier.score(feature_matrix_dev, dev_labels))
print("TRAIN",classifier.score(feature_matrix_train, train_labels))

И вот что я получаю:

DEV 0.08673469387755102

TRAIN 1.0

...