Eu obtive um modelo de regressão logística (via train
) para uma resposta binária e a matriz de confusão logística via confusionMatrix
in caret
. Isso me fornece a matriz de confusão do modelo logístico, embora não tenha certeza de qual limite está sendo usado para obtê-lo. Como obtenho a matriz de confusão para valores-limite específicos usando confusionMatrix
in caret
?
r
classification
roc
caret
confusion-matrix
Leite preto
fonte
fonte
confusionmatrix
, sem parênteses.glm
função dostats
pacote e passou seu resultado paraconfusionMatrix
? Eu não sabia que alguém poderia fazer isso e, lendo o manual, não está claro se é possível. Ou você fezpredict
alguma coisa? Um pequeno exemplo ajudaria.train
funçãocaret
para ajustar o modelo, o que me permite especificá-lo como um glm com a família binomial. Eu então usei apredict
função no objeto gerado viatrain
.Respostas:
A maioria dos modelos de classificação em R produz uma previsão de classe e as probabilidades para cada classe. Para dados binários, em quase todos os casos, a previsão de classe é baseada em um corte de probabilidade de 50%.
glm
é o mesmo. Comcaret
, usingpredict(object, newdata)
fornece a classe prevista epredict(object, new data, type = "prob")
fornece probabilidades específicas da classe (quandoobject
é gerada portrain
).Você pode fazer as coisas de maneira diferente, definindo seu próprio modelo e aplicando o ponto de corte que desejar. O
caret
site também possui um exemplo que utiliza reamostragem para otimizar o corte de probabilidade.tl; dr
confusionMatrix
usa as classes previstas e, portanto, um corte de probabilidade de 50%Máx.
fonte
Existe uma maneira bastante fácil, assumindo
tune <- train(...)
:Obviamente, você pode definir o limiar para o que quiser tentar ou escolher o "melhor", onde melhor significa maior especificidade e sensibilidade combinadas:
Depois de analisar o exemplo que Max postou, não tenho certeza se existem algumas nuances estatísticas que tornam minha abordagem menos desejada.
fonte
caret
pacote?rocCurve$thresholds[which(rocCurve$sensitivities + rocCurve$specificities == max(rocCurve$sensitivities + rocCurve$specificities))]
que também oferece a flexibilidade de ponderá-los de forma diferente, se você quiser ... uma última coisa a ser observada é que, realisticamente, você provavelmente deseja ajustar o limiar (como você faria com qualquer hiperparâmetro de modelo), como Max descreve aqui .