Làm thế nào để bạn vẽ một ma trận nhầm lẫn trong python bằng sklearn?

Trong bài đăng này, tôi sẽ trình bày cách vẽ Ma trận nhầm lẫn. Tôi sẽ sử dụng ma trận nhầm lẫn từ thư viện Scikit-Learn (

    >>> output
   show first 5 rows 
5) và Matplotlib để hiển thị kết quả ở định dạng trực quan hơn

Tài liệu về Ma trận nhầm lẫn khá tốt, nhưng tôi đã cố gắng tìm cách nhanh chóng để thêm nhãn và trực quan hóa đầu ra vào bảng 2x2

Để đọc giới thiệu tốt về ma trận nhầm lẫn, hãy xem bài đăng tuyệt vời này

http. //www. trường dữ liệu. io/simple-guide-to-confusion-matrix-terminology

Đây là một bản mô phỏng giao diện mà tôi đang cố gắng đạt được

Làm thế nào để bạn vẽ một ma trận nhầm lẫn trong python bằng sklearn?

  • TN = Đúng tiêu cực
  • FN = Phủ định sai
  • FP = Sai tích cực
  • TP = Đúng tích cực

Hãy xem qua một ví dụ về Hồi quy logistic nhanh bằng Scikit-Learn. Đối với dữ liệu, tôi sẽ sử dụng bộ dữ liệu Iris phổ biến (để đọc thêm về nó, hãy tham khảo https. // vi. wikipedia. org/wiki/Iris_flower_data_set)

Chúng tôi sẽ sử dụng ma trận nhầm lẫn để đánh giá độ chính xác của phân loại và vẽ đồ thị bằng matplotlib

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from sklearn import datasets
data = datasets.load_iris()

df = pd.DataFrame(data.data, columns=data.feature_names)
df['Target'] = pd.DataFrame(data.target)
df.head()
    >>> output
   show first 5 rows 
chiều dài lá đài (cm)chiều rộng lá đài (cm)chiều dài cánh hoa (cm)chiều rộng cánh hoa (cm)Mục tiêu 5. 13. 51. 40. 20 4. 93. 01. 40. 20 4. 73. 21. 30. 20 4. 63. 11. 50. 20 5. 03. 61. 40. 20

Chúng tôi có thể kiểm tra dữ liệu của mình một cách nhanh chóng bằng cách sử dụng chức năng tương quan Pandas để chọn một tính năng phù hợp cho hồi quy logistic của chúng tôi. Chúng tôi sẽ sử dụng phương pháp lê mặc định

corr = df.corr()
print(corr.Target)
    >>> output
    sepal length (cm)    0.782561
    sepal width (cm)    -0.419446
    petal length (cm)    0.949043
    petal width (cm)     0.956464
    Target               1.000000
    Name: Target, dtype: float64

Vì vậy, hãy chọn hai cái có tiềm năng cao nhất. Chiều rộng cánh hoa (cm) và Chiều dài cánh hoa (cm) là các biến độc lập (X) của chúng tôi. Đối với biến Mục tiêu/phụ thuộc (Y), chúng ta có thể chọn lớp Versicolor. Lớp Target thực sự có ba lựa chọn, để đơn giản hóa nhiệm vụ của chúng ta và thu hẹp nó thành một bộ phân loại nhị phân, tôi sẽ chọn Versicolor để thu hẹp các lớp phân loại của chúng ta thành (0 hoặc 1). nó có nhiều màu (1) hoặc không có nhiều màu (0)

print(data.target_names)
    >>> output
    array(['setosa', 'versicolor', 'virginica'],
      dtype='

Bây giờ hãy tạo X và Y của chúng ta

x = df.iloc[0: ,3].reshape(-1,1)
y = (data.target == 1).astype(np.int) # we are picking Versicolor to be 1 and all other classes will be 0

Chúng tôi sẽ chia dữ liệu của mình thành một bộ thử nghiệm và đào tạo, sau đó bắt đầu xây dựng mô hình Hồi quy logistic của chúng tôi. Chúng tôi sẽ sử dụng tỷ lệ chia 80/20

________số 8_______

Trước khi chúng tôi tạo trình phân loại của mình, chúng tôi sẽ cần chuẩn hóa dữ liệu (nhân rộng tính năng) bằng cách sử dụng chức năng tiện ích

    >>> output
   show first 5 rows 
6 một phần của gói tiền xử lý Scikit-Learn

from sklearn.preprocessing import StandardScaler
sc_x = StandardScaler()
x_train = sc_x.fit_transform(x_train)
x_test = sc_x.transform(x_test)

Bây giờ chúng tôi đã sẵn sàng để xây dựng Trình phân loại logistic của mình

from sklearn.linear_model import LogisticRegression
logit = LogisticRegression(random_state= 0)
logit.fit(x_train, y_train)

y_predicted = logit.predict(x_test)

Bây giờ, hãy đánh giá trình phân loại của chúng ta bằng ma trận nhầm lẫn

    >>> output
   show first 5 rows 
0
    >>> output
   show first 5 rows 
1

Về mặt trực quan, những điều trên không dễ dàng truyền đạt trình phân loại của chúng tôi hoạt động như thế nào, nhưng chúng tôi chủ yếu tập trung vào phía trên bên phải và phía dưới bên trái (đây là các lỗi hoặc phân loại sai)

Ma trận nhầm lẫn cho chúng ta biết rằng chúng ta có tổng cộng 15 (13 + 2) dữ liệu bị phân loại sai trong số 30 điểm kiểm tra (về. Versicolor, hoặc không Versicolor). Một cách tốt hơn để hình dung điều này có thể được thực hiện với đoạn mã dưới đây

    >>> output
   show first 5 rows 
2

Làm thế nào để bạn vẽ một ma trận nhầm lẫn trong python bằng sklearn?

Để vẽ và hiển thị ranh giới quyết định phân tách hai lớp (Có nhiều màu hoặc Không có nhiều màu)

    >>> output
   show first 5 rows 
3

Làm thế nào để bạn vẽ một ma trận nhầm lẫn trong python bằng sklearn?

Sẽ từ hai biểu đồ, chúng ta có thể dễ dàng thấy rằng trình phân loại không hoạt động tốt. Và trước khi tìm hiểu lý do tại sao (đây sẽ là một bài đăng khác về cách xác định xem dữ liệu có thể phân tách tuyến tính hay không), chúng ta có thể giả định rằng đó là do dữ liệu không thể phân tách tuyến tính (đối với bộ dữ liệu IRIS trên thực tế, chỉ có lớp setosa là có thể phân tách tuyến tính)

Ma trận nhầm lẫn Sklearn trả về điều gì?

Ma trận nhầm lẫn sử dụng scikit-learning trong Python . Tuy nhiên, đầu ra hơi khác so với những gì chúng ta đã nghiên cứu cho đến nay. Nó lấy các hàng làm Giá trị thực và các cột làm Giá trị dự đoán. the values of the Confusion matrix. The output is, however, slightly different from what we have studied so far. It takes the rows as Actual values and the columns as Predicted values.

Ma trận nhầm lẫn Sklearn là gì?

Theo định nghĩa, ma trận nhầm lẫn là sao cho C i , j bằng với số quan sát được biết là thuộc nhóm và được dự đoán thuộc nhóm . Thus in binary classification, the count of true negatives is C 0 , 0 , false negatives is C 1 , 0 , true positives is C 1 , 1 and false positives is C 0 , 1 .