好吧,我正在做一个情绪分析分类器,我有三个类/标签,积极的,中性的和消极的。我的培训数据的形状是(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
,它没有显示任何{
问题是您使用的predict_proba方法用于二进制分类。在多重分类中,它给出了每个类别的概率。在
不能使用此命令:
进一步的信息你可以看这个类似的帖子:Multiclass Classification and probability prediction
更新
我把所有的预测函数都改成了这一行-
^{pr2}$他说,以前我用的是二进制分类预测系统。现在这个
predict
可以对所有3个标签进行分类。所以,我的准确度和记忆力现在都很好。在相关问题 更多 >
编程相关推荐