Ma trận nhầm lẫn 3x3 Python

Cách tiếp cận ở đây là ghép nối các lớp duy nhất được tìm thấy trong vectơ actual thành danh sách 2 chiều. Từ đó, chúng tôi chỉ cần lặp qua các vectơ actual

cm = confusionmatrix[
    [1, 1, 2, 0, 1, 1, 2, 0, 0, 1], # actual
    [0, 1, 1, 0, 2, 1, 2, 2, 0, 2]  # predicted
]

# And The Output
print[cm]
[[2, 1, 0], [0, 2, 1], [1, 2, 1]]
1 đã nén và điền số lượng bằng cách sử dụng các chỉ số để truy cập các vị trí ma trận

Cách sử dụng

cm = confusionmatrix[
    [1, 1, 2, 0, 1, 1, 2, 0, 0, 1], # actual
    [0, 1, 1, 0, 2, 1, 2, 2, 0, 2]  # predicted
]

# And The Output
print[cm]
[[2, 1, 0], [0, 2, 1], [1, 2, 1]]

Ghi chú. lớp actual nằm dọc theo cột và lớp

cm = confusionmatrix[
    [1, 1, 2, 0, 1, 1, 2, 0, 0, 1], # actual
    [0, 1, 1, 0, 2, 1, 2, 2, 0, 2]  # predicted
]

# And The Output
print[cm]
[[2, 1, 0], [0, 2, 1], [1, 2, 1]]
1 nằm dọc theo hàng

# Actual
# 0  1  2
  #  #  #   
[[2, 1, 0], # 0
 [0, 2, 1], # 1  Predicted
 [1, 2, 1]] # 2

Tên lớp có thể là chuỗi hoặc số nguyên

cm = confusionmatrix[
    ["B", "B", "C", "A", "B", "B", "C", "A", "A", "B"], # actual
    ["A", "B", "B", "A", "C", "B", "C", "C", "A", "C"]  # predicted
]

# And The Output
print[cm]
[[2, 1, 0], [0, 2, 1], [1, 2, 1]]

Bạn cũng có thể trả về ma trận với tỷ lệ [Chuẩn hóa]

cm = confusionmatrix[
    ["B", "B", "C", "A", "B", "B", "C", "A", "A", "B"], # actual
    ["A", "B", "B", "A", "C", "B", "C", "C", "A", "C"], # predicted
    normalize = True
]

# And The Output
print[cm]
[[0.2, 0.1, 0.0], [0.0, 0.2, 0.1], [0.1, 0.2, 0.1]]

Một giải pháp mạnh mẽ hơn

Kể từ khi viết bài đăng này, tôi đã cập nhật triển khai thư viện của mình thành một lớp sử dụng biểu diễn ma trận nhầm lẫn bên trong để tính toán số liệu thống kê, ngoài việc in đẹp ma trận nhầm lẫn. Xem Gist này

Trong các chương trước của hướng dẫn Học máy của chúng tôi [Mạng thần kinh với Python và Numpy và Mạng thần kinh từ đầu ], chúng tôi đã triển khai nhiều thuật toán khác nhau, nhưng chúng tôi đã không đo lường đúng chất lượng đầu ra. Lý do chính là chúng tôi đã sử dụng các bộ dữ liệu rất đơn giản và nhỏ để tìm hiểu và kiểm tra. Trong chương Mạng nơ-ron. Thử nghiệm với MNIST, chúng tôi sẽ làm việc với bộ dữ liệu lớn và mười lớp, vì vậy chúng tôi cần các công cụ đánh giá phù hợp. Chúng tôi sẽ giới thiệu trong chương này các khái niệm về ma trận nhầm lẫn

