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

Tạo một vấn đề phân loại n lớp ngẫu nhiên. Điều này ban đầu tạo ra các cụm điểm được phân phối bình thường (std=1) xung quanh các đỉnh của một siêu khối ``n_thông tin`` chiều với các cạnh có độ dài ``2*class_sep`` và gán một số cụm bằng nhau cho mỗi lớp

Nó giới thiệu sự phụ thuộc lẫn nhau giữa các tính năng này và thêm nhiều loại nhiễu hơn nữa vào dữ liệu. Sử dụng phương thức make_classification()

Đường cong đặc tính vận hành máy thu, hoặc đường cong ROC, là một biểu đồ đồ họa minh họa khả năng chẩn đoán của hệ thống phân loại nhị phân khi ngưỡng phân biệt của nó thay đổi

Một mô tả phổ biến khác là Đường cong ROC phản ánh độ nhạy của mô hình qua các ngưỡng phân loại khác nhau. Khi tôi bắt đầu học Machine Learning, những định nghĩa này luôn làm tôi bối rối

Trong bài viết này, tôi sẽ chia sẻ cách tôi học cách tháo gỡ những nhầm lẫn “giống như người mới bắt đầu” của mình và phát triển một trực giác đủ tốt về đường cong ROC

Đường cong ROC là cái quái gì vậy?

Một cách để hiểu đường cong ROC là nó mô tả mối quan hệ giữa độ nhạy của mô hình (tỷ lệ dương tính thật hoặc TPR) so với tính đặc hiệu của mô hình (được mô tả liên quan đến tỷ lệ dương tính giả). 1-FPR)

Bây giờ, hãy giải quyết từng khái niệm ở đây

TPR, được gọi là độ nhạy của mô hình, là tỷ lệ phân loại chính xác của lớp “tích cực” chia cho tất cả các lớp tích cực có sẵn trong tập dữ liệu, theo toán học

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

trong khi FPR là tỷ lệ giữa các kết quả dương tính giả (số lượng dự đoán được phân loại sai thành tích cực) và tất cả các lớp phủ định có sẵn, về mặt toán học

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

Vì vậy, về bản chất, bạn đang so sánh độ nhạy của mô hình thay đổi như thế nào đối với tỷ lệ dương tính giả trên các điểm ngưỡng khác nhau phản ánh ranh giới quyết định của mô hình để phân loại đầu vào là dương tính

Tách riêng vấn đề với Điểm ngưỡng

Ngay từ đầu, linh tính mách bảo tôi là phải nắm bắt được vai trò của ngưỡng điểm số. Một điểm khởi đầu tốt là xây dựng một bức tranh tinh thần

image.png

Với hình dung cổ điển này, người ta có thể học được trực giác đầu tiên, đó là mô hình lý tưởng là mô hình có tỷ lệ dương tính thật càng cao càng tốt trong khi giữ tỷ lệ dương tính giả càng thấp càng tốt

Ngưỡng tương ứng với một số giá trị T (chẳng hạn như giá trị từ 0 đến 1) đóng vai trò là ranh giới quyết định cho bộ phân loại và nó ảnh hưởng đến sự đánh đổi giữa TPR và FPR

Hãy viết một số mã để có hình ảnh trực quan về tất cả các thành phần này

Hình dung đường cong ROC

Các bước để hình dung điều này sẽ là

  1. Nhập phụ thuộc của chúng tôi
  2. Vẽ một số dữ liệu giả với gói drawdata cho sổ ghi chép Jupyter
  3. Nhập dữ liệu giả vào khung dữ liệu gấu trúc
  4. Điều chỉnh mô hình hồi quy logistic trên dữ liệu
  5. Nhận dự đoán của mô hình hồi quy logistic ở dạng giá trị xác suất
  6. Đặt các điểm ngưỡng khác nhau
  7. Hình dung biểu đồ đường cong roc
  8. Rút ra một số kết luận cuối cùng

1. Nhập phụ thuộc của chúng tôi

from drawdata import draw_scatter
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, precision_recall_curve,precision_score, plot_roc_curve

2. Vẽ một số dữ liệu giả với gói drawdata cho sổ ghi chép Jupyter

draw_scatter()

đầu ra

3. Nhập dữ liệu giả vào khung dữ liệu gấu trúc

df = pd.read_csv("./data.csv")

4. Điều chỉnh mô hình hồi quy logistic trên dữ liệu

def get_fp_tp(y, proba, threshold):
"""Return the number of false positives and true positives."""
# source: https://towardsdatascience.com/roc-curve-explained-50acab4f7bd8
# Classify into classes
pred = pd.Series(np.where(proba>=threshold, 1, 0),
dtype='category')
pred.cat.set_categories([0,1], inplace=True)
# Create confusion matrix
confusion_matrix = pred.groupby([y, pred]).size().unstack()\
.rename(columns={0: 'pred_0',
1: 'pred_1'},
index={0: 'actual_0',
1: 'actual_1'})
false_positives = confusion_matrix.loc['actual_0', 'pred_1']
true_positives = confusion_matrix.loc['actual_1', 'pred_1']
return false_positives, true_positives

# train test split on the fake generated dataset
X = df[["x", "y"]].values
Y = df["z"].values
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=42)
y_test = np.array([1 if p=="a" else 0 for p in y_test])
y_train = np.array([1 if p=="a" else 0 for p in y_train])

