python - 分类报告 - 精度和 F 分数定义不明确

标签 python machine-learning scikit-learn classification

我从 sklearn.metrics 导入了 classification_report,当我输入我的 np.arrays 作为参数时,我收到以下错误:

/usr/local/lib/python3.6/dist-packages/sklearn/metrics/classification.py:1135: 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) /usr/local/lib/python3.6/dist-packages/sklearn/metrics/classification.py:1137: UndefinedMetricWarning: Recall and F-score are ill-defined and being set to 0.0 in labels with no true samples. 'recall', 'true', average, 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)

When I was not using np.array in the past it worked just fine

非常怀疑,因为在上面的示例中我使用了简单的 Python 列表,而不是 Numpy 数组...

关于python - 分类报告 - 精度和 F 分数定义不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54150147/

相关文章:

python - 将列表放入字典中

python - Django ORM 使用子查询进行注释

python - 如何使用 Selenium 向 ChromeDriver 提交 HTTP 身份验证(Flask BASIC Auth)

r - R 中的在线机器学习

python - LogisticRegression.predict_proba 的 scikit-learn 返回值

python - 我认为像 frozenset 和 tuple 这样的不可变类型实际上并没有被复制。这个叫什么?它有什么影响吗?

python - 为了保护 MxNet 中的某些权重不被训练器更改,推荐的操作是什么?

r - 我应该如何解决这个多分类问题?

scikit-learn - PCA 与 sklearn 差异

python - 在 Python 中执行潜在类分析的正确方法是什么?