2016-01-13 25 views
34

Tôi chạy chương trình python gọi các phương thức của sklearn.metrics để tính toán độ chính xác và điểm F1. Đây là kết quả khi không có mẫu dự đoán:Tại sao scikitlearn cho biết điểm số F1 không được xác định với FN lớn hơn 0?

/xxx/py2-scikit-learn/0.15.2-comp6/lib/python2.6/site-packages/sklearn/metr\ 
ics/metrics.py:1771: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 due to no predicted samples. 
    'precision', 'predicted', average, warn_for) 

/xxx/py2-scikit-learn/0.15.2-comp6/lib/python2.6/site-packages/sklearn/metr\ 
ics/metrics.py:1771: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 due to no predicted samples. 
    'precision', 'predicted', average, warn_for) 

Khi không có mẫu dự đoán, nó có nghĩa là TP + FP là 0, vì vậy

  • chính xác (định nghĩa là TP/(TP + FP) là 0/0, không được xác định,
  • Điểm F1 (được định nghĩa là 2TP/(2TP + FP + FN)) là 0 nếu FN không bằng 0.

Trong trường hợp của tôi, sklearn.metrics cũng trả về độ chính xác là 0,8 và gọi lại là 0. Vì vậy, FN không phải là 0.

Nhưng tại sao scikilearn cho biết F1 không xác định?

Định nghĩa F1 được sử dụng bởi Scikilearn là gì?

Trả lời

36

https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/metrics/classification.py

F1 = 2 * (chính xác * thu hồi)/(độ chính xác + thu hồi)

chính xác = TP/(TP + FP) như bạn vừa nói nếu dự đoán doesn 't dự đoán lớp tích cực ở tất cả - chính xác là 0.

thu hồi = TP/(TP + FN), trong trường hợp nếu dự đoán không dự đoán lớp tích cực - TP là 0 - 0. thu hồi là

Vì vậy, bây giờ bạn đang chia 0/0.

16

Precision, Recall, F1-điểmĐộ chính xác tính

- In a given image of Dogs and Cats 

    * Total Dogs - 12 D = 12 
    * Total Cats - 8 C = 8 

- Computer program predicts 

    * Dogs - 8 
    5 are actually Dogs T.P = 5 
    3 are not    F.P = 3  
    * Cats - 12 
    6 are actually Cats T.N = 6 
    6 are not    F.N = 6 

- Calculation 

    * Precision = T.P/(T.P + F.P) => 5/(5 + 3) 
    * Recall = T.P/D   => 5/12 

    * F1 = 2 * (Precision * Recall)/(Precision + Recall) 
    * F1 = 0.5 

    * Accuracy = T.P + T.N/P + N 
    * Accuracy = 0.55 

Wikipedia reference

Các vấn đề liên quan