我无法通过情感分析来提高考试的准确性

问题描述 投票:0回答:1

我不确定这是否是正确的位置,但是我的测试准确度始终约为.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歧视性#eo禁止#移民和#难民#oxfam4难民”

Data set

python machine-learning nltk svm text-classification
1个回答
0
投票

您为什么使用naive.score?我认为这是copy-paste错误。您可以按照以下几个步骤操作。

  1. 请确保您有足够的数据点并清理它。 Cleaning数据集是数据科学中的必然过程。
  2. 在使用ngram_range, max_df, min_df, max_featuresTfidfVectorizer来修饰文字时,请使用CountVectorizer等参数。您也可以尝试使用Word2Vec嵌入。
  3. 使用alpha, penaltyGridSearchRandomizedSearchCV和其他变量进行超参数调整。确保您当前为CV。请参阅文档以获取更多信息
  4. 如果数据集为imbalanced,则尝试使用其他矩阵,例如log-loss, precision, recall, f1-score, etc。有关更多信息,请参考this。>
  5. 通过检查火车误差和测试误差,确保您的模型既不是overfitted也不是underfitted
  6. [C0以外,也可以尝试传统模型,例如SVMLogistic RegressionNV等。如果您有大量数据点,则可以尝试深度学习模型。

© www.soinside.com 2019 - 2024. All rights reserved.