Độ chính xác và thu hồi trong python là gì?

Độ chính xác, Thu hồi, Độ chính xác và Điểm F1 là các số liệu được sử dụng để đánh giá hiệu suất của một mô hình. Mặc dù các thuật ngữ nghe có vẻ phức tạp, nhưng các khái niệm cơ bản của chúng khá đơn giản. Chúng dựa trên các công thức đơn giản và có thể dễ dàng tính toán

Bài viết này sẽ đi qua wrt sau cho mỗi thuật ngữ

  • Giải trình
  • Tại sao nó có liên quan
  • Công thức
  • Tính toán nó mà không cần sklearn
  • Sử dụng sklearn để tính toán nó

Ở phần cuối của hướng dẫn, chúng ta sẽ xem xét các ma trận nhầm lẫn và cách trình bày chúng. Tôi đã cung cấp liên kết đến google colab ở cuối bài viết

Dữ liệu 📈

Giả sử chúng ta đang phân loại xem một email có phải là thư rác hay không

Chúng ta sẽ có hai mảng, mảng đầu tiên sẽ lưu trữ giá trị thực trong khi mảng thứ hai sẽ lưu trữ các giá trị dự đoán. Các giá trị dự đoán này được lấy từ một mô hình phân loại. Loại mô hình không quan trọng, chúng tôi quan tâm đến những dự đoán mà mô hình của chúng tôi đưa ra

# Actual Value
labels = [1, 0, 0, 1, 1, 1, 0, 1, 1, 1]
# Predicted Value
predictions = [0, 1, 1, 1, 1, 0, 1, 0, 1, 0]

0- email KHÔNG phải là thư rác (tiêu cực)

1- email IS spam (tích cực)

Điều khoản chính 🔑

Tích cực thực sự ➕ ➕

Trường hợp này xảy ra khi nhãn dương và giá trị dự đoán của chúng tôi cũng dương. Trong kịch bản của chúng tôi, khi email là thư rác và mô hình của chúng tôi cũng phân loại email đó là thư rác

Điều kiện cho True positive
TP = 0
for i in range(0,len(labels)):
if labels[i] == predictions[i] and labels[i] == 1:
TP+=1
print("True Positive: ", TP) # 3

Dương Tính Giả ➖ ➕

Trường hợp này xảy ra khi nhãn là âm nhưng dự đoán mô hình của chúng tôi là dương. Trong kịch bản của chúng tôi, khi email không phải là thư rác nhưng mô hình của chúng tôi phân loại nó là thư rác

Điều kiện cho Tích cực Sai_______2

Tiêu cực thực sự ➖ ➖

Điều này tương tự với True positive, điểm khác biệt duy nhất là nhãn và giá trị dự đoán đều âm. Trong kịch bản của chúng tôi, khi email không phải là thư rác và mô hình của chúng tôi cũng phân loại email đó không phải là thư rác

Điều kiện cho True Phủ định
TN = 0
for i in range(0,len(labels)):
if labels[i] == predictions[i] and labels[i] == 0:
TN+=1
print("True Negative: ", TN) # 0

Âm tính giả ➕ ➖

Trường hợp này xảy ra khi nhãn dương nhưng giá trị dự đoán là âm. Theo một cách nào đó, ngược lại với Sai tích cực. Trong kịch bản của chúng tôi, khi email là thư rác nhưng mô hình của chúng tôi phân loại nó không phải là thư rác

Điều kiện cho Phủ định Sai_______4

Dự đoán đúng 💯

Điều kiện duy nhất cho trường hợp này là nhãn đó và giá trị dự đoán giống nhau. Trong trường hợp của chúng tôi, khi mô hình phân loại email spam là thư rác và email không phải thư rác là không phải thư rác

Điều kiện để dự đoán đúng

Dự đoán chính xác cũng có thể được tính bằng tổng của Tích cực Thực sự và Tiêu cực Thực sự

Tính toán các dự đoán đúng
CP = 0
for i in range(0,len(labels)):
if labels[i] == predictions[i]:
CP+=1
print("Correct Prediction: ", CP) # 3
print(CP == TP + TN) # True

Dự đoán sai ❎

Điều kiện cho trường hợp này là nhãn và giá trị dự đoán không được bằng nhau. Trong trường hợp của chúng tôi, một dự đoán không chính xác là khi mô hình của chúng tôi phân loại một email rác là không phải thư rác và một email không phải thư rác là thư rác

Điều kiện dự đoán sai

Dự đoán sai cũng có thể được tính bằng tổng của Kết quả dương tính giả và Âm tính giả

Tính toán dự đoán sai
ICP = 0
for i in range(0,len(labels)):
if labels[i] != predictions[i]:
ICP+=1
print("Incorrect Prediction: ", ICP)# 7
print(ICP == FP + FN) # True

Độ chính xác 🎯

