Python tính điểm chính xác như thế nào?

Độ chính xác và Thu hồi là các số liệu được sử dụng để đánh giá các thuật toán học máy vì chỉ độ chính xác thôi là không đủ để hiểu hiệu suất của các mô hình phân loại

Giả sử chúng ta đã phát triển một mô hình phân loại để chẩn đoán một căn bệnh hiếm gặp, chẳng hạn như ung thư. Chỉ 5% bệnh nhân ung thư, mô hình dự đoán tất cả bệnh nhân khỏe mạnh sẽ có độ chính xác 95%. Nếu chỉ 0. 1% bệnh nhân bị ung thư, cùng một mô hình dự đoán tất cả bệnh nhân đều khỏe mạnh đạt 99. độ chính xác 9%. Tất nhiên, "độ chính xác" là sai lệch. Cả hai mô hình này đều vô dụng để phát hiện bệnh vì chúng bỏ sót tất cả các bệnh ung thư. Chúng tôi cần các số liệu khác giúp chúng tôi cân nhắc chi phí của các loại lỗi khác nhau

Chúng ta có thể tạo một ma trận nhầm lẫn để biểu thị kết quả của phân loại nhị phân

Python tính điểm chính xác như thế nào?

Ma trận nhầm lẫn để phân loại nhị phân

Cách tính toán độ chính xác, thu hồi và điểm F1

Độ chính xác đưa ra tỷ lệ dự đoán tích cực thực sự chính xác. Nó tính đến các trường hợp dương tính giả, là những trường hợp được gắn cờ không chính xác để đưa vào. Độ chính xác có thể được tính như

$$ Chính xác = \frac{TP}{TP + FP}$$

Thu hồi đo lường tỷ lệ tích cực thực tế đã được dự đoán chính xác. Nó tính đến các trường hợp phủ định sai, đó là những trường hợp lẽ ​​ra phải được gắn cờ để đưa vào nhưng không được. Thu hồi có thể được tính như

$$ Gọi lại = \frac{TP}{TP + FN}$$

Hãy xem xét một hệ thống được thiết kế để phân biệt email thật với thư rác. Trong hệ thống này, một email thực sự là một email tích cực thực sự. Một mô hình loại bỏ tất cả các email là thư rác sẽ có độ chính xác hoàn hảo vì không có thông báo sai (không có email nào bị gắn cờ sai là có thật). Tuy nhiên, Recall sẽ là 0% vì không có email xác thực nào (không có email nào được gắn cờ chính xác là có thật)

Một mô hình tốt cần đạt được sự cân bằng phù hợp giữa Độ chính xác và Độ thu hồi. Vì lý do này, điểm F (đo F hoặc F1) được sử dụng bằng cách kết hợp Chính xác và Thu hồi để có được mô hình phân loại cân bằng. Điểm F được tính bằng giá trị trung bình điều hòa của Độ chính xác và Thu hồi như trong phương trình sau

$$ Điểm F = 2 \times \frac{p \times r}{ p + r} $$

Chúng ta cũng có thể sử dụng Precision và Recall cho các bài toán nhiều lớp. Một ma trận nhầm lẫn có thể được xây dựng để biểu diễn kết quả của mô hình 3 lớp

Python tính điểm chính xác như thế nào?

Ma trận nhầm lẫn cho mô hình 3 lớp

Ta có thể tính Độ chính xác của mô hình như sau

