【发布时间】:2019-12-15 07:13:09
【问题描述】:
我正在使用 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,因为要为每个班级单独打分。另外,我不确定预测是否正确,因为我是为二进制分类编写的?你能帮我调试一下,让它变得更好。提前致谢。
【问题讨论】:
-
检查你的预测结果(测试数据),看起来没有一个数据点被预测为第三类
-
@SincoleBrans 这已经在答案中指出,并由其中的 cmets 中的 OP 确认。
标签: python machine-learning scikit-learn svm multiclass-classification