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?
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?
Câu trả lời:
Đố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 )
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
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
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')