2016-02-03 26 views
6

Tôi không thể tìm ra nếu tôi đã thiết lập vấn đề phân loại nhị phân của mình một cách chính xác. Tôi đã gán nhãn cho lớp dương 1 và âm 0. Tuy nhiên, tôi hiểu rằng theo mặc định, scikit-learn sử dụng lớp 0 là lớp tích cực trong ma trận nhầm lẫn của nó (do đó ngược lại cách tôi thiết lập nó). Điều này gây nhầm lẫn cho tôi. Là hàng trên cùng, trong cài đặt mặc định của học viên có scikit, lớp tích cực hay tiêu cực? Cho phép giả thiết đầu ra ma trận nhầm lẫn:Ma trận nhầm lẫn tìm hiểu Scikit

confusion_matrix(y_test, preds) 
[ [30 5] 
    [2 42] ] 

Làm thế nào nó trông giống như trong ma trận nhầm lẫn? Trường hợp thực tế các hàng hoặc các cột trong scikit-tìm hiểu?

  prediction      prediction 
      0  1       1  0 
     ----- -----      ----- ----- 
     0 | TN | FP  (OR)   1 | TP | FP 
actual ----- -----    actual ----- ----- 
     1 | FN | TP      0 | FN | TN 

Trả lời

10

scikit học các loại nhãn trong thứ tự tăng dần, do đó 0 của những đầu cột/hàng và 1 nhân là những thứ hai một

>>> from sklearn.metrics import confusion_matrix as cm 
>>> y_test = [1, 0, 0] 
>>> y_pred = [1, 0, 0] 
>>> cm(y_test, y_pred) 
array([[2, 0], 
     [0, 1]]) 
>>> y_pred = [4, 0, 0] 
>>> y_test = [4, 0, 0] 
>>> cm(y_test, y_pred) 
array([[2, 0], 
     [0, 1]]) 
>>> y_test = [-2, 0, 0] 
>>> y_pred = [-2, 0, 0] 
>>> cm(y_test, y_pred) 
array([[1, 0], 
     [0, 2]]) 
>>> 

này được viết trong docs:

nhãn: mảng, hình dạng = [n_classes], tùy chọn Danh sách nhãn để lập chỉ mục ma trận. Điều này có thể được sử dụng để sắp xếp lại hoặc chọn một tập hợp con các nhãn. Nếu không có mã nào được cho là, những xuất hiện ít nhất một lần trong y_true hoặc y_pred là được sử dụng theo thứ tự được sắp xếp.

Vì vậy bạn có thể thay đổi hành vi này bằng cách cung cấp nhãn để confusion_matrix gọi

>>> y_test = [1, 0, 0] 
>>> y_pred = [1, 0, 0] 
>>> cm(y_pred, y_pred) 
array([[2, 0], 
     [0, 1]]) 
>>> cm(y_pred, y_pred, labels=[1, 0]) 
array([[1, 0], 
     [0, 2]]) 

Và thực tế/dự đoán được oredered giống như trong hình ảnh của bạn - dự đoán là trong các cột và giá trị thực tế trong hàng

>>> y_test = [5, 5, 5, 0, 0, 0] 
>>> y_pred = [5, 0, 0, 0, 0, 0] 
>>> cm(y_test, y_pred) 
array([[3, 0], 
     [2, 1]]) 
  • đúng: 0, dự đoán: 0 (giá trị: 3, vị trí [0, 0])
  • đúng: 5, dự đoán: 0 (giá trị: 2, vị trí [1, 0])
  • đúng: 0, dự đoán: 5 (giá trị: 0, vị trí [0, 1])
  • true: 5, expected : 5 (giá trị: 1, vị trí [1, 1])
+0

Bạn vừa lưu tôi rất nhiều thời gian. Cảm ơn bạn. – Chuck

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