Đường cong ROC cho hồi quy logistic đa thức Python

Trong khi làm việc trên một mô hình phân loại, chúng tôi cảm thấy cần một số liệu có thể cho chúng tôi biết mô hình của chúng tôi đang hoạt động như thế nào. Một số liệu cũng có thể đưa ra biểu diễn đồ họa về hiệu suất sẽ rất hữu ích

Đường cong ROC có thể cho chúng tôi điểm một cách hiệu quả về hiệu suất của mô hình trong việc phân loại nhãn. Chúng ta cũng có thể vẽ biểu đồ giữa Tỷ lệ tích cực sai và Tỷ lệ tích cực thực với đường cong ROC [Đặc điểm hoạt động nhận] này. Diện tích dưới đường cong ROC cũng là một số liệu. Diện tích lớn hơn có nghĩa là hiệu suất tốt hơn.
Lưu ý rằng chúng ta có thể sử dụng đường cong ROC cho vấn đề phân loại với hai lớp trong mục tiêu. Đối với Dữ liệu có nhiều hơn hai lớp, chúng tôi phải vẽ đường cong ROC đối với từng lớp, phần còn lại của sự kết hợp của các lớp khác là Lớp sai.

Vì vậy, công thức này là một ví dụ ngắn về cách sử dụng ROC và AUC để xem hiệu suất của mô hình của chúng tôi. Ở đây chúng tôi sẽ sử dụng nó trên hai mô hình để hiểu rõ hơn

Bước 1 - Nhập thư viện - GridSearchCv

from sklearn import datasets from sklearn.tree import DecisionTreeClassifier from sklearn.linear_model import LogisticRegression from sklearn.metrics import roc_curve, roc_auc_score from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt

Ở đây chúng tôi đã nhập các mô-đun khác nhau như. bộ dữ liệu mà từ đó chúng tôi sẽ lấy bộ dữ liệu, DecisionTreeClassifier và LogisticRegression mà chúng tôi sẽ sử dụng một mô hình, roc_curve và roc_auc_score sẽ được sử dụng để lấy điểm và giúp chúng tôi vẽ biểu đồ, train_test_split sẽ chia dữ liệu thành hai phần đào tạo và kiểm tra và plt

Bước 2 - Thiết lập dữ liệu

Ở đây, chúng tôi đã sử dụng bộ dữ liệu để tải bộ dữ liệu wine sẵn có và chúng tôi đã tạo các đối tượng X và y để lưu trữ dữ liệu và giá trị đích tương ứng. dataset = datasets.load_wine[] X = dataset.data y = dataset.target

Bước 3 - Tách dữ liệu và Huấn luyện mô hình

Mô-đun train_test_split được sử dụng để chia dữ liệu thành hai phần, một phần là đào tạo được sử dụng để huấn luyện mô hình và phần còn lại là thử nghiệm được sử dụng để kiểm tra xem mô hình của chúng ta hoạt động như thế nào trên dữ liệu không nhìn thấy được. Ở đây chúng tôi đang vượt qua 0. 3 làm tham số trong train_test_split sẽ phân chia dữ liệu sao cho 30% dữ liệu sẽ ở phần thử nghiệm và 70% còn lại sẽ ở phần đào tạo. ________số 8

Bây giờ chúng tôi đang tạo các đối tượng cho bộ phân loại và đào tạo bộ phân loại với sự phân chia chuỗi của tập dữ liệu i. e x_train và y_train. clf_tree = DecisionTreeClassifier[]; clf_reg = LogisticRegression[]; clf_tree.fit[X_train, y_train]; clf_reg.fit[X_train, y_train];

Bước 5 - Sử dụng các mô hình trên tập dữ liệu thử nghiệm

Sau khi đào tạo trình phân loại trên tập dữ liệu thử nghiệm, chúng tôi đang sử dụng mô hình để dự đoán các giá trị đích cho tập dữ liệu thử nghiệm. Chúng tôi đang lưu trữ lớp dự đoán của cả hai mô hình và chúng tôi sẽ sử dụng nó để lấy điểm ROC AUC

apple ROC AUC OvR: 0.9425
banana ROC AUC OvR: 0.9525
orange ROC AUC OvR: 0.9281
average ROC AUC OvR: 0.9410
0

Bước 6 - Tạo tỷ lệ tích cực sai và đúng và in điểm

Chúng ta phải lấy Tỷ lệ tích cực sai và Tỷ lệ tích cực thực sự cho Bộ phân loại vì chúng sẽ được sử dụng để vẽ đường cong ROC. Điều này có thể được thực hiện bởi mô-đun roc_curve bằng cách chuyển bộ dữ liệu thử nghiệm và dữ liệu dự đoán qua nó. Ở đây chúng tôi đang làm điều này cho cả bộ phân loại.