Độ chính xác là tỷ lệ dự đoán đúng trên tổng số dự đoán. Đây là một trong những biện pháp đơn giản nhất của một mô hình. Chúng ta phải hướng đến độ chính xác cao cho mô hình của mình. Nếu một mô hình có độ chính xác cao, chúng ta có thể suy luận rằng mô hình đó luôn đưa ra dự đoán chính xác

Công thức chính xác

Công thức chính xác

Không có Sklearn

accuracy = (TP + TN)/(TP + FP + TN + FN)
print(accuracy*100)

Với Sklearn

________số 8

Nhớ lại 📲

Một trường hợp khi Độ chính xác có thể gây hiểu nhầm

Độ chính xác cao đôi khi có thể gây hiểu lầm. Xem xét kịch bản dưới đây

labels = [0,0,0,0,1,0,0,1,0,0]
predictions = [0 ,0 ,0 ,0 ,0 , 0 ,0 ,0 ,0 ,0]
print(accuracy_score(labels , predictions)*100) # 80

Một email spam rất hiếm so với một email không phải thư rác. Kết quả là số lần xuất hiện nhãn = 0 nhiều hơn nhãn = 1. Trong mã ở trên, mảng nhãn của chúng tôi có 8 email không phải thư rác và 2 email rác. Nếu mô hình của chúng tôi được xây dựng theo cách nó luôn phân loại email là không phải thư rác, thì nó sẽ đạt được độ chính xác là 80%. Điều này rất dễ gây hiểu lầm vì mô hình của chúng tôi về cơ bản không thể phát hiện email spam

Tính điểm thu hồi

Recall tính toán tỷ lệ của số dương tính được dự đoán trên tổng số nhãn dương tính

Công thức thu hồi

Công thức thu hồi

Trong trường hợp trên của chúng tôi, mô hình của chúng tôi sẽ thu hồi 0 vì nó có 0 Tích cực thực sự. Điều này cho chúng tôi biết rằng mô hình của chúng tôi không hoạt động tốt trên các email spam và chúng tôi cần cải thiện nó

Không có Sklearn

TP = 0
for i in range(0,len(labels)):
if labels[i] == predictions[i] and labels[i] == 1:
TP+=1
print("True Positive: ", TP) # 3
0

Với Sklearn

TP = 0
for i in range(0,len(labels)):
if labels[i] == predictions[i] and labels[i] == 1:
TP+=1
print("True Positive: ", TP) # 3
1

Độ chính xác 🐾

Một trường hợp khi Điểm thu hồi có thể gây hiểu nhầm

Thu hồi cao cũng có thể gây hiểu lầm cao. Hãy xem xét trường hợp khi mô hình của chúng tôi được điều chỉnh để luôn trả về dự đoán có giá trị dương. Về cơ bản, nó phân loại tất cả các email là thư rác

TP = 0
for i in range(0,len(labels)):
if labels[i] == predictions[i] and labels[i] == 1:
TP+=1
print("True Positive: ", TP) # 3
2

Mặc dù trường hợp trên sẽ có độ chính xác thấp (20%) nhưng nó sẽ có điểm thu hồi cao (100%)

Tính toán chính xác

Độ chính xác là tỷ lệ của các dự đoán tích cực chính xác trên tổng số dự đoán tích cực

Công thức cho độ chính xác

Công thức cho độ chính xác

Trong trường hợp trên, độ chính xác sẽ thấp (20%) do mô hình dự đoán tổng cộng 10 kết quả dương tính, trong đó chỉ có 2 kết quả đúng. Điều này cho chúng tôi biết rằng, mặc dù khả năng thu hồi của chúng tôi cao và mô hình của chúng tôi hoạt động tốt trên các trường hợp tích cực, tôi. e thư rác, nó hoạt động kém trên các email không phải thư rác

Lý do độ chính xác và độ chính xác của chúng tôi bằng nhau là vì mô hình đang dự đoán tất cả các mặt tích cực. Trong thế giới thực, một mô hình sẽ dự đoán chính xác một số trường hợp tiêu cực dẫn đến độ chính xác cao hơn. Tuy nhiên, độ chính xác sẽ vẫn không thay đổi vì nó chỉ phụ thuộc vào dự đoán dương đúng và tổng dự đoán dương.

Không có Sklearn

TP = 0
for i in range(0,len(labels)):
if labels[i] == predictions[i] and labels[i] == 1:
TP+=1
print("True Positive: ", TP) # 3
3

Với Sklearn

TP = 0
for i in range(0,len(labels)):
if labels[i] == predictions[i] and labels[i] == 1:
TP+=1
print("True Positive: ", TP) # 3
4

Điểm F1 🚗

Điểm F1 phụ thuộc vào cả Thu hồi và Độ chính xác, nó là giá trị trung bình hài hòa của cả hai giá trị

Công thức tính điểm F1

