python - 了解二元分类器的精度和召回结果

标签 python machine-learning precision-recall

我知道机器学习中精确率和召回率指标之间的区别。一种针对误报进行优化,另一种针对误报进行优化。在统计学中,它被称为优化 I 类或 II 类错误。

但是,我很困惑在什么情况下可以得到完全相反的精度和召回率?就像精度 =1 和召回率 =0 一样?

让我迭代一下:

precision = true positives / (true positives + false positives)

recall = true positives / (true positives + false negatives)

这是混淆矩阵

  predicted
            (+)   (-)
            ---------
       (+) | TP | FN |
actual      ---------
       (-) | FP | TN |
            ---------

现在,如果正 (1) 类的分类器的精度 =1,则意味着没有 FP,并且所有预测标签都是 TP。

那么对于同一个正类,Recall怎么会是0呢?如果已经有一些 TP 被预测,事实上根据 Precision,所有预测的都只是 TP,那么对于 Recall,我们的分子将非零,那么在什么情况下对于相同的分类器正类可以得到 Recall 0?

为了提供一些背景信息,我针对二元分类问题运行了逻辑回归分类器。我有一些包含 774 个特征的 23K 训练数据。 770 个特征是二元变量或虚拟变量。

这是我的类(class)标签的分布:

1    20429
0    12559

这是对 25 个超参数值组合进行 5 倍网格搜索后的混淆矩阵和准确度值。

The mean train scores are [ 0.66883049  0.54314532  0.67008959  0.63187226  0.63100366  0.53165968
  0.54131812  0.55507725  0.5578254   0.57663273  0.57247462  0.57230056
  0.54402055  0.5762753   0.50925733  0.45781882  0.39366017  0.39037968
  0.3919818   0.38878762  0.39784982  0.39506755  0.48238147  0.38932944
  0.39801223]

The mean validation scores are [ 0.66445801  0.54107661  0.66878871  0.63184791  0.6305487   0.5291239
  0.53899788  0.55324585  0.55822615  0.57784418  0.57269066  0.57312373
  0.54536399  0.57593868  0.50790351  0.45727773  0.39318349  0.38906933
  0.39214413  0.38924256  0.39794725  0.39461262  0.4827855   0.38811658
  0.39812048]

The score on held out data is: 0.6687887055562773
 Hyper-Parameters for Best Score : {'alpha': 0.0001, 'l1_ratio': 0.45}

The accuracy of sgd on test data is: 0.37526523188845107

Classification Metrics for sgd :
             precision    recall  f1-score   support

          0       0.38      1.00      0.55      3712
          1       1.00      0.00      0.00      6185

avg / total       0.77      0.38      0.21      9897

最佳答案

您发布的输出四舍五入到小数点后两位,因此您的精度可能 = 1,召回率等于 0.001。例如,如果您只有一个案例(正确)预测为 1,而其他所有案例预测为 0,则可能会发生这种情况。因此,您的误报率非常高,您的召回率为 1/6185,接近 0。

关于python - 了解二元分类器的精度和召回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44360924/

相关文章:

python - 在 Python 中用相同的列表减去列表中的列表

python - 评估Python中字串的辅音/元音组成

python - 模型使用 SGD 进行学习,但不使用 Adam

machine-learning - 如何解释几乎完美的准确度和 AUC-ROC,但 f1 分数、精确度和召回率为零

algorithm - 当我有预测和地面实况文件(原始图表)时,如何使用 spark 和 scala 计算 TP、TN、FP 和 FN?

python - 如果在分配时将变量添加到集合中,为什么 Python 会分配 None

python - numpy View 如何知道它引用的值在原始 numpy 数组中的位置?

machine-learning - 噪声数据的学习曲线

machine-learning - 基于相似度的向量系数

machine-learning - ROC曲线和精确召回曲线