我无法提高情绪分析的测试准确性

I can't get my test accuracy to increase in a sentiment analysis

我不确定这是否是正确的地方,但我的测试准确率始终在 0.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 banning #immigrants & #refugees #oxfam4refugees"

Data set

为什么要使用 naive.score?我认为这是一个 copy-paste 错误。以下是您可以遵循的几个步骤。

  1. 确保你有足够的数据点并清理它。 Cleaning数据集是数据科学中不可避免的过程。
  2. 使用 ngram_range, max_df, min_df, max_features 等参数,同时使用 TfidfVectorizer or CountVectorizer. You may also try embeddings using Word2Vec.
  3. 对文本进行特征化
  4. 使用 GridSearch or RandomizedSearchCValpha, penalty 和其他变量进行超参数调整。确保您目前 CV。有关详细信息,请参阅文档
  5. 如果数据集是 imbalanced,则尝试使用其他矩阵,例如 log-loss, precision, recall, f1-score, etc。有关详细信息,请参阅 this
  6. 通过检查训练误差和测试误差,确保您的模型既不是 overfitted 也不是 underfitted

除了SVM,也可以尝试传统模型,如Logistic RegressionNVRF等。如果你有大量的数据点,那么你可以尝试深度学习模型。

原来我需要清理极性数据集,因为它具有 "positive," 、 "positive,," 和 "positive,,," 等值,因此没有将它们注册为不同的,所以我只是删除了所有“ ”,来自专栏。