Я не могу добиться увеличения точности моего теста в анализе настроений - PullRequest
0 голосов
/ 12 апреля 2020

Я не уверен, что это правильное место, но точность моего теста всегда составляет около .40, в то время как я могу довести точность своего тренировочного набора до 1.0. Я пытаюсь провести анализ настроений в твиттере Трампа, я комментировал каждый твит с положительной, отрицательной или нейтральной полярностью. Я хочу быть в состоянии предсказать полярность новых данных на основе моей модели. Я пробовал разные модели, но SVM, кажется, дает мне высочайшую точность теста. Я не уверен в том, почему моя точность модели данных так низка, но буду признателен за любую помощь или направление.

trump = pd.read_csv("trump_data.csv", delimiter = ";")

#drop all nan values
trump = trump.dropna()
trump = trump.rename(columns = {"polarity,,,":"polarity"})

#print(trump.columns)
def tokenize(text):
   ps = PorterStemmer()
   return [ps.stem(w.lower()) for w in word_tokenize(text)    


X = trump.text

y = trump.polarity
X_train, X_test, y_train, y_test = train_test_split(X,y, test_size = .2, random_state = 42)


svm = Pipeline([('vectorizer', TfidfVectorizer(stop_words=stopwords.words('english'), 
tokenizer=tokenize)), ('svm', SGDClassifier(loss='hinge', penalty='l2',alpha=1e-3, 
random_state=42,max_iter=5, tol=None))])

svm.fit(X_train, y_train)


model = svm.score(X_test, y_test)
print("The svm Test Classification Accuracy is:", model )
print("The svm training set accuracy is : {}".format(naive.score(X_train,y_train)))
y_pred = svm.predict(X)

Это пример одной из строк в текстовом столбце набора данных

". @ Repbilljohnson съезд должен активизировать и отменить дискриминационный президент Трампа #eo запрет #immigrants & #refugees # oxfam4refugees"

Набор данных

Ответы [ 2 ]

0 голосов
/ 10 мая 2020

Оказывается, мне нужно было очистить набор данных полярности, так как он имел значения, такие как "положительный", "положительный ,," и "положительный ,,", следовательно, не регистрировал их как разные, поэтому я просто удалил все "," из колонки.

0 голосов
/ 12 апреля 2020

Почему вы используете naive.score? Я предполагаю, что это copy-paste ошибка. Вот несколько шагов, которые вы можете выполнить.

  1. Убедитесь, что у вас достаточно данных и очистите их. Cleaning набор данных является неизбежным процессом в науке о данных.
  2. Используйте такие параметры, как ngram_range, max_df, min_df, max_features, обрабатывая текст с помощью TfidfVectorizer или CountVectorizer . Вы также можете попробовать встраивание, используя Word2Ve c.
  3. Выполните настройку гиперпараметра для alpha, penalty и других переменных, используя GridSearch или RandomizedSearchCV, Убедитесь, что вы CV в настоящее время. Для получения дополнительной информации см. Документацию
  4. Если набор данных imbalanced, попробуйте использовать другие матрицы, например log-loss, precision, recall, f1-score, etc. Для получения дополнительной информации см. this .
  5. Убедитесь, что ваша модель не overfitted не underfitted, проверив ошибки поезда и ошибки теста.

Other чем SVM, также попробуйте традиционные модели, такие как Logistic Regression, NV, RF et c. Если у вас есть большое количество точек данных, вы можете попробовать модели глубокого обучения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...