apple ROC AUC OvR: 0.9425
banana ROC AUC OvR: 0.9525
orange ROC AUC OvR: 0.9281
average ROC AUC OvR: 0.9410
1 Bây giờ, để nhận điểm ROC_AUC, chúng ta chỉ cần chuyển dữ liệu thử nghiệm và dữ liệu dự đoán vào hàm roc_auc_score. Chúng tôi đang in nó với báo cáo in để hiểu rõ hơn.
apple ROC AUC OvR: 0.9425
banana ROC AUC OvR: 0.9525
orange ROC AUC OvR: 0.9281
average ROC AUC OvR: 0.9410
2

Bước 7 - Vẽ các đường cong ROC

Chúng tôi đang vẽ hai Đường cong ROC dưới dạng các ô con, một cho Trình phân loại cây quyết định và một cho Hồi quy logistic. Cả hai đều có Tỷ lệ dương sai tương ứng trên trục X và Tỷ lệ dương thực trên trục Y.

apple ROC AUC OvR: 0.9425
banana ROC AUC OvR: 0.9525
orange ROC AUC OvR: 0.9281
average ROC AUC OvR: 0.9410
3 Như một đầu ra chúng tôi nhận được

Điều chỉnh thước đo đánh giá phân loại được sử dụng nhiều nhất cho vấn đề phân loại đa lớp với các chiến lược OvR và OvO

Hình ảnh của tác giả

Khi đánh giá các mô hình phân loại đa lớp, đôi khi chúng tôi cần điều chỉnh các số liệu được sử dụng trong phân loại nhị phân để hoạt động trong cài đặt này. Chúng ta có thể làm điều đó bằng cách sử dụng các chiến lược OvR và OvO

Trong bài viết này, tôi sẽ trình bày cách điều chỉnh các chỉ số ROC Curve và ROC AUC để phân loại nhiều lớp

Đường cong ROC và điểm ROC AUC là những công cụ quan trọng để đánh giá các mô hình phân loại nhị phân. Tóm lại, chúng cho chúng ta thấy khả năng phân tách của các lớp theo tất cả các ngưỡng có thể, hay nói cách khác, mô hình phân loại từng lớp tốt như thế nào

Như tôi đã giải thích trong một bài viết khác, chúng ta có thể so sánh Đường cong ROC [hình trên] với biểu đồ tương ứng của chúng [hình dưới]. Các biểu đồ càng tách biệt thì các Đường cong ROC càng tốt

So sánh đường cong ROC. Hình ảnh của tác giả

So sánh biểu đồ tách lớp. Hình ảnh của tác giả

Nhưng khái niệm này không thể áp dụng ngay cho các bộ phân loại nhiều lớp. Để sử dụng ROC Curves và ROC AUC trong kịch bản này, chúng ta cần một cách khác để so sánh các lớp. OvR và OvO

Trong các phần sau tôi sẽ giải thích rõ hơn và bạn cũng có thể kiểm tra mã trên github của tôi

Bài viết/Đường cong ROC và ROC AUC tại chính · vinyluis/Bài viết

Điều 1. Giải thích Đường cong ROC và ROC AUC để Đánh giá Phân loại [TBD] [EN] Đường cong ROC là gì, cách…

github. com

OvR hay OvO?

OvR — Một vs Phần còn lại

OvR là viết tắt của “One vs Rest”, và như tên gợi ý là một phương pháp để đánh giá các mô hình đa lớp bằng cách so sánh từng lớp với tất cả các lớp khác cùng một lúc. Trong kịch bản này, chúng tôi chọn một lớp và coi đó là lớp “tích cực” của mình, trong khi tất cả các lớp khác [phần còn lại] được coi là lớp “tiêu cực”

Bằng cách này, chúng tôi giảm đầu ra phân loại đa lớp thành phân loại nhị phân và do đó có thể sử dụng tất cả các số liệu phân loại nhị phân đã biết để đánh giá tình huống này

Chúng tôi phải lặp lại điều này cho từng lớp có trên dữ liệu, vì vậy đối với tập dữ liệu 3 lớp, chúng tôi nhận được 3 điểm OvR khác nhau. Cuối cùng, chúng ta có thể tính trung bình chúng [trung bình đơn giản hoặc có trọng số] để có điểm mô hình OvR cuối cùng

Kết hợp OvR cho cài đặt ba lớp. Hình ảnh của tác giả

OvO — Một vs Một

