为啥情绪分析中的准确性分数为零

Posted

技术标签:

【中文标题】为啥情绪分析中的准确性分数为零【英文标题】:Why the Accuracy Score is Zero in Sentiment Analysis为什么情绪分析中的准确性分数为零 【发布时间】:2021-06-30 10:19:41 【问题描述】:

训练数据包含大约 20000 行标题:id, sentiment, text

我将情绪映射如下:

df.sentiment= df.sentiment.map("Neutral": 1, "Negative":0, "Positive":2 )

在我拥有clean text pre-processing 之后,我使用Logistic Regression 如下:

XTR, XTST, YTR, YTST= train_test_split(df.text, df.sentiment, test_size =.2, random_state=100)
lg= LogisticRegression(max_iter=20000)
pp = make_pipeline(TfidfVectorizer(),lg)
pg= 'logisticregression__C': [0.01, 0.1, 1, 10, 100]
m= GridSearchCV(pipe, pg, cv=5)
m.fit(XTR,YTR)

pr= m.predict(XTST)
print(f"Accuracy: accuracy_score(YTST, pr):.2f")
print(classification_report(YTST, pr))

Output 如下:

    Accuracy 0.59
              precision    recall  f1-score   support

           0       0.00      0.00      0.00       686
           1       0.59      1.00      0.74      2374
           2       0.00      0.00      0.00       940

    accuracy                           0.59      4000
   macro avg       0.20      0.33      0.25      4000
weighted avg       0.35      0.59      0.44      4000

为什么 Negative: 0Positive: 2 都得到 0.00 ?请帮忙

【问题讨论】:

【参考方案1】:

发生这种情况是因为逻辑回归模型将每一行预测为中性。

所以中性精度 = 2374/4000 = 0.59

正数精度 = 0/4000 = 0

负数精度 = 0/4000 = 0

此外,您在 X_train 上取出预测,而您必须在 X_test 上进行预测

pr= m.predict(XTS)
print(f"Accuracy: accuracy_score(YTST, pr):.2f")
print(classification_report(YTST, pr))

【讨论】:

对如何修复有任何帮助吗? 为什么要这样做?请问我的错误是什么? 尝试一些其他模型,因为逻辑回归根本无法预测情绪。尝试基于树的模型,看看是否适合您。 当我在不同的数据集上使用它时,它工作得很好,但是当我制作更高的数据集时它没有工作?有什么关系吗?如果你能帮忙解决,我很感激。我认为错误在参数GridSearchCV中的pg which is param_grid 没有问题。您问题的原始答案是该模型将所有内容预测为中性,因此负数和正数的准确度得分为 0。您唯一能做的就是优化逻辑回归模型或训练新模型,例如基于树的模型。谢谢

以上是关于为啥情绪分析中的准确性分数为零的主要内容,如果未能解决你的问题,请参考以下文章

混淆矩阵 - 测试情绪分析模型

情绪分析词典

对关键字的情绪

Python NLTK:SyntaxError:文件中的非 ASCII 字符“\xc3”(情绪分析-NLP)

csharp 镜子亭中的面部情绪表达训练和分析

使用java在文本文件中查找字符串的问题