Có thể linh hoạt hơn để dự đoán xác suất của một quan sát thuộc về từng lớp trong bài toán phân loại hơn là dự đoán trực tiếp các lớp
Tính linh hoạt này xuất phát từ cách mà các xác suất có thể được giải thích bằng cách sử dụng các ngưỡng khác nhau cho phép người vận hành mô hình đánh đổi những lo ngại về lỗi do mô hình gây ra, chẳng hạn như số lần dương tính giả so với số lần âm tính giả. Điều này là cần thiết khi sử dụng các mô hình mà chi phí của một lỗi lớn hơn chi phí của các loại lỗi khác
Hai công cụ chẩn đoán giúp giải thích dự báo xác suất cho các vấn đề mô hình dự đoán phân loại nhị phân [hai lớp] là Đường cong ROC và Đường cong thu hồi chính xác
Trong hướng dẫn này, bạn sẽ khám phá Đường cong ROC, Đường cong thu hồi chính xác và khi nào sử dụng từng loại để diễn giải dự đoán xác suất cho các bài toán phân loại nhị phân
Sau khi hoàn thành hướng dẫn này, bạn sẽ biết
- Đường cong ROC tóm tắt sự đánh đổi giữa tỷ lệ dương thực và tỷ lệ dương tính giả đối với mô hình dự đoán sử dụng các ngưỡng xác suất khác nhau
- Các đường cong Thu hồi chính xác tóm tắt sự đánh đổi giữa tỷ lệ dương thực và giá trị dự đoán dương cho một mô hình dự đoán sử dụng các ngưỡng xác suất khác nhau
- Các đường cong ROC phù hợp khi các quan sát được cân bằng giữa mỗi lớp, trong khi các đường cong thu hồi chính xác phù hợp với các bộ dữ liệu không cân bằng
Bắt đầu dự án của bạn với cuốn sách mới của tôi Xác suất cho Máy học, bao gồm hướng dẫn từng bước và tệp mã nguồn Python cho tất cả các ví dụ
Bắt đầu nào
- Cập nhật tháng 8/2018. Đã sửa lỗi trong biểu diễn của dòng không có kỹ năng cho cốt truyện thu hồi chính xác. Cũng đã sửa lỗi đánh máy khi tôi gọi ROC là người thân thay vì người nhận [nhờ kiểm tra chính tả]
- Cập nhật tháng 11/2018. Đã sửa lỗi mô tả về diễn giải kích thước của các giá trị trên mỗi trục, cảm ơn Karl Humphries
- Cập nhật tháng 6/2019. Đã sửa lỗi đánh máy khi giải thích kết quả không cân bằng
- Cập nhật tháng 10/2019. Đã cập nhật các biểu đồ Đường cong ROC và Đường cong thu hồi chính xác để thêm nhãn, sử dụng mô hình hồi quy logistic và thực sự tính toán hiệu suất của trình phân loại không có kỹ năng
- Cập nhật tháng 11/2019. Cải thiện mô tả không có trình phân loại kỹ năng cho đường cong thu hồi chính xác
Cách thức và thời điểm sử dụng Đường cong ROC và Đường cong thu hồi chính xác để phân loại trong Python
Ảnh của Giuseppe Milo, một số quyền được bảo lưu.
Hướng dẫn tổng quan
Hướng dẫn này được chia thành 6 phần;
- Dự đoán xác suất
- Đường cong ROC là gì?
- Đường cong ROC và AUC trong Python
- Precision-Recall Curves là gì?
- Precision-Recall Curves và AUC trong Python
- Khi nào nên sử dụng ROC so với. Đường cong thu hồi chính xác?
Dự đoán xác suất
Trong một vấn đề phân loại, chúng ta có thể quyết định dự đoán trực tiếp các giá trị của lớp
Thay vào đó, có thể linh hoạt hơn để dự đoán xác suất cho từng lớp thay vì. Lý do cho điều này là để cung cấp khả năng lựa chọn và thậm chí hiệu chỉnh ngưỡng cho cách diễn giải các xác suất dự đoán
Ví dụ: mặc định có thể sử dụng ngưỡng 0. 5, nghĩa là xác suất trong [0. 0, 0. 49] là một kết quả tiêu cực [0] và xác suất trong [0. 5, 1. 0] là một kết quả tích cực [1]
Ngưỡng này có thể được điều chỉnh để điều chỉnh hành vi của mô hình cho một vấn đề cụ thể. Một ví dụ sẽ là giảm nhiều loại lỗi này hoặc loại lỗi khác
Khi đưa ra dự đoán cho bài toán phân loại nhị phân hoặc hai lớp, có hai loại lỗi mà chúng ta có thể mắc phải
- dương tính giả. Dự đoán một sự kiện khi không có sự kiện
- Âm tính giả. Dự đoán không có sự kiện trong khi thực tế đã có một sự kiện
Bằng cách dự đoán xác suất và hiệu chỉnh ngưỡng, người điều hành mô hình có thể chọn sự cân bằng của hai mối quan tâm này
Ví dụ: trong một hệ thống dự đoán sương mù, chúng ta có thể quan tâm nhiều hơn đến việc có tỷ lệ âm tính giả thấp hơn là tỷ lệ dương tính giả thấp. Âm tính giả có nghĩa là không cảnh báo về một ngày có sương mù trong khi thực tế đó là một ngày có nhiều sương mù, dẫn đến các vấn đề sức khỏe cộng đồng mà không thể đề phòng. Kết quả dương tính giả có nghĩa là công chúng sẽ thực hiện các biện pháp phòng ngừa khi họ không cần
Một cách phổ biến để so sánh các mô hình dự đoán xác suất cho các bài toán hai lớp là sử dụng đường cong ROC
Đường cong ROC là gì?
Một công cụ hữu ích khi dự đoán xác suất của kết quả nhị phân là đường cong Đặc tính hoạt động của máy thu hoặc đường cong ROC
Nó là biểu đồ của tỷ lệ dương tính giả [trục x] so với tỷ lệ dương tính thực [trục y] đối với một số giá trị ngưỡng ứng cử viên khác nhau trong khoảng từ 0. 0 và 1. 0. Nói cách khác, nó vẽ tỷ lệ cảnh báo sai so với tỷ lệ trúng
Tỷ lệ dương tính thực được tính bằng số dương tính thật chia cho tổng số dương tính thật và số âm tính giả. Nó mô tả mức độ tốt của mô hình trong việc dự đoán lớp tích cực khi kết quả thực tế là tích cực
1
Tỷ lệ tích cực thực sự = Tích cực thực sự / [Tích cực đúng + Tiêu cực sai]
Tỷ lệ tích cực thực sự còn được gọi là độ nhạy
1
Độ nhạy = Tích cực đúng / [Tích cực đúng + Tiêu cực sai]
Tỷ lệ dương tính giả được tính bằng số lần dương tính giả chia cho tổng số lần dương tính giả và số lần âm tính thật
Nó còn được gọi là tỷ lệ cảnh báo sai vì nó tóm tắt tần suất một lớp tích cực được dự đoán khi kết quả thực tế là tiêu cực
1
Tỷ lệ dương tính giả = Dương tính giả / [Dương tính giả + Âm tính thật]
Tỷ lệ dương tính giả còn được gọi là độ đặc hiệu đảo ngược trong đó độ đặc hiệu là tổng số âm tính thật chia cho tổng số âm tính thật và dương tính giả
1
Specificity = True Negatives / [True Negatives + False Positives]
Ở đâu
1
False Positive Rate = 1 - Specificity
Đường cong ROC là một công cụ hữu ích vì một vài lý do
- Các đường cong của các mô hình khác nhau có thể được so sánh trực tiếp nói chung hoặc cho các ngưỡng khác nhau
- The area under the curve [AUC] can be used as a summary of the model skill
Hình dạng của đường cong chứa rất nhiều thông tin, bao gồm những gì chúng ta có thể quan tâm nhất đối với một vấn đề, tỷ lệ dương tính giả dự kiến và tỷ lệ âm tính giả
Để làm rõ điều này
- Smaller values on the x-axis of the plot indicate lower false positives and higher true negatives
- Các giá trị lớn hơn trên trục y của biểu đồ biểu thị giá trị dương thực cao hơn và giá trị âm sai thấp hơn
Nếu bạn bối rối, hãy nhớ rằng, khi chúng tôi dự đoán một kết quả nhị phân, thì đó là dự đoán đúng [dương thực] hoặc không [dương tính giả]. Có một sự căng thẳng giữa các tùy chọn này, tương tự với âm tính thật và âm tính giả
Một mô hình khéo léo sẽ gán xác suất cao hơn cho một lần xuất hiện tích cực thực sự được chọn ngẫu nhiên so với một lần xuất hiện tiêu cực trung bình. This is what we mean when we say that the model has skill. Nói chung, các mô hình khéo léo được thể hiện bằng các đường cong hướng lên phía trên bên trái của biểu đồ
Bộ phân loại không có kỹ năng là bộ không thể phân biệt giữa các lớp và sẽ dự đoán một lớp ngẫu nhiên hoặc một lớp không đổi trong mọi trường hợp. A model with no skill is represented at the point [0. 5, 0. 5]. Một mô hình không có kỹ năng ở mỗi ngưỡng được biểu thị bằng một đường chéo từ dưới cùng bên trái của biểu đồ lên trên cùng bên phải và có AUC bằng 0. 5
Một mô hình với kỹ năng hoàn hảo được biểu diễn tại điểm [0,1]. Một mô hình với kỹ năng hoàn hảo được thể hiện bằng một đường đi từ dưới cùng bên trái của biểu đồ lên trên cùng bên trái và sau đó băng qua trên cùng sang trên cùng bên phải
Người vận hành có thể vẽ đường cong ROC cho mô hình cuối cùng và chọn ngưỡng mang lại sự cân bằng mong muốn giữa dương tính giả và âm tính giả
Muốn tìm hiểu xác suất cho máy học
Tham gia khóa học xử lý sự cố email miễn phí trong 7 ngày của tôi ngay bây giờ [có mã mẫu]
Nhấp để đăng ký và cũng nhận được phiên bản PDF Ebook miễn phí của khóa học
Tải xuống khóa học nhỏ MIỄN PHÍ của bạn
Đường cong ROC và AUC trong Python
Chúng ta có thể vẽ đường cong ROC cho một mô hình trong Python bằng cách sử dụng hàm scikit-learn roc_curve[]
Hàm lấy cả kết quả thực [0,1] từ tập kiểm tra và xác suất dự đoán cho lớp 1. Hàm trả về tỷ lệ dương sai cho từng ngưỡng, tỷ lệ dương thực cho từng ngưỡng và các ngưỡng
1
2
3
.. .
# tính toán đường cong roc
cho, tpr, ngưỡng = roc_curve[y, probs]
AUC cho ROC có thể được tính bằng hàm roc_auc_score[]
Giống như hàm roc_curve[], hàm AUC lấy cả kết quả thực [0,1] từ tập kiểm tra và xác suất dự đoán cho lớp 1. Nó trả về điểm AUC giữa 0. 0 và 1. 0 cho kỹ năng không có kỹ năng và kỹ năng hoàn hảo tương ứng
1
2
3
4
.. .
# tính AUC
auc = roc_auc_score[y, probs]
in['AUC. %. 3f' % auc]
Dưới đây là một ví dụ hoàn chỉnh về tính toán đường cong ROC và ROC AUC cho mô hình Hồi quy logistic trên một bài toán thử nghiệm nhỏ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# roc cong va auc
từ sklearn. bộ dữ liệu nhập make_classification
from sklearn. linear_model nhập LogisticRegression
từ sklearn. model_selection nhập train_test_split
từ sklearn. số liệu nhập roc_curve
từ sklearn. số liệu nhập roc_auc_score
từ matplotlib nhập pyplot
# tạo tập dữ liệu 2 lớp
X, y = make_classification[n_samples=1000, n_classes=2, random_state=1]
# split into train/test sets
đào tạoX, testX, đào tạo, testy = train_test_split[X, y, test_size=0.5, random_state=2]
# tạo dự đoán không có kỹ năng [lớp đa số]
ns_probs = [0 cho _ in range[len[testy]]]
#phù hợp với một mô hình
mô hình = Hồi quy logistic[bộ giải='lbfgs']
mô hình. phù hợp[đào tạoX, đào tạo]
# dự đoán xác suất
lr_probs = mô hình. predict_proba[testX]
# chỉ giữ xác suất cho kết quả tích cực
lr_probs = lr_probs[. , 1]
# tính điểm
ns_auc = roc_auc_score[bài kiểm tra, ns_probs]
lr_auc = roc_auc_score[bài kiểm tra, lr_probs]
# tổng kết điểm
in['Không có kỹ năng. ROC AUC=%. 3f' % [ns_auc]]
in['Logistic. ROC AUC=%. 3f' % [lr_auc]]
# tính toán đường cong roc
ns_fpr, ns_tpr, _ = roc_curve[testy, ns_probs]
lr_fpr, lr_tpr, _ = roc_curve[testy, lr_probs]
# vẽ đường cong roc cho mô hình
pyplot. cốt truyện[ns_fpr, ns_tpr, linestyle='--', label='No Skill']
pyplot. cốt truyện[lr_fpr, lr_tpr . ', marker='.', nhãn='Logistics']
# nhãn trục
pyplot. xlabel['Tỷ lệ dương tính giả']
pyplot. ylabel['Tỷ lệ tích cực thực sự']
# hiển thị huyền thoại
pyplot. chú thích[]
# hiển thị cốt truyện
pyplot. hiển thị[]
Chạy ví dụ in ROC AUC cho mô hình hồi quy logistic và trình phân loại không có kỹ năng chỉ dự đoán 0 cho tất cả các ví dụ
1
2
không có kỹ năng. ROC AUC=0. 500
hậu cần. ROC AUC=0. 903
Một đồ thị của đường cong ROC cho mô hình cũng được tạo ra cho thấy rằng mô hình có kỹ năng
Ghi chú. Kết quả của bạn có thể thay đổi do tính chất ngẫu nhiên của thuật toán hoặc quy trình đánh giá hoặc sự khác biệt về độ chính xác của các con số. Cân nhắc chạy ví dụ một vài lần và so sánh kết quả trung bình
Biểu đồ đường cong ROC cho Trình phân loại không có kỹ năng và Mô hình hồi quy logistic
Precision-Recall Curves là gì?
Có nhiều cách để đánh giá kỹ năng của một mô hình dự đoán
Một cách tiếp cận trong lĩnh vực truy xuất thông tin liên quan [tìm tài liệu dựa trên các truy vấn] đo lường độ chính xác và khả năng thu hồi
Các biện pháp này cũng hữu ích trong học máy ứng dụng để đánh giá các mô hình phân loại nhị phân
Độ chính xác là tỷ lệ giữa số lượng dương tính thực chia cho tổng của dương tính thật và dương tính giả. Nó mô tả mức độ tốt của một mô hình trong việc dự đoán lớp tích cực. Độ chính xác được gọi là giá trị tiên đoán dương
1
Khả năng dự đoán tích cực = Tích cực đúng / [Tích cực đúng + Tích cực sai]
hoặc
1
Độ chính xác = Tích cực đúng / [Tích cực đúng + Tích cực sai]
Thu hồi được tính bằng tỷ lệ giữa số lượng dương tính thật chia cho tổng số dương tính thật và âm tính giả. Nhớ lại cũng giống như độ nhạy
1
Nhớ lại = Tích cực đúng / [Tích cực đúng + Tiêu cực sai]
hoặc
1
Độ nhạy = Tích cực đúng / [Tích cực đúng + Tiêu cực sai]
1
Nhớ lại == Độ nhạy
Xem lại cả độ chính xác và khả năng thu hồi rất hữu ích trong trường hợp có sự mất cân bằng trong các quan sát giữa hai lớp. Cụ thể, có nhiều ví dụ không có sự kiện [lớp 0] và chỉ một vài ví dụ có sự kiện [lớp 1]
Lý do cho điều này là thông thường, số lượng lớn các ví dụ về lớp 0 có nghĩa là chúng ta ít quan tâm đến kỹ năng của mô hình trong việc dự đoán chính xác lớp 0, e. g. tiêu cực thực sự cao
Chìa khóa để tính toán độ chính xác và thu hồi là các phép tính không sử dụng các phủ định thực. Nó chỉ liên quan đến dự đoán đúng của lớp thiểu số, lớp 1
Đường cong thu hồi độ chính xác là một đồ thị của độ chính xác [trục y] và độ thu hồi [trục x] cho các ngưỡng khác nhau, giống như đường cong ROC
Bộ phân loại không có kỹ năng là bộ không thể phân biệt giữa các lớp và sẽ dự đoán một lớp ngẫu nhiên hoặc một lớp không đổi trong mọi trường hợp. Dòng không có kỹ năng thay đổi dựa trên sự phân bố của các lớp tích cực và tiêu cực. Đó là một đường nằm ngang với giá trị tỷ lệ các trường hợp dương tính trong tập dữ liệu. Đối với tập dữ liệu cân bằng, đây là 0. 5
Mặc dù đường cơ sở được cố định với ROC, nhưng đường cơ sở của [đường thu hồi chính xác] được xác định theo tỷ lệ giữa giá trị dương [P] và giá trị âm [N] là y = P / [P + N]. Chẳng hạn, chúng ta có y = 0. 5 để phân bổ lớp học cân bằng…
— Biểu đồ thu hồi chính xác có nhiều thông tin hơn biểu đồ ROC khi đánh giá các bộ phân loại nhị phân trên các bộ dữ liệu không cân bằng, 2015
Một mô hình với kỹ năng hoàn hảo được mô tả như một điểm tại [1,1]. Một mô hình khéo léo được thể hiện bằng một đường cong cong về phía [1,1] phía trên đường phẳng không có kỹ năng
Ngoài ra còn có các điểm tổng hợp cố gắng tóm tắt độ chính xác và khả năng thu hồi;
- F-Measure hoặc điểm F1. tính toán giá trị trung bình hài hòa của độ chính xác và thu hồi [trung bình hài hòa vì độ chính xác và thu hồi là tỷ lệ]
- Khu vực dưới đường cong. như AUC, tóm tắt tích phân hoặc xấp xỉ diện tích dưới đường cong thu hồi chính xác
Về mặt lựa chọn mô hình, F-Measure tóm tắt kỹ năng mô hình cho một ngưỡng xác suất cụ thể [e. g. 0. 5], trong khi khu vực dưới đường cong tóm tắt kỹ năng của mô hình qua các ngưỡng, như ROC AUC
Điều này giúp thu hồi độ chính xác và biểu đồ độ chính xác so với. các biện pháp thu hồi và tóm tắt các công cụ hữu ích cho các vấn đề phân loại nhị phân có sự mất cân bằng trong các quan sát cho mỗi lớp
Đường cong thu hồi chính xác trong Python
Độ chính xác và thu hồi có thể được tính toán trong scikit-learning
Độ chính xác và thu hồi có thể được tính cho các ngưỡng bằng cách sử dụng hàm precision_recall_curve[] lấy các giá trị đầu ra thực và xác suất cho lớp tích cực làm đầu vào và trả về các giá trị chính xác, thu hồi và ngưỡng
1
2
3
.. .
# tính toán đường cong thu hồi chính xác
độ chính xác, thu hồi, ngưỡng = precision_recall_curve[testy, probs]
F-Measure có thể được tính bằng cách gọi hàm f1_score[] lấy các giá trị lớp thực và các giá trị lớp dự đoán làm đối số
1
2
3
.. .
# tính điểm F1
f1 = f1_score[bài kiểm tra, yhat]
Khu vực bên dưới đường cong thu hồi độ chính xác có thể được tính gần đúng bằng cách gọi hàm auc[] và chuyển cho nó các giá trị thu hồi [x] và độ chính xác [y] được tính cho từng ngưỡng
1
2
3
.. .
# tính toán AUC thu hồi chính xác
auc = auc[thu hồi, precision]
Khi vẽ sơ đồ độ chính xác và thu hồi cho từng ngưỡng dưới dạng một đường cong, điều quan trọng là thu hồi được cung cấp dưới dạng trục x và độ chính xác được cung cấp dưới dạng trục y
Ví dụ hoàn chỉnh về tính toán các đường cong thu hồi độ chính xác cho mô hình Hồi quy logistic được liệt kê bên dưới
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# đường cong thu hồi độ chính xác và f1
từ sklearn. bộ dữ liệu nhập make_classification
from sklearn. linear_model nhập LogisticRegression
từ sklearn. model_selection nhập train_test_split
từ sklearn. số liệu nhập precision_recall_curve
từ sklearn. chỉ số nhập f1_score
từ sklearn. số liệu nhập auc
từ matplotlib nhập pyplot
# tạo tập dữ liệu 2 lớp
X, y = make_classification[n_samples=1000, n_classes=2, random_state=1]
# split into train/test sets
đào tạoX, testX, đào tạo, testy = train_test_split[X, y, test_size=0.5, random_state=2]
#phù hợp với một mô hình
mô hình = Hồi quy logistic[bộ giải='lbfgs']
mô hình. phù hợp[đào tạoX, đào tạo]
# dự đoán xác suất
lr_probs = mô hình. predict_proba[testX]
# chỉ giữ xác suất cho kết quả tích cực
lr_probs = lr_probs[. , 1]
# dự đoán giá trị lớp
yhat = mô hình. dự đoán[testX]
lr_precision, lr_recall, _ = precision_recall_curve[testy, lr_probs]
lr_f1, lr_auc = f1_score[testy, yhat], auc[lr_recall, lr_precision]
# tổng kết điểm
in['Logistic. f1=%. 3f auc=%. 3f' % [lr_f1, lr_auc]]
# vẽ các đường cong thu hồi độ chính xác
no_skill = len[bài kiểm tra[testy==1]] / len[testy]
pyplot. cốt truyện[[0, 1], [no_skill, no_skill], linestyle='--', label='No Skill']
pyplot. biểu đồ[lr_recall, lr_precision . ', marker='.', nhãn='Logistics']
# nhãn trục
pyplot. xlabel['Ghi lại']
pyplot. ylabel['Độ chính xác']
# hiển thị huyền thoại
pyplot. chú thích[]
# hiển thị cốt truyện
pyplot. hiển thị[]
Chạy ví dụ trước tiên sẽ in F1, diện tích dưới đường cong [AUC] cho mô hình hồi quy logistic
Ghi chú. Kết quả của bạn có thể thay đổi do tính chất ngẫu nhiên của thuật toán hoặc quy trình đánh giá hoặc sự khác biệt về độ chính xác của các con số. Cân nhắc chạy ví dụ một vài lần và so sánh kết quả trung bình
1
hậu cần. f1=0. 841 auc=0. 898
Biểu đồ đường cong thu hồi chính xác sau đó được tạo để hiển thị độ chính xác/thu hồi cho từng ngưỡng đối với mô hình hồi quy logistic [màu cam] so với mô hình không có kỹ năng [màu xanh]
Biểu đồ thu hồi chính xác cho Trình phân loại không có kỹ năng và Mô hình hồi quy logistic
Khi nào nên sử dụng ROC so với. Đường cong thu hồi chính xác?
Nói chung, việc sử dụng các đường cong ROC và đường cong thu hồi độ chính xác như sau
- Các đường cong ROC nên được sử dụng khi có số lượng quan sát gần như bằng nhau cho mỗi lớp
- Đường cong Precision-Recall nên được sử dụng khi có sự mất cân bằng lớp từ trung bình đến lớn
Lý do cho khuyến nghị này là các đường cong ROC thể hiện một bức tranh lạc quan về mô hình trên các bộ dữ liệu có sự mất cân bằng về lớp
Tuy nhiên, các đường cong ROC có thể thể hiện một cái nhìn quá lạc quan về hiệu suất của thuật toán nếu có độ lệch lớn trong phân phối lớp. […] Các đường cong Thu hồi chính xác [PR], thường được sử dụng trong Truy xuất thông tin, đã được coi là một giải pháp thay thế cho các đường cong ROC cho các tác vụ có độ lệch lớn trong phân phối lớp
— Mối quan hệ giữa Precision-Recall và ROC Curves, 2006
Một số người đi xa hơn và đề xuất rằng việc sử dụng đường cong ROC với bộ dữ liệu không cân bằng có thể gây nhầm lẫn và dẫn đến cách hiểu sai về kỹ năng mô hình
[…] khả năng diễn giải trực quan của các sơ đồ ROC trong bối cảnh các bộ dữ liệu không cân bằng có thể gây nhầm lẫn đối với các kết luận về độ tin cậy của hiệu suất phân loại, do cách giải thích trực quan nhưng sai về tính đặc hiệu. Mặt khác, các biểu đồ [Đường cong thu hồi chính xác] có thể cung cấp cho người xem dự đoán chính xác về hiệu suất phân loại trong tương lai do thực tế là họ đánh giá tỷ lệ tích cực thực sự trong số các dự đoán tích cực
— Biểu đồ thu hồi chính xác có nhiều thông tin hơn biểu đồ ROC khi đánh giá các bộ phân loại nhị phân trên các bộ dữ liệu không cân bằng, 2015
Lý do chính cho bức tranh lạc quan này là do việc sử dụng các phủ định thực sự trong Tỷ lệ dương tính giả trong Đường cong ROC và cẩn thận tránh tỷ lệ này trong đường cong Thu hồi chính xác
Nếu tỷ lệ các trường hợp tích cực và tiêu cực thay đổi trong tập hợp thử nghiệm, các đường cong ROC sẽ không thay đổi. Các số liệu như độ chính xác, độ chính xác, mức tăng và điểm F sử dụng các giá trị từ cả hai cột của ma trận nhầm lẫn. Khi phân phối lớp thay đổi, các biện pháp này cũng sẽ thay đổi, ngay cả khi hiệu suất của bộ phân loại cơ bản không. Biểu đồ ROC dựa trên tỷ lệ TP và tỷ lệ FP, trong đó mỗi thứ nguyên là tỷ lệ cột nghiêm ngặt, do đó không phụ thuộc vào phân phối lớp
— Đồ thị ROC. Ghi chú và cân nhắc thực tế cho các nhà nghiên cứu khai thác dữ liệu, 2003
Chúng ta có thể làm cho điều này cụ thể với một ví dụ ngắn
Dưới đây là cùng một ví dụ về Đường cong ROC với một vấn đề được sửa đổi trong đó có tỷ lệ khoảng 100. 1 tỷ lệ quan sát của lớp=0 so với lớp=1 [cụ thể là Lớp0=985, Lớp1=15]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# đường cong roc và auc trên tập dữ liệu không cân bằng
từ sklearn. bộ dữ liệu nhập make_classification
from sklearn. linear_model nhập LogisticRegression
từ sklearn. model_selection nhập train_test_split
từ sklearn. số liệu nhập roc_curve
từ sklearn. số liệu nhập roc_auc_score
từ matplotlib nhập pyplot
# tạo tập dữ liệu 2 lớp
X, y = make_classification[n_samples=1000, n_classes=2, weights=[0.99,0. 01], random_state=1]
# split into train/test sets
đào tạoX, testX, đào tạo, testy = train_test_split[X, y, test_size=0.5, random_state=2]
# tạo dự đoán không có kỹ năng [lớp đa số]
ns_probs = [0 cho _ in range[len[testy]]]
#phù hợp với một mô hình
mô hình = Hồi quy logistic[bộ giải='lbfgs']
mô hình. phù hợp[đào tạoX, đào tạo]
# dự đoán xác suất
lr_probs = mô hình. predict_proba[testX]
# chỉ giữ xác suất cho kết quả tích cực
lr_probs = lr_probs[. , 1]
# tính điểm
ns_auc = roc_auc_score[bài kiểm tra, ns_probs]
lr_auc = roc_auc_score[bài kiểm tra, lr_probs]
# tổng kết điểm
in['Không có kỹ năng. ROC AUC=%. 3f' % [ns_auc]]
in['Logistic. ROC AUC=%. 3f' % [lr_auc]]
# tính toán đường cong roc
ns_fpr, ns_tpr, _ = roc_curve[testy, ns_probs]
lr_fpr, lr_tpr, _ = roc_curve[testy, lr_probs]
# vẽ đường cong roc cho mô hình
pyplot. cốt truyện[ns_fpr, ns_tpr, linestyle='--', label='No Skill']
pyplot. cốt truyện[lr_fpr, lr_tpr . ', marker='.', nhãn='Logistics']
# nhãn trục
pyplot. xlabel['Tỷ lệ dương tính giả']
pyplot. ylabel['Tỷ lệ tích cực thực sự']
# hiển thị huyền thoại
pyplot. chú thích[]
# hiển thị cốt truyện
pyplot. hiển thị[]
Chạy ví dụ cho thấy mô hình có kỹ năng
Ghi chú. Kết quả của bạn có thể thay đổi do tính chất ngẫu nhiên của thuật toán hoặc quy trình đánh giá hoặc sự khác biệt về độ chính xác của các con số. Cân nhắc chạy ví dụ một vài lần và so sánh kết quả trung bình
1
2
không có kỹ năng. ROC AUC=0. 500
hậu cần. ROC AUC=0. 716
Thật vậy, nó có kỹ năng, nhưng tất cả kỹ năng đó được đo lường bằng cách đưa ra những dự đoán tiêu cực thực sự chính xác và có rất nhiều dự đoán tiêu cực cần đưa ra
Xem lại các dự đoán sẽ thấy mô hình dự đoán lớp đa số [lớp 0] trong mọi trường hợp trên tập kiểm tra. Điểm số rất sai lệch
Biểu đồ của Đường cong ROC xác nhận cách giải thích AUC của một mô hình khéo léo đối với hầu hết các ngưỡng xác suất
Biểu đồ đường cong ROC cho Trình phân loại không có kỹ năng và Mô hình hồi quy logistic cho Tập dữ liệu không cân bằng
Chúng tôi cũng có thể lặp lại thử nghiệm của cùng một mô hình trên cùng một tập dữ liệu và thay vào đó tính toán đường cong thu hồi chính xác và số liệu thống kê
Ví dụ đầy đủ được liệt kê dưới đây
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# đường cong thu hồi độ chính xác và f1 cho tập dữ liệu không cân bằng
từ sklearn. bộ dữ liệu nhập make_classification
from sklearn. linear_model nhập LogisticRegression
từ sklearn. model_selection nhập train_test_split
từ sklearn. số liệu nhập precision_recall_curve
từ sklearn. chỉ số nhập f1_score
từ sklearn. số liệu nhập auc
từ matplotlib nhập pyplot
# tạo tập dữ liệu 2 lớp
X, y = make_classification[n_samples=1000, n_classes=2, weights=[0.99,0. 01], random_state=1]
# split into train/test sets
đào tạoX, testX, đào tạo, testy = train_test_split[X, y, test_size=0.5, random_state=2]
#phù hợp với một mô hình
mô hình = Hồi quy logistic[bộ giải='lbfgs']
mô hình. phù hợp[đào tạoX, đào tạo]
# dự đoán xác suất
lr_probs = mô hình. predict_proba[testX]
# chỉ giữ xác suất cho kết quả tích cực
lr_probs = lr_probs[. , 1]
# dự đoán giá trị lớp
yhat = mô hình. dự đoán[testX]
# tính toán độ chính xác và thu hồi cho từng ngưỡng
lr_precision, lr_recall, _ = precision_recall_curve[testy, lr_probs]
# tính điểm
lr_f1, lr_auc = f1_score[testy, yhat], auc[lr_recall, lr_precision]
# tổng kết điểm
in['Logistic. f1=%. 3f auc=%. 3f' % [lr_f1, lr_auc]]
# vẽ các đường cong thu hồi độ chính xác
no_skill = len[bài kiểm tra[testy==1]] / len[testy]
pyplot. cốt truyện[[0, 1], [no_skill, no_skill], linestyle='--', label='No Skill']
pyplot. biểu đồ[lr_recall, lr_precision . ', marker='.', nhãn='Logistics']
# nhãn trục
pyplot. xlabel['Ghi lại']
pyplot. ylabel['Độ chính xác']
# hiển thị huyền thoại
pyplot. chú thích[]
# hiển thị cốt truyện
pyplot. hiển thị[]
Chạy ví dụ đầu tiên in điểm F1 và AUC
Ghi chú. Kết quả của bạn có thể thay đổi do tính chất ngẫu nhiên của thuật toán hoặc quy trình đánh giá hoặc sự khác biệt về độ chính xác của các con số. Cân nhắc chạy ví dụ một vài lần và so sánh kết quả trung bình
Chúng ta có thể thấy rằng mô hình bị phạt vì dự đoán lớp đa số trong mọi trường hợp. Điểm số cho thấy mô hình trông đẹp theo Đường cong ROC trên thực tế hầu như không khéo léo khi được xem xét sử dụng độ chính xác và thu hồi tập trung vào lớp tích cực
1
hậu cần. f1=0. 000 auc=0. 054
Biểu đồ của đường cong thu hồi độ chính xác làm nổi bật rằng mô hình chỉ vừa đủ ở trên đường không có kỹ năng đối với hầu hết các ngưỡng
Điều này là có thể bởi vì mô hình dự đoán xác suất và không chắc chắn về một số trường hợp. Chúng được hiển thị thông qua các ngưỡng khác nhau được đánh giá trong quá trình xây dựng đường cong, lật một số loại 0 thành loại 1, mang lại một số độ chính xác nhưng khả năng thu hồi rất thấp
Biểu đồ thu hồi chính xác cho Trình phân loại không có kỹ năng và Mô hình hồi quy logistic cho Tập dữ liệu không cân bằng
Đọc thêm
Phần này cung cấp nhiều tài nguyên hơn về chủ đề này nếu bạn muốn tìm hiểu sâu hơn
giấy tờ
- Một cuộc điều tra quan trọng về thu hồi và độ chính xác như là thước đo hiệu suất của hệ thống truy xuất, 1989
- Mối quan hệ giữa Precision-Recall và ROC Curves, 2006
- Biểu đồ thu hồi chính xác có nhiều thông tin hơn biểu đồ ROC khi đánh giá các bộ phân loại nhị phân trên các bộ dữ liệu không cân bằng, 2015
- Đồ thị ROC. Ghi chú và cân nhắc thực tế cho các nhà nghiên cứu khai thác dữ liệu, 2003
API
- sklearning. chỉ số. API roc_curve
- sklearning. chỉ số. API roc_auc_score
- sklearning. chỉ số. API precision_recall_curve
- sklearning. chỉ số. auc API
- sklearning. chỉ số. API Average_precision_score
- Precision-Recall, scikit-learning
- Độ chính xác, thu hồi và F-đo, scikit-learning
Bài viết
- Đặc điểm hoạt động của máy thu trên Wikipedia
- Độ nhạy và độ đặc hiệu trên Wikipedia
- Độ chính xác và thu hồi trên Wikipedia
- Truy xuất thông tin trên Wikipedia
- Điểm F1 trên Wikipedia
- ROC và thu hồi chính xác với bộ dữ liệu không cân bằng, blog
Tóm lược
Trong phần hướng dẫn này, bạn đã khám phá ra các Đường cong ROC, Đường cong Thu hồi Chính xác và thời điểm sử dụng từng loại để diễn giải dự đoán xác suất cho các bài toán phân loại nhị phân