Bây giờ, như bạn có thể tưởng tượng, OvO là viết tắt của “One vs One” và thực sự giống với OvR, nhưng thay vì so sánh từng lớp với phần còn lại, chúng tôi so sánh tất cả các kết hợp hai lớp có thể có của tập dữ liệu

Giả sử chúng ta có kịch bản 3 lớp và chúng tôi chọn kết hợp “Lớp 1 và Lớp 2” làm kịch bản đầu tiên. Bước đầu tiên là lấy một bản sao của tập dữ liệu chỉ chứa hai lớp và loại bỏ tất cả các lớp khác. Sau đó, chúng tôi xác định các quan sát với lớp thực = “Class1” là lớp tích cực của chúng tôi và những quan sát có lớp thực = “Class2” là lớp phủ định của chúng tôi. Bây giờ vấn đề là nhị phân, chúng tôi cũng có thể sử dụng cùng số liệu mà chúng tôi sử dụng để phân loại nhị phân

Lưu ý rằng “Class1 so với Class2” khác với “Class2 so với Class1”, vì vậy cả hai trường hợp đều phải được tính đến. Do đó, trong tập dữ liệu 3 lớp, chúng tôi nhận được 6 điểm OvO và trong tập dữ liệu 4 lớp, chúng tôi nhận được 12 điểm OvO

Như trong OvR, chúng tôi có thể tính trung bình tất cả các điểm OvO để có được điểm mô hình OvO cuối cùng

Kết hợp ovO cho cài đặt ba lớp. Hình ảnh của tác giả. Đường cong OvR ROC và ROC AUC

Tôi sẽ sử dụng các chức năng tôi đã sử dụng trong bài viết ROC Phân loại nhị phân để vẽ đường cong, chỉ với một số điều chỉnh, có sẵn tại đây. Bạn cũng có thể sử dụng phiên bản scikit-learning nếu muốn

Trong ví dụ này, tôi sẽ sử dụng bộ dữ liệu tổng hợp có ba lớp. “táo”, “chuối” và “cam”. Chúng có một số chồng chéo trong mọi tổ hợp lớp, khiến trình phân loại khó học chính xác tất cả các trường hợp. Bộ dữ liệu chỉ có hai tính năng. “x” và “y”, và như sau

biểu đồ phân tán nhiều lớp. Hình ảnh của tác giả

Đối với mô hình, tôi đã đào tạo một phiên bản mặc định của RandomForestClassifier của scikit-learn

Trong đoạn mã dưới đây, chúng tôi

  • Lặp lại trên tất cả các lớp
  • Chuẩn bị một khung dữ liệu phụ trợ bằng cách sử dụng một lớp là “1” và các lớp khác là “0”
  • Vẽ các biểu đồ của các phân phối lớp
  • Vẽ đường cong ROC cho từng trường hợp
  • Tính AUC cho lớp cụ thể đó

Đoạn mã trên xuất biểu đồ và Đường cong ROC cho mỗi lớp so với phần còn lại

Đường cong ROC và biểu đồ OvR. Hình ảnh của tác giả

Như chúng ta có thể thấy, điểm số của lớp “màu cam” thấp hơn một chút so với hai lớp còn lại, nhưng trong mọi trường hợp, bộ phân loại đã làm tốt công việc dự đoán mọi lớp. Chúng ta cũng có thể lưu ý trên biểu đồ rằng sự trùng lặp mà chúng ta thấy trong dữ liệu thực cũng tồn tại trên các dự đoán

Để hiển thị từng điểm OvR AUC, chúng ta chỉ cần in chúng ra. Chúng ta cũng có thể lấy điểm trung bình của bộ phân loại

# Displays the ROC AUC for each class
avg_roc_auc = 0
i = 0
for k in roc_auc_ovr:
avg_roc_auc += roc_auc_ovr[k]
i += 1
print[f"{k} ROC AUC OvR: {roc_auc_ovr[k]:.4f}"]
print[f"average ROC AUC OvR: {avg_roc_auc/i:.4f}"]

Và đầu ra là

apple ROC AUC OvR: 0.9425
banana ROC AUC OvR: 0.9525
orange ROC AUC OvR: 0.9281
average ROC AUC OvR: 0.9410

ROC AUC OvR trung bình trong trường hợp này là 0. 9410, một điểm số thực sự tốt phản ánh mức độ hiệu quả của bộ phân loại trong việc dự đoán từng loại

Đường cong OvO ROC và ROC AUC

Với thiết lập tương tự như thử nghiệm trước, điều đầu tiên cần làm là xây dựng một danh sách với tất cả các cặp lớp có thể