Ma trận nhầm lẫn là một ma trận [bảng] có thể được sử dụng để đo lường hiệu suất của thuật toán học máy, thường là thuật toán học có giám sát. Mỗi hàng của ma trận nhầm lẫn biểu thị các thể hiện của một lớp thực tế và mỗi cột biểu thị các thể hiện của một lớp dự đoán. Đây là cách chúng tôi giữ nó trong chương này của hướng dẫn của chúng tôi, nhưng nó cũng có thể là cách khác, tôi. e. hàng cho lớp dự đoán và cột cho lớp thực tế. Ma trận nhầm lẫn tên phản ánh thực tế là nó giúp chúng ta dễ dàng nhận ra loại nhầm lẫn nào xảy ra trong thuật toán phân loại của mình. Ví dụ: các thuật toán lẽ ra phải dự đoán một mẫu là $c_i$ vì lớp thực tế là $c_i$, nhưng thuật toán đưa ra là $c_j$. Trong trường hợp dán nhãn sai này, phần tử $cm[i, j]$ sẽ được tăng thêm một, khi ma trận nhầm lẫn được xây dựng

Chúng ta sẽ định nghĩa các phương thức để tính toán ma trận nhầm lẫn, độ chính xác và thu hồi trong lớp sau

Vỏ 2 lớp

Trong trường hợp 2 lớp, tôi. e. "tiêu cực" và "tích cực", ma trận nhầm lẫn có thể trông như thế này

predictedactualnegative positive
âm11
0dương
112

Các trường của ma trận có ý nghĩa như sau.

predictedactualnegative positive
negativeTN
True Negative
FP
Dương tính giảDương tínhFP . FP . FP . FP . FP . FP . FP . FP . FP . FP . FP . FP . FP . FP . FP . FP . FP . FP . FP . FP .
FN
False negativeTP
True positive

We can define now some important performance measures used in machine learning:

Sự chính xác

$$AC = \frac {TN + TP}{TN + FP + FN + TP}$$

Độ chính xác không phải lúc nào cũng là thước đo hiệu suất đầy đủ. Giả sử chúng ta có 1000 mẫu. 995 trong số này là âm tính và 5 trường hợp dương tính. Chúng ta hãy giả sử thêm rằng chúng ta có một bộ phân loại, phân loại bất cứ thứ gì nó sẽ được trình bày là phủ định. Độ chính xác sẽ là 99 đáng ngạc nhiên. 5%, mặc dù bộ phân loại không thể nhận ra bất kỳ mẫu dương tính nào

Nhớ lại aka. Tỷ lệ tích cực thực sự

$$recall = \frac {TP}{FN + TP}$$

Tỷ lệ âm thực sự

$$TNR = \frac {FP}{TN + FP}$$

Độ chính xác

$$chính xác. \frac {TP}{FP + TP} $$

Trường hợp nhiều lớp

Để đo lường kết quả của các thuật toán học máy, ma trận nhầm lẫn trước đây sẽ không đủ. Chúng ta sẽ cần một khái quát cho trường hợp nhiều lớp

Giả sử rằng chúng ta có một mẫu gồm 25 con vật, e. g. 7 con mèo, 8 con chó và 10 con rắn, nhiều khả năng là rắn trăn. Ma trận nhầm lẫn của thuật toán nhận dạng của chúng tôi có thể giống như bảng sau

predictedactualdogcatsnakedog6
20cat16
0
snake1
18

In this confusion matrix, the system correctly predicted six of the eight actual dogs, but in two cases it took a dog for a cat. The seven acutal cats were correctly recognized in six cases but in one case a cat was taken to be a dog. Usually, it is hard to take a snake for a dog or a cat, but this is what happened to our classifier in two cases. Yet, eight out of ten snakes had been correctly recognized. [Most probably this machine learning algorithm was not written in a Python program, because Python should properly recognize its own species :-] ]

Bạn có thể thấy rằng tất cả các dự đoán đúng đều nằm trong đường chéo của bảng, vì vậy bạn có thể dễ dàng tìm thấy các lỗi dự đoán trong bảng, vì chúng sẽ được biểu thị bằng các giá trị bên ngoài đường chéo

Chúng ta có thể khái quát hóa điều này cho trường hợp nhiều lớp. Để làm điều này, chúng tôi tóm tắt các hàng và cột của ma trận nhầm lẫn. Cho rằng ma trận được định hướng như trên, i. e. , rằng một hàng nhất định của ma trận tương ứng với giá trị cụ thể cho "sự thật", chúng ta có

$$Precision_i = \frac{M_{ii}}{\sum_j M_{ji}}$$

