我知道机器学习中精确率和召回率指标之间的区别。一种针对误报进行优化,另一种针对误报进行优化。在统计学中,它被称为优化 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/