$ \textrm{Độ chính xác của mô hình} = \frac{\textrm{Mô hình đã dự đoán chính xác điều gì}}{\textrm{Tổng số phần tử}} = \frac {n_{1,1} +n_{2,2}

Độ chính xác và Thu hồi cho mỗi lớp được tính riêng. Ví dụ: Độ chính xác và Thu hồi cho Lớp 1 được tính như sau

$ \textrm{Độ chính xác của mô hình cho C1} = \frac{\textrm{Mô hình dự đoán chính xác C1}}{\textrm{Mô hình dự đoán C1}} = \frac {n_{1,1} }

$ \textrm{Ghi lại mô hình cho C1} = \frac{\textrm{Mô hình đã dự đoán chính xác C1}}{\textrm{C1 thực sự là gì}} = \frac {n_{1,1} }{n_

Độ chính xác và Thu hồi được tính cho Loại 2 và Loại 3 theo cùng một cách. Đối với dữ liệu có nhiều hơn 3 lớp, số liệu được tính bằng cùng một phương pháp

Một ví dụ về Python

Hãy sử dụng tập dữ liệu mẫu để hiển thị cách tính các chỉ số đánh giá. Mục tiêu của chúng tôi là dự đoán liệu khối u có ác tính hay không từ kích thước của khối u trong dữ liệu ung thư vú

Tập dữ liệu này có hai lớp. ác tính, ký hiệu là 0 và lành tính, ký hiệu là 1. Bởi vì mục tiêu là một biến nhị phân, đây là một vấn đề phân loại nhị phân. Ví dụ này sẽ sử dụng một phương pháp đơn giản để phân loại nhị phân

Nếu diện tích trung bình của khối u cao hơn ngưỡng xác định, mô hình sẽ phân loại đối tượng là ác tính. Chúng tôi sẽ tạo một chức năng từ đầu để tính toán các số liệu đánh giá

Đầu tiên, chúng tôi sẽ nhập và tải tập dữ liệu

import numpy as np
from sklearn.datasets import load_breast_cancer
dataset = load_breast_cancer()

Learn Data Science with

Tiếp theo, chúng tôi xác định các biến dự đoán và mục tiêu

x = dataset['data'][:,3] # Column 3 is mean area of the tumor
y = dataset['target']

# Apply min-max normalization
x = (x - np.min(x)) / (np.max(x) - np.min(x) )

Learn Data Science with

Bây giờ, chúng ta có thể định nghĩa một bộ phân loại đơn giản

def a_simple_classifier(x, thres = 0.5):
    predicted = np.zeros(len(x))
    for i in range(len(x)):
        if x[i] < thres:
            predicted[i] = 1 
    return predicted

Learn Data Science with

Ở đây, chúng ta sẽ tạo hàm để lấy các giá trị Accuracy, Precision, Recall và F1 Score

def calculate_metrics(predicted, actual):
    TP, FP, TN, FN = 0, 0, 0, 0
    for i in range(len(predicted)):
        if   (predicted[i] == 0) & (actual[i] == 0):
            TP += 1
        elif (predicted[i] == 0) & (actual[i] == 1):
            FP += 1
        elif (predicted[i] == 1) & (actual[i] == 1):
            TN += 1
        else:
            FN += 1

    accuracy  = (TP + TN) / (TP + FP + TN + FN) 
    precision = (TP) / (TP + FP) 
    recall    = (TP) / (TP + FN) 
    f1_score  = (2 * precision * recall) / (precision + recall)
    
    return accuracy, precision, recall, f1_score

Learn Data Science with

Bây giờ chúng ta sẽ áp dụng trình phân loại được xác định ở trên cho các giá trị ngưỡng khác nhau. Chúng tôi đã xác định 20 giá trị ngưỡng khác nhau bằng cách sử dụng

def a_simple_classifier(x, thres = 0.5):
    predicted = np.zeros(len(x))
    for i in range(len(x)):
        if x[i] < thres:
            predicted[i] = 1 
    return predicted

Learn Data Science with

1 và một mảng cho từng chỉ số. Sau đó, chúng tôi lặp qua từng giá trị ngưỡng, nhận dự đoán từ trình phân loại của chúng tôi, nhận từng chỉ số và in một cột cho từng kết quả

thresh = np.linspace(0,1,20) 
accuracy = np.zeros(len(thresh))
precision = np.zeros(len(thresh))
recall = np.zeros(len(thresh))
f1_score = np.zeros(len(thresh))

print('Threshold \t Accuracy \t Precision\t Recall \t  F1 Score ')

for i in range(len(thresh)):
    prediction = a_simple_classifier(x, thresh[i])
    accuracy[i], precision[i], recall[i], f1_score[i]=calculate_metrics(prediction, y)
    print(f'{thresh[i]: .2f}\t\t {accuracy[i]: .2f}\t\t {precision[i]: .2f}\t\t {recall[i]: .2f}\t\t {f1_score[i]: .2f}')

Learn Data Science with

Ngoài

Threshold 	 Accuracy 	 Precision	 Recall 	  F1 Score 
 0.00		  0.37		  0.37		  1.00		  0.54
 0.05		  0.41		  0.39		  1.00		  0.56
 0.11		  0.55		  0.45		  0.99		  0.62
 0.16		  0.78		  0.63		  0.94		  0.76
 0.21		  0.86		  0.81		  0.83		  0.82
 0.26		  0.86		  0.96		  0.67		  0.79
 0.32		  0.83		  0.99		  0.56		  0.71
 0.37		  0.78		  1.00		  0.42		  0.59
 0.42		  0.75		  1.00		  0.32		  0.49
 0.47		  0.70		  1.00		  0.19		  0.32
 0.53		  0.66		  1.00		  0.10		  0.18
 0.58		  0.65		  1.00		  0.07		  0.12
 0.63		  0.65		  1.00		  0.06		  0.11
 0.68		  0.64		  1.00		  0.03		  0.06
 0.74		  0.63		  1.00		  0.02		  0.04
 0.79		  0.63		  1.00		  0.02		  0.04
 0.84		  0.63		  1.00		  0.01		  0.03
 0.89		  0.63		  1.00		  0.01		  0.02
 0.95		  0.63		  1.00		  0.01		  0.02
 1.00		  0.63		  1.00		  0.00		  0.01

Learn Data Science with

Kết quả cho thấy tác động của việc thay đổi ngưỡng. Tăng ngưỡng sẽ tăng cường Độ chính xác và giảm Thu hồi. Độ chính xác cân bằng Điểm F1 với Thu hồi cao nhất ở ngưỡng. 21

Biểu đồ sau biểu đồ Chính xác so với Thu hồi để xem các thay đổi đối với nhau

import matplotlib.pyplot as plt

plt.plot(precision, recall)
plt.xlabel('Precision')
plt.ylabel('Recall')
plt.title('Precision versus Recall')
plt.show()

Learn Data Science with

KẾT QUẢ

Python tính điểm chính xác như thế nào?

Hình này cho thấy các giá trị Độ chính xác và Thu hồi có quan hệ tỷ lệ nghịch với nhau. Cái này tăng thì cái kia giảm

Chúng tôi cũng sẽ vẽ biểu đồ để hiển thị các thay đổi của tất cả các chỉ số cùng nhau

________số 8_______

KẾT QUẢ

Python tính điểm chính xác như thế nào?

Giá trị có ý nghĩa nhất để xem xét trong biểu đồ trên là điểm F1 (đường màu đen). Giá trị cao nhất của điểm F1 là nơi các giá trị Độ chính xác và Độ thu hồi gần nhau. Điểm F1 là tối ưu khi giá trị ngưỡng bằng 0. 21

Đánh giá mô hình nhiều lớp

Trong ví dụ này, chúng tôi sẽ sử dụng bộ dữ liệu Iris để tạo mô hình nhiều lớp để phân loại các loài hoa diên vĩ khác nhau. Bộ dữ liệu này bao gồm 3 loại hoa Iris khác nhau (Setosa, Versicolour và Virginica). Các tính năng là Chiều dài lá đài, Chiều rộng lá đài, Chiều dài cánh hoa và Chiều rộng cánh hoa

Trong ví dụ này, chúng tôi sẽ sử dụng thư viện Scikit-Learn để đánh giá mô hình phân loại

Trước tiên, chúng tôi sẽ nhập và tải tập dữ liệu

from sklearn.datasets import load_iris
dataset = load_iris()

Learn Data Science with

Bây giờ chúng ta sẽ thực hiện năm bước để tạo mô hình và lấy các số liệu cần thiết

Bước 1. Xác định các biến giải thích và biến mục tiêu

X = dataset['data']
y = dataset['target']

Learn Data Science with

Bước 2. Áp dụng hoạt động chuẩn hóa cho sự ổn định số

x = dataset['data'][:,3] # Column 3 is mean area of the tumor
y = dataset['target']

# Apply min-max normalization
x = (x - np.min(x)) / (np.max(x) - np.min(x) )

Learn Data Science with

0

Bước 3. Khớp mô hình hồi quy logistic với dữ liệu tàu

x = dataset['data'][:,3] # Column 3 is mean area of the tumor
y = dataset['target']

# Apply min-max normalization
x = (x - np.min(x)) / (np.max(x) - np.min(x) )

Learn Data Science with

1

Bước 4. Đưa ra dự đoán về dữ liệu bằng xác thực chéo

x = dataset['data'][:,3] # Column 3 is mean area of the tumor
y = dataset['target']

# Apply min-max normalization
x = (x - np.min(x)) / (np.max(x) - np.min(x) )

Learn Data Science with

2

Bước 5. Tính toán Ma trận Nhầm lẫn theo các giá trị thực tế và dự đoán

x = dataset['data'][:,3] # Column 3 is mean area of the tumor
y = dataset['target']

# Apply min-max normalization
x = (x - np.min(x)) / (np.max(x) - np.min(x) )

Learn Data Science with

3

Cuối cùng, chúng ta có thể tạo một bản đồ nhiệt để hiển thị ma trận nhầm lẫn

x = dataset['data'][:,3] # Column 3 is mean area of the tumor
y = dataset['target']

# Apply min-max normalization
x = (x - np.min(x)) / (np.max(x) - np.min(x) )

Learn Data Science with

4

Ngoài ra, hãy in báo cáo phân loại để quan sát các số liệu đánh giá

x = dataset['data'][:,3] # Column 3 is mean area of the tumor
y = dataset['target']

# Apply min-max normalization
x = (x - np.min(x)) / (np.max(x) - np.min(x) )

Learn Data Science with

5

Ngoài

x = dataset['data'][:,3] # Column 3 is mean area of the tumor
y = dataset['target']

# Apply min-max normalization
x = (x - np.min(x)) / (np.max(x) - np.min(x) )

Learn Data Science with

6

Từ báo cáo phân loại, chúng ta có thể quan sát giá trị của các chỉ số đánh giá cho từng lớp và giá trị trung bình của từng chỉ số. Ví dụ: độ chính xác và độ thu hồi của mô hình cho Lớp 0 đều là 1. 00, có nghĩa là mô hình có thể dự đoán chính xác tất cả các trường hợp của Lớp 0

Lưu ý rằng báo cáo đưa ra số lượng phiên bản cho mỗi lớp.

def a_simple_classifier(x, thres = 0.5):
    predicted = np.zeros(len(x))
    for i in range(len(x)):
        if x[i] < thres:
            predicted[i] = 1 
    return predicted

Learn Data Science with

2 và
def a_simple_classifier(x, thres = 0.5):
    predicted = np.zeros(len(x))
    for i in range(len(x)):
        if x[i] < thres:
            predicted[i] = 1 
    return predicted

Learn Data Science with

3 lần lượt là giá trị trung bình không có trọng số và giá trị trung bình có trọng số so với mức hỗ trợ

Hơn nữa, thư viện

def a_simple_classifier(x, thres = 0.5):
    predicted = np.zeros(len(x))
    for i in range(len(x)):
        if x[i] < thres:
            predicted[i] = 1 
    return predicted

Learn Data Science with

4 có các chức năng riêng biệt cho từng chỉ số đánh giá mà bạn có thể tìm thấy trong tài liệu của họ

Dưới đây là các ví dụ về cách tính riêng từng chỉ số bằng cách sử dụng

def a_simple_classifier(x, thres = 0.5):
    predicted = np.zeros(len(x))
    for i in range(len(x)):
        if x[i] < thres:
            predicted[i] = 1 
    return predicted

Learn Data Science with

4

x = dataset['data'][:,3] # Column 3 is mean area of the tumor
y = dataset['target']

# Apply min-max normalization
x = (x - np.min(x)) / (np.max(x) - np.min(x) )

Learn Data Science with

7

Ngoài

x = dataset['data'][:,3] # Column 3 is mean area of the tumor
y = dataset['target']

# Apply min-max normalization
x = (x - np.min(x)) / (np.max(x) - np.min(x) )

Learn Data Science with

8

Các số liệu đánh giá trên đưa ra mức trung bình của các lớp. Nếu chúng ta muốn quan sát độ chính xác cho từng lớp riêng biệt, chúng ta cần xác định tham số

def a_simple_classifier(x, thres = 0.5):
    predicted = np.zeros(len(x))
    for i in range(len(x)):
        if x[i] < thres:
            predicted[i] = 1 
    return predicted

Learn Data Science with

6. Một ví dụ cho Lớp 1 được đưa ra dưới đây

x = dataset['data'][:,3] # Column 3 is mean area of the tumor
y = dataset['target']

# Apply min-max normalization
x = (x - np.min(x)) / (np.max(x) - np.min(x) )

Learn Data Science with

9

Ngoài

def a_simple_classifier(x, thres = 0.5):
    predicted = np.zeros(len(x))
    for i in range(len(x)):
        if x[i] < thres:
            predicted[i] = 1 
    return predicted

Learn Data Science with

0

Bắt đầu học miễn phí

Nhận thông tin cập nhật trong hộp thư đến của bạn

Tham gia cùng hơn 7.500 người học khoa học dữ liệu

Bài viết gần đây

Ưu đãi khóa học tốt nhất cho Thứ Sáu Đen và Thứ Hai Điện Tử 2022
Hàm sigmoid
chấm sản phẩm
7 khóa học về trí tuệ nhân tạo (AI) tốt nhất năm 2023

7 khóa học về trí tuệ nhân tạo (AI) tốt nhất

Các khóa học hàng đầu bạn có thể tham gia ngay hôm nay để bắt đầu hành trình vào lĩnh vực Trí tuệ nhân tạo

Tìm hiểu thêm


Nhận thông tin cập nhật trong hộp thư đến của bạn

Tham gia cùng hơn 7.500 người học khoa học dữ liệu

Gặp gỡ các tác giả

Python tính điểm chính xác như thế nào?

Fatih Karabiber Ph. D. trong Kỹ thuật máy tính, Nhà khoa học dữ liệu

Phó Giáo sư Kỹ thuật Máy tính. Tác giả/đồng tác giả của hơn 30 ấn phẩm tạp chí. Giảng viên các khóa học sau đại học/đại học. Người hướng dẫn luận văn tốt nghiệp. Tư vấn cho các công ty CNTT

Python tính điểm chính xác như thế nào?

Cách tính toán độ chính xác cân bằng trong Python bằng sklearn .
Độ chính xác cân bằng = (Độ nhạy + Độ đặc hiệu) / 2
Độ chính xác cân bằng = (0. 75 + 9868) / 2
Độ chính xác cân bằng = 0. 8684

Điểm chính xác và điểm thu hồi trong Python là gì?

Độ chính xác ( ) được định nghĩa là số lần xác thực đúng ( ) trên số lần xác thực đúng cộng với số lần xác định sai ( ). Nhớ lại ( ) được định nghĩa là số lần khẳng định đúng ( ) trên số lần khẳng định đúng cộng với số lần phủ định sai ( )

Độ chính xác được tính như thế nào?

Độ chính xác được tính bằng tỷ lệ giữa số lượng mẫu Dương tính được phân loại chính xác trên tổng số mẫu được phân loại là Dương tính (hoặc chính xác . Độ chính xác đo lường độ chính xác của mô hình trong việc phân loại một mẫu là dương tính.

Hàm nào được sử dụng để tính toán độ chính xác của mô hình trong Python?