Chúng tôi xem xét giá trị trung bình hài hòa so với giá trị trung bình số học vì chúng tôi muốn Thu hồi hoặc Độ chính xác thấp để tạo ra Điểm F1 thấp. Trong trường hợp trước của chúng tôi, khi chúng tôi thu hồi 100% và độ chính xác là 20%, giá trị trung bình số học sẽ là 60% trong khi giá trị trung bình của Điều hòa sẽ là 33. 33%. Giá trị trung bình của Harmonic thấp hơn và có ý nghĩa hơn vì chúng tôi biết mô hình này khá tệ

TP = 0
for i in range(0,len(labels)):
if labels[i] == predictions[i] and labels[i] == 1:
TP+=1
print("True Positive: ", TP) # 3
5

Không có Sklearn

TP = 0
for i in range(0,len(labels)):
if labels[i] == predictions[i] and labels[i] == 1:
TP+=1
print("True Positive: ", TP) # 3
6

Với Sklearn

TP = 0
for i in range(0,len(labels)):
if labels[i] == predictions[i] and labels[i] == 1:
TP+=1
print("True Positive: ", TP) # 3
7

Ma trận bối rối ❓

https. // hướng tới khoa học dữ liệu. com/hiểu-nhầm-matrix-a9ad42dcfd62

Ma trận nhầm lẫn là một ma trận để biểu thị số lượng Xác thực Đúng, Tích cực Sai, Phủ định Thực và Phủ định Sai

Giả sử chúng tôi đang làm việc với dữ liệu sau

TP = 0
for i in range(0,len(labels)):
if labels[i] == predictions[i] and labels[i] == 1:
TP+=1
print("True Positive: ", TP) # 3
8

Ví dụ về ma trận nhầm lẫn

Tính toán ma trận nhầm lẫn bằng sklearn

TP = 0
for i in range(0,len(labels)):
if labels[i] == predictions[i] and labels[i] == 1:
TP+=1
print("True Positive: ", TP) # 3
9

Bạn cũng có thể chuyển tham số chuẩn hóa để chuẩn hóa dữ liệu được tính toán

Hiển thị ma trận nhầm lẫn dưới dạng biểu đồ thanh

FP = 0
for i in range(0,len(labels)):
if labels[i] == 0 and predictions[i] == 1:
FP+=1
print("False Positive: ", FP) # 3
0

Ma trận nhầm lẫn dưới dạng biểu đồ thanh

Hiển thị Ma trận nhầm lẫn dưới dạng Bản đồ nhiệt

FP = 0
for i in range(0,len(labels)):
if labels[i] == 0 and predictions[i] == 1:
FP+=1
print("False Positive: ", FP) # 3
1

Ma trận nhầm lẫn dưới dạng Bản đồ nhiệt

Hiển thị Ma trận Nhầm lẫn bằng Pandas

FP = 0
for i in range(0,len(labels)):
if labels[i] == 0 and predictions[i] == 1:
FP+=1
print("False Positive: ", FP) # 3
2

Ma trận nhầm lẫn sử dụng Pandas

Sử dụng Sklearn để tạo Báo cáo phân loại 👔____23

Dưới đây là đầu ra

Đầu ra mã

Phần kết luận

Chỉ riêng độ chính xác không thể xác định xem một mô hình là tốt hay xấu nhưng độ chính xác kết hợp với độ chính xác, khả năng thu hồi và Điểm F1 có thể đưa ra ý tưởng tốt về hiệu suất của mô hình

độ chính xác và thu hồi với ví dụ là gì?

Khi công cụ tìm kiếm trả về 30 trang, trong đó chỉ có 20 trang có liên quan, trong khi không trả về 40 trang bổ sung có liên quan, độ chính xác của nó là 20/30 = 2/3, cho chúng tôi biết mức độ hợp lệ của kết quả, trong khi khả năng thu hồi của nó là 20/

Thu hồi chính xác là gì?

Độ chính xác được tính bằng cách chia số dương thực cho bất kỳ thứ gì được dự đoán là dương. Thu hồi (hoặc Tỷ lệ tích cực thực) được tính bằng cách chia số tích cực thực sự cho bất kỳ thứ gì lẽ ra phải được dự đoán là tích cực

Sự khác biệt giữa độ chính xác và thu hồi là gì?

Độ chính xác và thu hồi là hai chỉ số đánh giá mô hình cực kỳ quan trọng. Mặc dù độ chính xác đề cập đến tỷ lệ phần trăm kết quả của bạn có liên quan, nhưng khả năng thu hồi đề cập đến tỷ lệ phần trăm của tổng số kết quả có liên quan được thuật toán của bạn phân loại chính xác

Thu hồi trong Python là gì?

Việc thu hồi là tỷ lệ tp / (tp + fn) trong đó tp là số lượng dương tính thật và fn là số lượng âm tính giả . Việc thu hồi trực quan là khả năng của bộ phân loại tìm thấy tất cả các mẫu dương tính.