# create the model
lgr = LogisticRegression()
lgr.fit(X_train, y_train)

5. Nhận dự đoán của mô hình hồi quy logistic ở dạng giá trị xác suất

y_hat = lgr.predict_proba(X_test)[:,1]

6. Đặt các điểm ngưỡng khác nhau

thresholds = np.linspace(0,1,100)

7. Hình dung biểu đồ đường cong roc

# defining fpr and tpr
tpr = []
fpr = []
# defining positives and negatives
positives = np.sum(y_test==1)
negatives = np.sum(y_test==0)

# looping over threshold scores and getting the number of false positives and true positives
for th in thresholds:
fp,tp = get_fp_tp(y_test, y_hat, th)
tpr.append(tp/positives)
fpr.append(fp/negatives)

plt.plot([0, 1], [0, 1], linestyle='--', lw=2, color='r',label='Random', alpha=.8)
plt.plot(fpr,tpr, label="ROC Curve",color="blue")
plt.text(0.5, 0.5, "varying threshold scores (0-1)", rotation=0, size=12,ha="center", va="center",bbox=dict(boxstyle="rarrow"))
plt.xlabel("False Positve Rate")
plt.ylabel("True Positive Rate")
plt.legend()
plt.show()

png

8. Rút ra một số kết luận cuối cùng

Bằng cách thay đổi điểm ngưỡng, chúng tôi nhận được các giá trị ngày càng tăng của cả tỷ lệ dương tính thực và dương tính giả. Một mô hình tốt là mô hình trong đó điểm ngưỡng đặt tỷ lệ dương thực càng gần 1 càng tốt trong khi giữ tỷ lệ dương tính giả càng thấp càng tốt

Nhưng, làm thế nào chúng ta có thể chọn ngưỡng phân loại tốt nhất?

Một phương pháp đơn giản là lấy một phương pháp có tổng tỷ lệ dương tính thật và âm tính giả lớn nhất (1- FPR)

Một tiêu chí khác có thể là chỉ cần chọn điểm gần góc trên cùng bên trái của không gian ROC của bạn. Tuy nhiên, điều đó ngụ ý rằng tỷ lệ dương tính thực sự và tỷ lệ âm tính thực sự có cùng trọng số (), điều này không nhất thiết đúng trong các trường hợp như phân loại ung thư trong đó tác động tiêu cực của dương tính giả lớn hơn tác động của dương tính thật

Suy nghĩ cuối cùng về đường cong ROC

Tôi nghĩ rằng việc dành một chút thời gian để hiểu các chỉ số đánh giá là cực kỳ có lợi về lâu dài cho hành trình học máy của bạn. Trong bài này bạn đã học

  • Một trực giác cơ bản về cách các đường cong ROC hoạt động
  • Ngưỡng phân loại ảnh hưởng như thế nào đến mối quan hệ giữa độ nhạy và độ đặc hiệu của mô hình
  • Trực giác về cách sử dụng đường cong ROC để đặt ngưỡng phân loại tối ưu

Nếu bạn muốn tìm hiểu thêm về Python cho Machine Learning, hãy xem các khóa học này

Đây là các liên kết liên kết, nếu bạn sử dụng chúng, tôi sẽ nhận được một khoản hoa hồng nhỏ, chúc mừng. . )

  • Học máy từ A-Z™. Thực hành Python & R trong Khoa học dữ liệu
  • Chương trình đào tạo về Python cho khoa học dữ liệu và máy học

Nếu bạn thích bài đăng này, hãy theo dõi tôi trên Medium, đăng ký nhận bản tin của tôi, kết nối với tôi trên Twitter, LinkedIn, Instagram hoặc tham gia Medium. Cảm ơn và hẹn gặp lại lần sau. . )

Công thức tính ROC là gì?

Trong tài chính, phép tính cho ROC cũng có thể được tính là hoàn vốn theo thời gian, theo đó nó có thể lấy giá trị hiện tại của một cổ phiếu hoặc chỉ số và chia cho giá trị từ một khoảng thời gian trước đó. Trừ một và nhân số kết quả với 100 để biểu diễn phần trăm

Làm cách nào để diễn giải một đường cong ROC Python?

Một cách để hiểu đường cong ROC là nó mô tả mối quan hệ giữa độ nhạy của mô hình (tỷ lệ dương tính thật hoặc TPR) so với độ đặc hiệu của mô hình (được mô tả đối với tỷ lệ dương tính giả). . 1-FPR) .

Python tính điểm AUC ROC như thế nào?

Cách tính AUC (Diện tích dưới đường cong) bằng Python .
Bước 1. Gói nhập khẩu. Đầu tiên, chúng ta sẽ nhập các gói cần thiết để thực hiện hồi quy logistic trong Python. nhập gấu trúc dưới dạng pd nhập numpy dưới dạng np từ sklearn. .
Bước 2. Phù hợp với mô hình hồi quy logistic. .
Bước 3. Tính AUC

ROC trong Python là gì?

Một chỉ số phổ biến khác là AUC, khu vực bên dưới đường cong đặc tính hoạt động của bộ thu (ROC). Đường cong đặc tính hoạt động của Máy thu biểu thị tỷ lệ dương thực (TP) so với tỷ lệ dương tính giả (FP) ở các ngưỡng phân loại khác nhau.