我正在进行情感分析分类,并且正在使用Scikit-learn进行。它具有3个标签,正,中性和负性。我的训练数据的形状(14640, 15)
,其中
negative 9178
neutral 3099
positive 2363
我已经对数据进行了预处理,并将bag-of-words
单词矢量化技术应用于twitter的文本,因为它还有许多其他属性,其大小为(14640, 1000)
。作为Y,表示标签为文本形式,因此我将LabelEncoder应用于它。这就是我拆分数据集的方式-
X_train, X_test, Y_train, Y_test = train_test_split(bow, Y, test_size=0.3, random_state=42)
print(X_train.shape,Y_train.shape)
print(X_test.shape,Y_test.shape)
out: (10248, 1000) (10248,)
(4392, 1000) (4392,)
这是我的分类器
svc = svm.SVC(kernel='linear', C=1, probability=True).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('Precision score: ', precision_score(Y_test, prediction_int, average=None))
print('Accuracy Score: ', accuracy_score(Y_test, prediction_int))
out:Precision score: [0.73980398 0.48169243 0. ]
Accuracy Score: 0.6675774134790529
/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)
现在我不确定为什么精度得分中的第三个是空白?我申请了average=None
,因为要为每个班级单独分配一个精度分数。另外,我不确定该预测是否正确,因为我是针对二进制分类编写的?您能帮我调试一下使其更好吗?提前致谢。
如警告所述:
UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples.
似乎您的预测中缺少您的3个班级之一(即您从未预测过);您可以轻松检查是否是这种情况 prediction_int
set(Y_test) - set(prediction_int)
{}
如果不是这种情况,则应为空集。
如果确实如此,并且上述操作给出{1}
或{2}
,则最可能的原因是您的数据集不平衡(您有更多的negative
样本),并且您不要求分层拆分;修改train_test_split
为
X_train, X_test, Y_train, Y_test = train_test_split(bow, Y, test_size=0.3, stratify=Y, random_state=42)
然后再试一次。
更新(注释后):
事实证明,您遇到了类不平衡问题(而不是编码问题),这阻止了分类器成功预测第3类(positive
)。类不平衡本身就是一个巨大的子主题,并且提出了几种补救措施。尽管更详细的讨论可以说超出了单个SO线程的范围,但是您应该尝试的(在上述建议之上)第一件事就是class_weight='balanced'
在分类器的定义中使用参数,即:
svc = svm.SVC(kernel='linear', C=1, probability=True, class_weight='balanced').fit(X_train, Y_train)
有关更多选项,请查看专用的不平衡学习Python库(scikit-learn-contrib项目的一部分)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句