如何用支持向量机预测多类情感分析问题中的所有类?

2024-04-25 06:37:54 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,我正在做一个情绪分析分类器,我有三个类/标签,积极的,中性的和消极的。我的培训数据的形状是(14640,15),其中

negative    9178
neutral     3099
positive    2363

我已经对数据进行了预处理,使其标准化,并将单词包矢量化技术应用到twitter的文本中,使其可供模型使用,模型的大小为(14640,1000)。因为Y表示标签是文本形式的,所以我应用了LabelEncoder,这样我就可以在一行中生成它。像这样-

^{pr2}$

我就是这样分割数据集的-

X_train, X_test, Y_train, Y_test = train_test_split(bow, Y, test_size=0.3, stratify=Y, random_state=42)
print(X_train.shape,Y_train.shape)
print(X_test.shape,Y_test.shape)

out:(10248, 1000) (10248,)
(4392, 1000) (4392,)

stratify=y将使不平衡的数据成为适当的加权形式。在分类器部分,我使用了支持向量机-

svc = svm.SVC(kernel='linear', C=1, probability=True, class_weight='balanced').fit(X_train, Y_train) 
prediction = svc.predict_proba(X_test) 
prediction_int = prediction[:,1] >= 0.3 
prediction_int = prediction_int.astype(np.int) 
print(prediction_int)
print('Precision score: ', precision_score(Y_test, prediction_int, average=None))
print('Accuracy Score: ', accuracy_score(Y_test, prediction_int))

out:[0 0 0 ... 1 0 0]
Precision score:  [0.74185137 0.50075529 0.        ]
Accuracy Score:  0.6691712204007286
/usr/local/lib/python3.6/dist-packages/sklearn/metrics/classification.py:1437: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples.
  'precision', 'predicted', average, warn_for)

@desertnaut帮我做了很多决定,实际问题是什么,最后,我看到分类器无法预测第三类。您可以看到我已经打印出prediction_int,它没有显示任何{}索引。而且,它离实际的标签还差得很远。我担心在分类过程中是否有任何错误发生。这个分类器,我为我的二元分类,我想我不需要改变它为多类分类。你们谁能帮我解决这个问题吗?在


Tags: 数据模型test文本分类器分类train标签
1条回答
网友
1楼 · 发布于 2024-04-25 06:37:54

问题是您使用的predict_proba方法用于二进制分类。在多重分类中,它给出了每个类别的概率。在

不能使用此命令:

prediction_int = prediction[:,1] >= 0.3 

进一步的信息你可以看这个类似的帖子:Multiclass Classification and probability prediction

更新

我把所有的预测函数都改成了这一行-

^{pr2}$

他说,以前我用的是二进制分类预测系统。现在这个predict可以对所有3个标签进行分类。所以,我的准确度和记忆力现在都很好。在

相关问题 更多 >