J'ai obtenu un modèle de régression logistique (via train
) pour une réponse binaire, et j'ai obtenu la matrice de confusion logistique via confusionMatrix
in caret
. Cela me donne la matrice de confusion du modèle logistique, même si je ne sais pas quel seuil est utilisé pour l'obtenir. Comment obtenir la matrice de confusion pour des valeurs de seuil spécifiques à l'aide de confusionMatrix
in caret
?
r
classification
roc
caret
confusion-matrix
Lait noir
la source
la source
confusionmatrix
, sans parenthèses.glm
fonction à partir dustats
package et transmis son résultat àconfusionMatrix
? Je ne savais pas qu'on pouvait faire ça, et en lisant le manuel, il n'est pas clair qu'on puisse le faire du tout. Ou avez-vouspredict
quelque chose? Un court exemple serait utile.train
fonctioncaret
pour ajuster le modèle, ce qui me permet de le spécifier comme un glm avec une famille binomiale. J'ai ensuite utilisé lapredict
fonction sur l'objet généré viatrain
.Réponses:
La plupart des modèles de classification dans R produisent à la fois une prédiction de classe et les probabilités pour chaque classe. Pour les données binaires, dans presque tous les cas, la prédiction de classe est basée sur un seuil de probabilité de 50%.
glm
est le même. Aveccaret
, usingpredict(object, newdata)
vous donne la classe prédite etpredict(object, new data, type = "prob")
vous donnera des probabilités spécifiques à la classe (lorsqu'elleobject
est générée partrain
).Vous pouvez faire les choses différemment en définissant votre propre modèle et en appliquant le seuil que vous souhaitez. Le
caret
site Web contient également un exemple qui utilise le rééchantillonnage pour optimiser la coupure de probabilité.tl; dr
confusionMatrix
utilise les classes prévues et donc un seuil de probabilité de 50%Max
la source
Il existe un moyen assez simple, en supposant
tune <- train(...)
:Évidemment, vous pouvez définir le seuil à tout ce que vous voulez essayer ou choisir le "meilleur", où le meilleur signifie la spécificité et la sensibilité combinées les plus élevées:
Après avoir regardé l'exemple publié par Max, je ne suis pas sûr qu'il y ait des nuances statistiques rendant mon approche moins souhaitée.
la source
caret
package?rocCurve$thresholds[which(rocCurve$sensitivities + rocCurve$specificities == max(rocCurve$sensitivities + rocCurve$specificities))]
ce qui vous donne également la flexibilité de les pondérer différemment si vous le souhaitez ... une dernière chose à noter est que, de façon réaliste, vous voulez probablement régler le seuil (comme vous le feriez avec n'importe quel hyperparamètre de modèle) comme Max le décrit ici .