Comment tracer une courbe ROC pour les arbres de décision?

13

Normalement, nous ne pouvons pas tracer une courbe ROC pour les classificateurs discrets comme les arbres de décision. Ai-je raison? Existe-t-il un moyen de tracer une courbe ROC pour Dtrees?

DataMiner
la source
1
Vous pouvez trouver votre réponse ici: stats.stackexchange.com/questions/105501/…
rapaio
[Évaluation du modèle d'arbre de décision pour «ensemble d'entraînement» contre «ensemble d'essai» dans R] [1] [1]: stats.stackexchange.com/questions/49416/… Vous pouvez trouver votre réponse ici.
Sangram
@rapaio Désolé, votre lien affiche une courbe ROC pour trouver un seuil dans un classificateur qui produit une sortie entre 1 et 0 (valeur continue).
DataMiner
@Sangram Ce sont les solutions dans R mais je veux juste comprendre comment cela fonctionne.
DataMiner

Réponses:

15

Si votre classificateur ne produit que des résultats factoriels (uniquement des étiquettes), sans scores, vous pouvez toujours tracer une courbe ROC. Cependant, cette courbe ROC n'est qu'un point. Compte tenu de l'espace ROC, ce point est , où FPR - taux de faux positifs et TPR - taux de vrais positifs.(X,y)=(FPR,TPR)FPRTPR

En savoir plus sur la façon dont cela est calculé sur la page Wikipedia .

(0,0)(1,1)

TFTF(ButT,ButF)=(compterTcompterT+compterF,compterFcompterT+compterF)=(dix/15,5/15)=(0,66,0,33)

rapaio
la source
12

Pour un arbre de décision, les classes sont toujours prédites avec un certain niveau de certitude. La réponse est déjà donnée par @rapaio, mais je vais développer un peu.

Imaginez l'arbre de décision suivant (c'est une version légèrement modifiée de celui- ci )

exemple d'arbre de décision

À chaque nœud, il y a non seulement les étiquettes de classe majoritaire, mais aussi d'autres éléments qui se sont retrouvés à cette feuille, nous pouvons donc attribuer le degré de certitude à cette feuille à laquelle nous prédisons l'étiquette.

Par exemple, considérez les données suivantes

Les données

Nous l'exécutons et attribuons les scores à la sortie, pas les étiquettes réelles. Avec cela, nous pouvons dessiner une courbe ROC, comme suggéré ici

courbe roc

Cela n'a pas de sens, cependant, de l'utiliser pour régler votre seuil (car, bien sûr, il n'y a pas de seuil dans les arbres de décision), mais il peut toujours être utilisé pour calculer l'AUC, qui, dans ce cas, est de 0,92

Code R utilisé ici:

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')
Alexey Grigorev
la source