Normalde karar ağaçları gibi ayrı sınıflandırıcılar için bir ROC eğrisi çizemeyiz. Haklı mıyım? Dtrees için bir ROC eğrisi çizmenin bir yolu var mı?
Normalde karar ağaçları gibi ayrı sınıflandırıcılar için bir ROC eğrisi çizemeyiz. Haklı mıyım? Dtrees için bir ROC eğrisi çizmenin bir yolu var mı?
Yanıtlar:
Sınıflandırıcınız, puanlar olmadan yalnızca faktör sonuçları (yalnızca etiketler) üretirse, yine de bir ROC eğrisi çizebilirsiniz. Ancak bu ROC eğrisi sadece bir noktadır. ROC alanı göz önüne alındığında, bu noktalar , burada - yanlış pozitif oran ve - gerçek pozitif oran.
Bunun Wikipedia sayfasında nasıl hesaplandığı hakkında daha fazla bilgi edinin .
Bu noktayı dan noktanıza ve oradan e bir çizgi çizerek ROC eğrisine benzeyecek şekilde genişletebilirsiniz . Böylece bir eğriniz var.
Ancak, bir karar ağacı için bir etiket çıktısından sayısal bir çıktıya genişletmek kolaydır. Bir karar ağacı ile öngörüldüğünüzde, kök düğümden bir çoğunluk sınıfı ile tahmin ettiğiniz bir yaprak düğümüne ineceğinizi unutmayın. Bu sınıf yerine, o yaprak düğümdeki sınıfların oranını döndürürseniz, her sınıf için bir puanınız olur. İki sınıf ve sınıfınız olduğunu ve yaprak düğümünüzde ile 10 örneğiniz ve ile 5 örneğiniz olduğunu varsayalım, bir puan vektörü döndürebilirsiniz :. Bunun gerçekten doğru bir puanlama kuralı olduğuna dikkat edin (bu olasılıklar için en iyi tahmin edici değildir), ancak inandığım hiçbir şeyden daha iyidir ve karar ağaçları için genellikle puanlar bu şekilde alınır.
Bir Karar Ağacı için, sınıflar hala bir miktar kesinlik ile tahmin edilmektedir. Cevap zaten @ rapaio tarafından verildi, ancak biraz daha genişleteceğim.
(Bu biraz değiştirilmiş bir versiyonu aşağıdaki karar ağacı düşünün biri )
Her düğümde sadece çoğunluk sınıfı etiketleri değil, aynı zamanda bu yaprağa neden olan diğerleri de vardır, bu nedenle etiketi öngördüğümüz yaprağa kesinlik derecesi atayabiliriz.
Örneğin, aşağıdaki verileri göz önünde bulundurun
Çalıştırırız ve puanları gerçek etiketlere değil, çıktıya atarız. Bununla, burada önerildiği gibi bir ROC eğrisi çizebiliriz
Bununla birlikte, eşiğinizi ayarlamak için kullanmak çok az mantıklıdır (çünkü elbette Karar Ağaçlarında eşik diye bir şey yoktur), ancak yine de bu durumda 0,92 olan AUC'yi hesaplamak için kullanılabilir.
Burada kullanılan R kodu:
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')