分类报告-精度和F分数定义不正确
问题内容:
我从sklearn.metrics导入了classification_report,当我输入我的np.arrays
参数时,出现以下错误:
/usr/local/lib/python3.6/dist-
packages/sklearn/metrics/classification.py:1135:UndefinedMetricWarning:精度和F分数定义不明确,在没有可预测样本的标签中设置为0.0。’precision’,’predicted’,average,warn_for)/usr/local/lib/python3.6/dist-
packages/sklearn/metrics/classification.py:1137:UndefinedMetricWarning:回忆和F分数定义不清并且被在没有真实样本的标签中设置为0.0。“
recall”,“ true”,平均值,warn_for)
这是代码:
svclassifier_polynomial = SVC(kernel = 'poly', degree = 7, C = 5)
svclassifier_polynomial.fit(X_train, y_train)
y_pred = svclassifier_polynomial.predict(X_test)
poly = classification_report(y_test, y_pred)
当我过去不使用np.array时,它工作得很好,关于如何纠正此问题的任何想法?
问题答案:
这不是错误,只是 警告 您并非所有标签都包含在中y_pred
,即y_test
您的分类器无法预测某些标签。
这是一个简单的可复制示例:
from sklearn.metrics import precision_score, f1_score, classification_report
y_true = [0, 1, 2, 0, 1, 2] # 3-class problem
y_pred = [0, 0, 1, 0, 0, 1] # we never predict '2'
precision_score(y_true, y_pred, average='macro')
[...] UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples.
'precision', 'predicted', average, warn_for)
0.16666666666666666
precision_score(y_true, y_pred, average='micro') # no warning
0.3333333333333333
precision_score(y_true, y_pred, average=None)
[...] UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples.
'precision', 'predicted', average, warn_for)
array([0.5, 0. , 0. ])
会产生完全相同的警告f1_score
(未显示)。
实际上,这只是警告您,在中classification_report
,没有预测样本的标签的相应值(在此处2
)将设置为0:
print(classification_report(y_true, y_pred))
precision recall f1-score support
0 0.50 1.00 0.67 2
1 0.00 0.00 0.00 2
2 0.00 0.00 0.00 2
micro avg 0.33 0.33 0.33 6
macro avg 0.17 0.33 0.22 6
weighted avg 0.17 0.33 0.22 6
[...] UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples.
'precision', 'predicted', average, warn_for)
当我过去不使用np.array时,它工作得很好
高度怀疑,因为在上面的示例中,我使用了简单的Python列表,而不是Numpy数组…