Đường cong ROC
Thuộc phần Học có giám sát trong hành trình Machine Learning của Coddy. Bài học 25 trên 58.
Mỗi ngưỡng cho ta một mức độ thu hồi và số lần báo động giả riêng. Đường cong ROC thể hiện tất cả cùng lúc:
Trục ngang: tỷ lệ dương tính giả, tỷ lệ bệnh nhân khỏe mạnh bị đánh dấu. Trục dọc: độ thu hồi. Ngưỡng thấp hơn tiến dần về phía (1, 1).
from sklearn.metrics import roc_curve, roc_auc_score
proba = model.predict_proba(X_test)[:, 1]
fpr, tpr, thresholds = roc_curve(y_test, proba) # tpr là độ thu hồi
ax.plot(fpr, tpr)
print(f"{roc_auc_score(y_test, proba):.3f}")Lệnh này in ra 0.914, chỉ số AUC: diện tích dưới đường cong. 1 là hoàn hảo, 0.5 tương đương tung đồng xu. Đường cong cao hơn phát hiện được nhiều trường hợp hơn với cùng số cảnh báo giả.
Thử thách
Trung bìnhMột trang trại anh đào đốt lửa chống sương giá vào những đêm có thể bị đóng băng. Phần code khởi đầu huấn luyện hai mô hình dự đoán sương giá, logistic và knn, rồi thiết lập biểu đồ.
- Viết hàm (function)
draw_roc(model, name): hàm này vẽ đường cong ROC của mô hình trênax, gắn nhãnnamevà in AUC như bên dưới. - Gọi hàm này cho cả hai mô hình, thêm đường chéo nét đứt có nhãn
coin tossvà chú giải, rồi hiển thị biểu đồ.
Với các mô hình dự đoán sạt lở đất:
logistic AUC: 0.869
k-NN AUC: 0.924Sau đó, Coddy mô tả biểu đồ của bạn. Biểu đồ của Coddy trông như thế này:
Tự làm thử
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import roc_curve, roc_auc_score
# Mỗi hàng ứng với một đêm mùa xuân tại vườn anh đào: 1 trong frost nghĩa là sương giá hình thành trước bình minh
nights = pd.read_csv("frost.csv")
features = ["temp_6pm_c", "humidity_pct", "wind_kmh", "cloud_pct"]
X_train, X_test, y_train, y_test = train_test_split(
nights[features], nights["frost"], test_size=0.25, random_state=0, stratify=nights["frost"])
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# Hai mô hình dự đoán sương giá
logistic = LogisticRegression(max_iter=1000)
logistic.fit(X_train, y_train)
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
fig, ax = plt.subplots()
ax.set_title("Frost Warnings")
ax.set_xlabel("False positive rate")
ax.set_ylabel("Recall")
# Viết code bên dưới
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Học có giám sát
1Mô hình đầu tiên của bạn
Học từ ví dụTập huấn luyện và tập kiểm traHuấn luyện và dự đoánChấm điểm mô hìnhÔn tập: Bộ sắp xếp hạt giống2Láng giềng gần nhất
Cách k-NN đưa ra quyết địnhChọn kRanh giới quyết địnhChuẩn hóa dữ liệu cho láng giềngÔn tập: láng giềng với dữ liệu rượu vang5Đánh giá bộ phân loại
Ma trận nhầm lẫnĐộ chính xác và độ thu hồiĐiểm F1Các lớp mất cân bằngĐường cong ROCÔn tập: Bài kiểm tra sàng lọc11Dự án: Các loài chim cánh cụt
Làm quen với chim cánh cụtChuẩn bị dữ liệuChọn mô hìnhTinh chỉnh mô hình tốt nhấtĐưa mô hình vào sử dụng3Hồi quy tuyến tính
Dự đoán các con sốNhiều đặc trưngĐo lường sai sốBiểu đồ phần dưÔn tập: Thuê xe đạp6Cây quyết định
Cây đặt câu hỏiĐọc câyĐộ sâu của câyTầm quan trọng của đặc trưngÔn tập: quyết định cho vay9Các mô hình tổ hợp
Rừng ngẫu nhiênVì sao rừng hoạt động hiệu quảTăng cường độ dốcÔn tập: Người kiểm lâm rừng12Thử thách cuối cùng
Tiến triển của bệnh tiểu đườngPhê duyệt tín dụngChữ số viết tayKhách hàng rời bỏTự luyện tập: Trình biên dịch Python online