Roc đường cong ngẫu nhiên trăn rừng

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;

  1. Dự đoán xác suất
  2. Đường cong ROC là gì?
  3. Đường cong ROC và AUC trong Python
  4. Precision-Recall Curves là gì?
  5. Precision-Recall Curves và AUC trong Python
  6. 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

Bạn có thể sử dụng đường cong ROC trên rừng ngẫu nhiên không?

Bạn có thể sử dụng khu vực dưới đường cong để so sánh độ chính xác của Rừng ngẫu nhiên ® Phân loại với mô hình khác, such as a TreeNet ® Classification.

Làm cách nào để tính toán đường cong ROC trong Python?

Đường cong ROC và AUC trong Python . 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. using the roc_auc_score[] function. Like the roc_curve[] function, the AUC function takes both the true outcomes [0,1] from the test set and the predicted probabilities for the 1 class.

AUC trong rừng ngẫu nhiên là gì?

AUC là viết tắt của " Khu vực dưới Đường cong ROC . " Nghĩa là, AUC đo toàn bộ diện tích hai chiều bên dưới toàn bộ đường cong ROC [nghĩ về phép tính tích phân] từ [0,0] đến [1,1].

Roc_curve trong Python là gì?

Đặc tính vận hành của Máy thu tính toán [ROC]. Ghi chú. việc triển khai này bị hạn chế đối với nhiệm vụ phân loại nhị phân. Đọc thêm trong Hướng dẫn sử dụng.

Chủ Đề