Làm thế nào chúng ta có thể vẽ một đường cong ROC cho cây quyết định?


13

Thông thường chúng ta không thể vẽ đường cong ROC cho các phân loại rời rạc như cây quyết định. Tôi có đúng không Có cách nào để vẽ đường cong ROC cho Dtrees không?


1
Bạn có thể tìm thấy cây gậy
rapaio

[Đánh giá mô hình cây quyết định cho tập huấn luyện của Cameron và tập kiểm tra tập trung so với tập kiểm tra trong tập R] [1] [1]: stats.stackexchange.com/questions/49416/ợi Bạn có thể tìm thấy câu trả lời của mình tại đây.
Sangram

@rapaio Xin lỗi, liên kết của bạn hiển thị đường cong ROC để tìm ngưỡng trong trình phân loại tạo ra đầu ra trong khoảng từ 1 đến 0 (giá trị liên tục).
DataMiner

@Sangram Đây là những giải pháp trong R nhưng tôi muốn hiểu cách thức hoạt động của nó.
DataMiner

Câu trả lời:


15

(x,y)= =(FPR,TPR)FPRTPR

Xem thêm về cách tính toán này trên trang Wikipedia .

(0,0)(1,1)

TFTF(ghi bànT,ghi bànF)= =(đếmTđếmT+đếmF,đếmFđếmT+đếmF)= =(10/15,5/15)= =(0,66,0,33)


12

Đối với Cây quyết định, các lớp vẫn được dự đoán với một số mức độ chắc chắn. Câu trả lời đã được đưa ra bởi @rapaio, nhưng tôi sẽ mở rộng thêm một chút.

Hãy tưởng tượng cây quyết định sau (đó là một chút sửa đổi chút phiên bản này một )

ví dụ cây quyết định

Tại mỗi nút không chỉ có các nhãn lớp đa số, mà còn các nhãn khác xuất hiện ở lá đó, vì vậy chúng ta có thể gán mức độ chắc chắn cho lá đó mà chúng ta dự đoán nhãn.

Ví dụ: xem xét các dữ liệu sau

dữ liệu

Chúng tôi chạy nó và gán điểm số cho đầu ra, không phải nhãn thực tế. Với điều này, chúng ta có thể vẽ một đường cong ROC, như được đề xuất ở đây

đường cong roc

Tuy nhiên, việc sử dụng nó để điều chỉnh ngưỡng của bạn rất ít (vì dĩ nhiên, không có thứ gọi là ngưỡng trong Cây quyết định), nhưng nó vẫn có thể được sử dụng để tính AUC, trong trường hợp này là 0,92

Mã R được sử dụng ở đây:

outlook = c('rain', 'overcast', 'rain', 'sunny', 'rain', 
            'rain', 'sunny', 'overcast', 'overcast', 'overcast', 
            'sunny', 'sunny', 'rain', 'rain', 'overcast',
            'sunny', 'overcast', 'overcast', 'sunny', 'sunny',
            'sunny', 'overcast')
humidity = c(79, 74, 80, 60, 65, 79, 60, 74, 77, 80, 
             71, 70, 80, 65, 70, 56, 80, 70, 56, 70,
             71, 77)
windy = c(T, T, F, T, F, T, T, T, T, F, T, F, F, F, T, T, F, T, T, F, T, T)
play = c(F, F, T, F, T, F, F, T, T, T, F, F, T, T, T, T, T, T, F, T, F, T)

game = data.frame(outlook, humidity, windy, play)
game$score = NA

attach(game)
game$score[outlook == 'sunny' & humidity <= 70] = 5/8
game$score[outlook == 'sunny' & humidity > 70] = 1 - 3/4
game$score[outlook == 'overcast'] = 4/5
game$score[outlook == 'rain' & windy == T] = 1 - 2/2
game$score[outlook == 'rain' & windy == F] = 3/3
detach(game)

game$predict = game$score >= 0.5
game$correct = game$predict == game$play

library(ROCR)

pred = prediction(game$score, game$play)
roc = performance(pred, measure="tpr", x.measure="fpr")
plot(roc, col="orange", lwd=2) 
lines(x=c(0, 1), y=c(0, 1), col="red", lwd=2)

auc = performance(pred, 'auc')
slot(auc, 'y.values')
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.