$$Recall_i = \frac{M_{ii}}{\sum_j M_{ij}}$$

Điều này có nghĩa là, độ chính xác là tỷ lệ các trường hợp mà thuật toán dự đoán chính xác lớp i trong số tất cả các trường hợp mà thuật toán dự đoán i [đúng và sai]. mặt khác, thu hồi là tỷ lệ các trường hợp thuật toán dự đoán chính xác i trong số tất cả các trường hợp được gắn nhãn là i

Hãy để chúng tôi áp dụng điều này vào ví dụ của chúng tôi

Độ chính xác cho động vật của chúng tôi có thể được tính như

$$precision_{dogs} = 6 / [6 + 1 + 1] = 3/4 = 0. 75$$

$$precision_{cats} = 6 / [2 + 6 + 1] = 6/9 = 0. 67$$

$$precision_{snakes} = 8 / [0 + 0 + 8] = 1$$

Việc thu hồi được tính như thế này

$$recall_{dogs} = 6 / [6 + 2 + 0] = 3/4 = 0. 75$$

$$recall_{cats} = 6 / [1 + 6 + 0] = 6/7 = 0. 86$$

$$recall_{snakes} = 8 / [1 + 1 + 8] = 4/5 = 0. 8$$

Thí dụ

Bây giờ chúng tôi đã sẵn sàng để viết mã này vào Python. Đoạn mã sau hiển thị một ma trận nhầm lẫn cho một vấn đề học máy nhiều lớp với mười nhãn, vì vậy, ví dụ: một thuật toán để nhận dạng mười chữ số từ các ký tự viết tay

Nếu bạn không quen thuộc với mảng Numpy và Numpy, chúng tôi khuyên bạn nên hướng dẫn về Numpy

import numpy as np

cm = np.array[
[[5825,    1,   49,   23,    7,   46,   30,   12,   21,   26],
 [   1, 6654,   48,   25,   10,   32,   19,   62,  111,   10],
 [   2,   20, 5561,   69,   13,   10,    2,   45,   18,    2],
 [   6,   26,   99, 5786,    5,  111,    1,   41,  110,   79],
 [   4,   10,   43,    6, 5533,   32,   11,   53,   34,   79],
 [   3,    1,    2,   56,    0, 4954,   23,    0,   12,    5],
 [  31,    4,   42,   22,   45,  103, 5806,    3,   34,    3],
 [   0,    4,   30,   29,    5,    6,    0, 5817,    2,   28],
 [  35,    6,   63,   58,    8,   59,   26,   13, 5394,   24],
 [  16,   16,   21,   57,  216,   68,    0,  219,  115, 5693]]]

Hàm 'precision' và 'recall' tính toán các giá trị cho nhãn, trong khi hàm 'precision_macro_average' tính toán độ chính xác cho toàn bộ vấn đề phân loại

Ma trận nhầm lẫn có thể là 3x3 không?

Ma trận nhầm lẫn đưa ra so sánh giữa giá trị Thực tế và giá trị dự đoán. Ma trận nhầm lẫn là ma trận N x N, trong đó N là số lớp hoặc đầu ra. Đối với 2 lớp, chúng tôi nhận được ma trận nhầm lẫn 2 x 2. Đối với lớp 3, chúng tôi nhận được ma trận nhầm lẫn 3 X 3 .

4 tham số của ma trận nhầm lẫn là gì?

Các chỉ số hiệu suất được sử dụng thường xuyên nhất để phân loại theo các giá trị này là độ chính xác [ACC], độ chính xác [P], độ nhạy [Sn], độ đặc hiệu [Sp] và F- . Việc tính toán các chỉ số hiệu suất này theo các giá trị trong ma trận nhầm lẫn được thực hiện theo các phương trình. [14. 49]–[14. 53]. . The calculation of these performance metrics according to the values in the confusion matrix is made according to Eqs. [14.49]–[14.53].

Làm cách nào để tính tỷ lệ lỗi từ ma trận nhầm lẫn trong Python?

Tỷ lệ lỗi được tính bằng tổng số hai lần dự đoán sai [FN + FP] chia cho tổng số tập dữ liệu [P + N].

Chủ Đề