我不确定这是否是正确的位置,但是我的测试准确度始终约为.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难民”
您为什么使用naive.score
?我认为这是copy-paste
错误。您可以按照以下几个步骤操作。
Cleaning
数据集是数据科学中的必然过程。ngram_range, max_df, min_df, max_features
或TfidfVectorizer来修饰文字时,请使用CountVectorizer等参数。您也可以尝试使用Word2Vec嵌入。alpha, penalty
或GridSearch对RandomizedSearchCV和其他变量进行超参数调整。确保您当前为CV
。请参阅文档以获取更多信息imbalanced
,则尝试使用其他矩阵,例如log-loss, precision, recall, f1-score, etc
。有关更多信息,请参考this。>overfitted
也不是underfitted
。[C0以外,也可以尝试传统模型,例如SVM
,Logistic Regression
,NV
等。如果您有大量数据点,则可以尝试深度学习模型。