Độ 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ố 8Nhớ 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
0Vớ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
2Mặ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
3Vớ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
5Khô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
6Vớ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
7Ma 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
8Ví 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
9Bạ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
0Ma 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
1Ma 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
2Ma 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