假设输出节点是三个, 即对应的是一个三分类问题。假设有10条数据,输出层的结果如下表所示
预测 | 0 | 1 | 2 | 实际标签 |
---|---|---|---|---|
1 | 3.2901842e-04 | 6.2009683e-05 | 9.9960905e-01 | 2 |
2 | 9.3300034e-05 | 6.3389372e-05 | 9.9984324e-01 | 2 |
3 | 1.8921893e-04 | 1.3000969e-04 | 9.9968076e-01] | 0 |
4 | 7.2724116e-04 | 3.1397035e-04 | 9.9895883e-01 | 0 |
5 | 1.7774174e-03 | 5.5241789e-04 | 9.9767011e-01 | 0 |
6 | 1.5353756e-03 | 3.8222148e-04 | 9.9808240e-01 | 2 |
7 | 5.0105453e-03 | 8.7840611e-04 | 9.9411100e-01 | 2 |
8 | 1.1946440e-04 | 1.0893926e-04 | 9.9977165e-01 | 0 |
9 | 4.0907355e-04 | 2.3722800e-04 | 9.9935371e-01 | 0 |
10 | 5.0522230e-04 | 3.5394888e-04 | 9.9914086e-01 | 2 |
来看下k取不同值时,percision_at_k()的结果
tf.metrics.precision_at_k(labels=label_ids, predictions=logits,k=?) | k=1 | k =2 | k=3 |
---|---|---|---|
结果 | 0.50 | 0.45 | 0.33 |
计算 | 第1,2,6,7,10概率最大的标签是2与真实标签一致,所以tp=5.其他的几条虽然最大标签也为2,但与真实标签不一致, fp=5 | 1-10每一条的数据取概率最大的两个标签,正确的只有一个,另一个是不正确的。tp=10, fp=10。 | 同k=2, 每条数据的预测值都是正确的只有一个标签, 错误的是两个。故tp=10, fp=20 |
最终 | p k = 1 = t p t p + f p = 5 5 + 5 p_{k=1}=\frac{tp}{tp+fp}=\frac5{5+5} p |