classes_combinations = []
class_list = list[classes]
for i in range[len[class_list]]:
for j in range[i+1, len[class_list]]:
classes_combinations.append[[class_list[i], class_list[j]]]
classes_combinations.append[[class_list[j], class_list[i]]]

Danh sách

apple ROC AUC OvR: 0.9425
banana ROC AUC OvR: 0.9525
orange ROC AUC OvR: 0.9281
average ROC AUC OvR: 0.9410
4 sẽ có tất cả các kết hợp

[['apple', 'banana'],
['banana', 'apple'],
['apple', 'orange'],
['orange', 'apple'],
['banana', 'orange'],
['orange', 'banana']]

Sau đó, chúng tôi lặp lại tất cả các kết hợp và tương tự như trường hợp OvR, chúng tôi

  • Chuẩn bị một khung dữ liệu phụ trợ chỉ với các phiên bản của cả hai lớp
  • Xác định các phiên bản của Loại 1 là “1” và các phiên bản của Loại 2 là “0”
  • Vẽ các biểu đồ của các phân phối lớp
  • Vẽ đường cong ROC cho từng trường hợp
  • Tính AUC cho sự kết hợp cụ thể đó

Đoạn mã trên vẽ tất cả các biểu đồ và Đường cong ROC

Đường cong ROC và biểu đồ OvO. Hình ảnh của tác giả

Lưu ý rằng, như mong đợi, ô “táo và chuối” khác với ô “chuối và táo”. Như trong trường hợp trước, chúng tôi có thể đánh giá từng kết hợp riêng lẻ và kiểm tra sự không nhất quán của mô hình

Chúng tôi cũng có thể hiển thị AUC và tính AUC OvO trung bình

# Displays the ROC AUC for each class
avg_roc_auc = 0
i = 0
for k in roc_auc_ovo:
avg_roc_auc += roc_auc_ovo[k]
i += 1
print[f"{k} ROC AUC OvO: {roc_auc_ovo[k]:.4f}"]
print[f"average ROC AUC OvO: {avg_roc_auc/i:.4f}"]

Và đầu ra là

apple vs banana ROC AUC OvO: 0.9561
banana vs apple ROC AUC OvO: 0.9547
apple vs orange ROC AUC OvO: 0.9279
orange vs apple ROC AUC OvO: 0.9231
banana vs orange ROC AUC OvO: 0.9498
orange vs banana ROC AUC OvO: 0.9336
average ROC AUC OvO: 0.9409

ROC AUC trung bình trong trường hợp này là 0. 9409, và gần với số điểm đạt được trong kịch bản OvR [0. 9410]

Phần kết luận

Các chiến lược OvR và OvO có thể [và nên] được sử dụng để điều chỉnh bất kỳ số liệu phân loại nhị phân nào cho nhiệm vụ phân loại đa lớp

Đánh giá kết quả OvO và OvR cũng có thể giúp hiểu mô hình đang gặp khó khăn trong việc mô tả các lớp nào và bạn có thể thêm hoặc loại bỏ các tính năng nào để cải thiện kết quả của mô hình

Làm cách nào để vẽ đường cong ROC cho hồi quy logistic trong Python?

Làm cách nào để vẽ Đường cong ROC bằng Python? .
Mục tiêu công thức
Bước 1 - Nhập thư viện - GridSearchCv
Bước 2 - Thiết lập dữ liệu
Bước 3 - Tách dữ liệu và Huấn luyện mô hình
Bước 5 - Sử dụng các mô hình trên tập dữ liệu thử nghiệm
Bước 6 - Tạo tỷ lệ tích cực sai và đúng và in điểm
Bước 7 - Vẽ các đường cong ROC

Làm cách nào để vẽ đường cong ROC cho Python đa lớp?

Cách vẽ nhiều đường cong ROC trong Python [Có ví dụ] .
Bước 1. Nhập các gói cần thiết. Đầu tiên, chúng tôi sẽ nhập một số gói cần thiết trong Python. từ số liệu nhập sklearn từ bộ dữ liệu nhập sklearn từ sklearn. .
Bước 2. Tạo dữ liệu giả. .
Bước 3. Phù hợp với nhiều mô hình & Vẽ đường cong ROC

Chúng ta có thể sử dụng đường cong ROC cho đa

Các đường cong ROC thường được sử dụng trong phân loại nhị phân, trong đó TPR và FPR có thể được xác định rõ ràng. Trong trường hợp phân loại nhiều lớp, khái niệm TPR hoặc FPR chỉ có được sau khi nhị phân hóa đầu ra .

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.

Chủ Đề