2017-03-21 4 views
1

ROC CURVE via ROCRPourquoi ma courbe ROC ressemble-t-elle à un V?

newpred <- c(1, 0 ,0 ,1 ,0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 
0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0,0, 1, 0, 0, 
0, 0,0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 
0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 
1,0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 
1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0)      


     newlab <- c(0, 0 ,0 ,0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,0 ,0 ,0, 
        0, 0 ,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
        0 ,0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
        0, 1 ,0, 0 ,0, 0 ,0, 0 ,1, 0 ,0, 0 ,0, 0 ,0, 
        0, 0 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,1, 
        0 ,1, 0 ,1, 0 ,0, 0 ,0, 0 ,0, 0 ,0, 0 ,0, 0 ,0) 

Ainsi, le premier vecteur sont mes prédictions et le second vecteur est la référence. Je ne comprends pas pourquoi ma courbe ressemble à un V. Je n'ai jamais vu une courbe ROC ressembler à ça! Mon conseiller veut que j'ajoute des points pour rendre le graphique plus lisse/plus incurvé en ajoutant plus de points. J'ai essayé de tracer à l'aide de pROC mais les seuls arguments que je pourrais ajouter étaient la prédiction et la référence.

J'ai aussi essayé avec ROCR

print.cutoffs.at=seq(0,1,by=0.1), text.adj=c(-0.2,1.7)) 

et a obtenu ce enter image description here

Comment puis-je lisser la courbe ou ajouter plus de points?

+1

Avez-vous seulement une seule variable indépendante? Et est-ce binaire variable? – Dason

+0

Oui c'est une seule variable indépendante qui est binaire –

+2

Alors c'est déjà aussi lisse que ça va l'obtenir – Dason

Répondre

3

complot Un ROC est destiné à l'examen de la performance d'un classificateur probabiliste , ce qui signifie celui qui génère la probabilité de la variable de réponse étant soit une classe ou classe B.

La façon dont vous allez d'une probabilité prédite à une étiquette de classe prédite dure est en définissant un point de coupure: si la probabilité prédite d'être dans la classe A est supérieure à la coupure, alors lui assigner l'étiquette A. Sinon l'assigner B.

Habituellement, les gens utilisent une valeur de 0,5 pour la coupure, de sorte qu'une observation est assignée à la classe qui a la probabilité la plus élevée. Cependant, rien ne vous empêche d'utiliser une valeur seuil différente. Si vous utilisez un seuil élevé, par exemple 0.9, vous verrez très peu d'observations assignées à A - c'est comme dire à votre classifieur d'étiqueter quelque chose comme A seulement s'il est très confiant que c'est la valeur correcte. Vice-versa si vous utilisez une coupure basse - dans ce cas, vous étiquetez quelque chose comme B seulement si vous êtes très confiant que B est la valeur correcte.

Le tracé ROC est essentiellement généré par en glissant la valeur de coupure de 0 à 1, et en regardant comment les étiquettes prédites résultantes se comparent aux valeurs réelles. Mais cela suppose que vous avez une prédiction de probabilité sous-jacente en premier lieu. Vous n'avez que les étiquettes prédites, ce qui explique pourquoi votre intrigue est dégénérée.

+0

Alors serait-il inapproprié d'utiliser ce graphique pour discuter de la précision de mon modèle? (J'utilise aussi NPV, PPV, spécificité, sensibilité, et précision qui ont été sorties de ma matrice de confusion) –

+1

Si vous voulez des conseils sur la façon de mesurer les performances de votre modèle, ce serait une question pour [stats.SE] (https : //stats.stackexchange.com).Assurez-vous d'inclure les détails sur le type de modèle que vous intégrez (régression logistique, arbre, SVM, etc.), quelles données vous avez utilisées, etc. –

+0

Mais oui, si votre modèle est incapable de générer une _range_ de valeurs prédites, alors ROC Je ne vous en dirai pas beaucoup. –