sklearns.metrics.classification_report和sklearns.metrics.f1_score中每个F1分数值与二进制混淆矩阵之间的差异

时间:2015-05-28 21:18:25

标签: python scikit-learn confusion-matrix

我有(true)布尔值和预测的布尔值,如:

y_true = np.array([True, True, False, False, False, True, False, True, True,
       False, True, False, False, False, False, False, True, False,
        True, True, True, True, False, False, False, True, False,
        True, False, False, False, False, True, True, False, False,
       False, True, True, True, True, False, False, False, False,
        True, False, False, False, False, False, False, False, False,
       False, True, True, False, True, False, True, True, True,
       False, False, True, False, True, False, False, True, False,
       False, False, False, False, False, False, False, True, False,
        True, True, True, True, False, False, True, False, True,
        True, False, True, False, True, False, False, True, True,
       False, False, True, True, False, False, False, False, False,
       False, True, True, False])

y_pred = np.array([False, False, False, False, False, True, False, False, True,
       False, True, False, False, False, False, False, False, False,
        True, True, True, True, False, False, False, False, False,
       False, False, False, False, False, True, False, False, False,
       False, True, False, False, False, False, False, False, False,
        True, False, False, False, False, False, False, False, False,
       False, True, False, False, False, False, False, False, False,
       False, False, True, False, False, False, False, True, False,
       False, False, False, False, False, False, False, True, False,
       False, True, False, False, False, False, True, False, True,
        True, False, False, False, True, False, False, True, True,
       False, False, True, True, False, False, False, False, False,
       False, True, False, False])

我使用以下导入

from sklearn.metrics import f1_score, classification_report, confusion_matrix

混淆矩阵看起来像:

print(confusion_matrix(y_true, y_pred))

[[67  0]
 [21 24]]

我正在做:

print("f1_score: %f" % f1_score(y_true, y_pred))
print(classification_report(y_true, y_pred))

我明白了:

f1_score: 0.695652
             precision    recall  f1-score   support

      False       0.76      1.00      0.86        67
       True       1.00      0.53      0.70        45

avg / total       0.86      0.81      0.80       112

我看到f1-score0.6956520.860.700.80)的4个值。我想知道每个值之间的差异以及它们的计算方式。

1 个答案:

答案 0 :(得分:1)

我认为0.6956520.70是一回事。在scikit-learn中f1_score documentation解释了在默认模式下:F1得分在二进制分类中给出了positive class

此外,您可以通过F1分数的表达轻松达到0.86的分数。 F1分数的表述是

F1 = 2 * (precision * recall) / (precision + recall)

编辑:

混淆矩阵是这样的:

                    Prediction
                    FALSE | TRUE
True Value  FALSE    67      0
            TRUE     21      24

67 = True Negative, 0 = False Negative
21 = False Positive, 24  = True Positive
  

在找到平均值/总数时,公式使用您所说的这个值   评论。