1 TP、TN、FP、FN
TP、TN、FP、FN中第一个字母表示分类器识别结果是否正确,正确用True的首字母T表示,错误用False的首字母F表示。第二个字母表示分类器的判定结果,P表示分类器判定为正样本,N表示分类器判定为负样本。所以:
TP:分类器识别正确,分类器认为该样本为正样本;
TN:分类器识别正确,分类器认为该样本为负样本;
FP:分类器识别结果错误,分类器认为该样本是正样本;所以实际上该样本是负样本;
FN:分类器识别结果错误,分类器认为该样本是负样本;所以实际上该样本是正样本;
项目 | 真实_1 | 真实_0 |
---|---|---|
预测_1 |
TP |
FP |
预测_0 |
FN |
TN |
2 APCER/BPCER/ACER/FRR/FAR/HTER
-
Attack Presentation Classification Error Rate[
APCER
] :
FP
/ (
TN
+
FP
) -
Bona Fide Presentation Classification Error Rate[
BPCER
] :
FN
/ (
TP
+
FN
) -
Average Classification Error Rate[
ACER
] : (APCER + BPCER) / 2.0 -
False Rejection Rate[
FRR
] :
FN
/ (
TN
+
FN
) -
False Acceptance Rate[
FAR
] :
FP
/ (
TP
+
FP
) -
Half Total Error Rate [
HTER
] : (FAR + FNR) / 2.0
3 roc_curve-副本,别看
fpr, tpr, threshold = roc_curve(test_labels, test_scores, pos_label=1)
test_labels
= [[1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0…] (list:595)
test_labels为真实的样本标签
test_scores
= [0.863, 0.999, 0.999, 0.979, 0.998, 0.720, 0.996, 0.968, 0.952, 0.980, 0.812, 0.933, 0.895, 0.924, 0.982…] (list:595)
test_scores 对每个样本的预测分数
pos_label
= 1
pos_label正样本的标签。
说明test_label = 1是真实人脸。
roc_curve() 函数有3个返回值:
fpr:False positive rate。
tpr:True positive rate。
thresholds
在本例子中,
fpr
= [0. 0.002 0.145 0.149 0.170 0.174, 0.231 0.235 0.250 0.254 0.265 0.269, 0.28 0.284 0.517 0.517 0.555…] (ndarray(80,))
tpr
= [0. 0. 0. 0. 0. 0., 0. 0. 0. 0. 0. 0., 0. 0. 0. 0.00833 0.0083 0.0166, 0.0166 0.025 0.025 0.033 0.033 0.0416, …](ndarray(80,))
thresholds
= [2. 1. 0.999 0.999 0.998 0.998, 0.998 0.998 0.997 0.997 0.997 0.9972, 0.9969 0.9969 0.9828 0.9827 0.9781 0.9781, 0.9780 …](ndarray(80,))
其中,thresholds就是原来的test_scores从高到低排序。每个阈值对应一个 fpr 和 tpr。
例如,当thresholds = 2时
test_scores | 预测(2为阈值) | 真实(看相应的test_labels) |
---|---|---|
0.863 | <2 预测为负样本 | 1 真实为正样本 |
0.999 | <2 预测为负样本 | 0 真实为负样本 |
0.999 | <2 预测为负样本 | 0 真实为负样本 |
0.979 | <2 预测为负样本 | 0 真实为负样本 |
… | … | … |
则fpr = 0 ,tpr = 0
例如,当thresholds = 0.9781时
test_scores | 预测(0.9781为阈值) | 真实(看相应的test_labels) |
---|---|---|
0.863 | <0.9781 预测为负样本 | 1 真实为正样本 |
0.999 | >0.9781 预测为正样本 | 0 真实为负样本 |
0.999 | >0.9781 预测为正样本 | 0 真实为负样本 |
0.979 | >0.9781 预测为正样本 | 0 真实为负样本 |
… | … | … |
则fpr = 0 ,tpr = 0
3 roc_curve
fpr, tpr, threshold = roc_curve(test_labels, test_scores, pos_label=1)
test_labels
= [[1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0…] (list:595)
test_labels为真实的样本标签
test_scores
= [0.1361, 0.0002, 0.0001, 0.0208, 0.0013, 0.2790, 0.0031, 0.0316, 0.0478, 0.0196, 0.1872, 0.066, 0.1046,…](list:595)
test_scores 对每个样本的预测分数
pos_label
= 1
pos_label正样本的标签。
说明test_label = 1是真实人脸。
roc_curve() 函数有3个返回值:
fpr:False positive rate。
tpr:True positive rate。
thresholds
在本例子中,
fpr
= [[0. 0. 0. 0.0021 0.0021 0.0042, 0.0042 0.0063 0.0063 0.0084 0.0084 0.0105, 0.0105 0.0126 0.0126 0.01473684 0.0147 0.0189, …] (ndarray(80,))
tpr
= [[0. 0.00833 0.4333 0.4333 0.4916 0.4916, 0.55 0.55 0.6166 0.6166 0.65 0.65, 0.683 0.683 0.691 0.69 0.7 0.7, …](ndarray(80,))
thresholds
= [[1.3351 0.3351 0.21871 0.2175, 0.2071 0.2006 0.19257 0.19230, 0.17420 0.17203 0.1659 0.16589, 0.1591 0.1580 0.15701 0.15529, …](ndarray(80,))
tpr = 预正实正/所有实正
fpr = 预正实负/所有实负
其中,thresholds就是原来的test_scores从高到低排序。每个阈值对应一个 fpr 和 tpr。
例如,当thresholds = 1.3351时
test_scores | 预测(1.3351为阈值) | 真实(看相应的test_labels) |
---|---|---|
0.1361 | <1.3351 预测为负样本 | 1 真实为正样本 |
0.0002 | <1.3351 预测为负样本 | 0 真实为负样本 |
0.0001 | <1.3351 预测为负样本 | 0 真实为负样本 |
0.0208 | <1.3351 预测为负样本 | 0 真实为负样本 |
… | … | … |
则fpr = 0 ,tpr = 0
例如,当thresholds = 0.1012时
test_scores | 预测(0.1012为阈值) | 真实(看相应的test_labels) |
---|---|---|
0.1361 | >0.1012预测为正样本 | 1 真实为正样本 |
0.0002 | <0.1012预测为负样本 | 0 真实为负样本 |
0.0001 | <0.1012预测为负样本 | 0 真实为负样本 |
0.0208 | <0.1012 预测为负样本 | 0 真实为负样本 |
… | … | … |
就以上这四个来说,fp = 0, tp = 1, tpr = 1/1 = 1
TPR越大,则表示挑出的越有可能(是正确的);FPR越大,则表示越不可能(在挑选过程中,再挑新的出来,即再挑认为是正确的出来,越有可能挑
的是错误的)。
min|1-(tpr+fpr)| 这两个值相加越趋近于1,说明结果越好