Biasanya kita tidak bisa menggambar kurva ROC untuk pengklasifikasi diskrit seperti pohon keputusan. Apakah saya benar? Apakah ada cara untuk menggambar kurva ROC untuk Dtrees?
Biasanya kita tidak bisa menggambar kurva ROC untuk pengklasifikasi diskrit seperti pohon keputusan. Apakah saya benar? Apakah ada cara untuk menggambar kurva ROC untuk Dtrees?
Jawaban:
Jika classifier Anda hanya menghasilkan hasil faktor (hanya label), tanpa skor, Anda masih bisa menggambar kurva ROC. Namun kurva ROC ini hanya satu titik. Mempertimbangkan ruang ROC, poin ini adalah , di mana FPR - tingkat positif palsu dan TPR - tingkat positif sejati.
Lihat lebih lanjut tentang bagaimana ini dihitung pada halaman Wikipedia .
Untuk Decision Tree, kelas masih diprediksi dengan tingkat kepastian tertentu. Jawabannya sudah diberikan oleh @rapaio, tapi saya akan sedikit mengembangkannya.
Bayangkan pohon keputusan berikut (itu versi sedikit modifikasi dari ini satu )
Pada setiap node tidak hanya label kelas mayoritas, tetapi juga orang lain apa yang berakhir di daun itu, sehingga kita dapat menetapkan tingkat kepastian untuk daun di mana kita memprediksi label.
Sebagai contoh, perhatikan data berikut
Kami menjalankannya, dan menetapkan skor ke output, bukan label yang sebenarnya. Dengan ini, kita bisa menggambar kurva ROC, seperti yang disarankan di sini
Namun, tidak masuk akal untuk menggunakannya untuk menyetel ambang Anda (karena, tentu saja, tidak ada yang namanya ambang di Pohon Keputusan), tetapi masih dapat digunakan untuk menghitung AUC, yang, dalam hal ini, adalah 0,92
Kode R yang digunakan di sini:
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')