Calculer l'ASC dans la R?
Étant donné un vecteur de scores et un vecteur de réels étiquettes de classe, comment calculez-vous un numéro unique de l'ASC métrique pour un classificateur binaire dans le langage R ou en anglais?
Page 9 de "AUC: une Meilleure Mesure..." semble avoir besoin de connaître les étiquettes de classe, et voici un exemple dans MATLAB où je ne comprends pas
R(Actual == 1))
Parce que R (à ne pas confondre avec le langage R) est défini un vecteur, mais l'utilise comme une fonction?
- Pour quelqu'un d'autre qui ne le connaissent pas, apparemment, l'ASC est "l'Aire Sous la caractéristique de fonctionnement du récepteur Courbe"
Vous devez vous connecter pour publier un commentaire.
Comme mentionné par d'autres, vous pouvez calculer l'ASC à l'aide de la ROCR paquet. Avec le ROCR package, vous pouvez aussi tracer la courbe ROC, courbe de levée et d'autres modèle de sélection des mesures.
Vous pouvez calculer l'ASC directement, sans l'aide de n'importe quel paquet en utilisant le fait que l'ASC est égale à la probabilité qu'un vrai positif est marqué plus que d'un véritable négatif.
Par exemple, si
pos.scores
est un vecteur contenant un score exemples positifs, etneg.scores
est un vecteur contenant les exemples négatifs alors l'ASC est approximée par:donnera une approximation de l'aire sous la courbe. Vous pouvez aussi estimer la variance de l'ASC de l'amorçage:
sample
... diviser par 10, votre variance est multiplié par 10. Multiplier par 10 et votre variance est divisé par 10. Ce n'est certainement pas le comportement souhaité pour calculer la variance de l'ASC.Le ROCR paquet va calculer l'ASC parmi d'autres statistiques:
auc.tmp <- performance(pred,"auc"); auc <- as.numeric([email protected])
Avec le paquet
pROC
vous pouvez utiliser la fonctionauc()
comme cet exemple de la page d'aide:Sans les paquets supplémentaires:
Error in plot.window(...) : need finite 'xlim' values
, c'est probablement parce que vos étiquettes sont 0-1, tandis que @AGS est à l'aide d'étiquettes 1-2.J'ai trouvé quelques solutions ici pour être lent et/ou de confusion (et certains d'entre eux ne gère pas les liens correctement) j'ai donc écrit mon propre
data.table
fonction auc_roc() dans mon package R mltools.La combinaison de code de ISL 9.6.3 Courbes ROC, avec @J. Gagné.'s réponse à cette question et un peu plus des lieux, suivant le tracé de la courbe ROC et imprime la CUA, en bas à droite sur la parcelle.
Ci-dessous
probs
est un numérique, vecteur de probabilités prédites pour la classification binaire ettest$label
contient le vrai étiquettes de données de test.Cela donne un complot comme ceci:
Vous pouvez en apprendre plus sur AUROC dans ce blog, par Miron Kursa:
https://mbq.me/blog/augh-roc/
Il fournit une fonction rapide pour AUROC:
Nous allons tester:
auroc()
est 100 fois plus rapide quepROC::auc()
etcomputeAUC()
.auroc()
est 10 fois plus rapide quemltools::auc_roc()
etROCR::performance()
.bigstatsr::AUC()
est encore plus rapide (implémenté en C++). Avertissement: je suis l'auteur.Le long des lignes de erik de réponse, vous devez également être en mesure de calculer le ROC directement en comparant toutes les paires possibles de valeurs à partir de la pos.scores et neg.marque:
Certainement moins efficace que la méthode d'échantillonnage ou le pROC::auc, mais plus stable que l'ancienne et nécessite moins de l'installation de ce dernier.
Liées: quand je l'ai essayé, elle a donné des résultats similaires pour pROC de la valeur, mais pas exactement le même (par 0,02 ou si); le résultat était plus proche de l'échantillon approche à très haut N. Si quelqu'un a des idées pourquoi je serais intéressé.
J'ai l'habitude d'utiliser la fonction ROC de la DiagnosisMed paquet. J'aime le graphique qu'il produit. L'ASC est retourné avec son intervalle de confiance et il est également mentionné sur le graphique.
Package ‘DiagnosisMed’ was removed from the CRAN repository.
Actuellement en tête voté réponse est incorrecte, car elle méconnaît les liens. Lorsque positifs et négatifs scores sont égaux, alors l'ASC devrait être de 0,5. Ci-dessous est corrigé exemple.