캐럿 패키지를 사용하면 특정 임계 값에 대한 혼동 행렬을 얻을 수 있습니까?


13

train이항 반응에 대한 로지스틱 회귀 모델 (via )을 얻었으며 confusionMatrixin에서 로지스틱 혼동 행렬을 얻었 습니다 caret. 물류 모델 혼동 행렬을 제공하지만 어떤 임계 값을 얻는 데 사용되는지 확실하지 않습니다. confusionMatrix에서를 사용하여 특정 임계 값에 대한 혼동 행렬을 얻으려면 어떻게해야 caret합니까?


답변이 없지만 종종 이와 같은 질문이 도움말 파일에 답변됩니다. 실패하면 소스 코드 자체를 볼 수 있습니다. confusionmatrix괄호없이을 입력하여 소스를 콘솔에 인쇄 할 수 있습니다 .
shadowtalker

정확히 무엇을했는지 명확하지 않습니다. 패키지 에서 glm함수 를 호출하고 stats그 결과를 confusionMatrix? 나는 그것을 할 수 있다는 것을 몰랐고 매뉴얼을 읽는 것이 전혀 분명하지 않습니다. 아니면 predict뭔가 했습니까? 짧은 예가 도움이 될 것입니다.
Calimo

1
@Calimo 모델에 맞게 train함수를 사용하여 caret이항 패밀리를 glm으로 지정할 수 있습니다. 그런 predict다음를 통해 생성 된 객체 에서 함수 를 사용했습니다 train.
블랙 밀크

답변:


11

R의 대부분의 분류 모델은 클래스 예측과 각 클래스의 확률을 모두 생성합니다. 이진 데이터의 경우 거의 모든 경우에 클래스 예측은 50 % 확률 컷오프를 기반으로합니다.

glm는 ~와 마찬가지로. 함께 caret사용 predict(object, newdata)하면 예측 클래스를 제공하고 predict(object, new data, type = "prob")(때 당신에게 클래스 고유의 확률을 줄 것이다 object의해 생성된다 train).

자신의 모델정의 하고 원하는 컷오프를 적용 하여 다른 방식으로 작업을 수행 할 수 있습니다 . 이 caret 웹 사이트 에는 리샘플링을 사용하여 확률 컷오프를 최적화 하는 예제 도 있습니다 .

tl; dr

confusionMatrix 예측 된 클래스를 사용하므로 50 % 확률 컷오프

맥스


14

다음과 같이 가정하면 매우 쉬운 방법이 있습니다 tune <- train(...).

probsTest <- predict(tune, test, type = "prob")
threshold <- 0.5
pred      <- factor( ifelse(probsTest[, "yes"] > threshold, "yes", "no") )
pred      <- relevel(pred, "yes")   # you may or may not need this; I did
confusionMatrix(pred, test$response)

분명히, 당신이 시도하거나 "최고의"것을 고르고 싶은 것으로 임계 값을 설정할 수 있습니다. 가장 좋은 것은 가장 높은 결합 된 특이성과 감도를 의미합니다 :

library(pROC)
probsTrain <- predict(tune, train, type = "prob")
rocCurve   <- roc(response = train$response,
                      predictor = probsTrain[, "yes"],
                      levels = rev(levels(train$response)))
plot(rocCurve, print.thres = "best")

Max 게시 예를 살펴본 후, 접근 방식이 바람직하지 않은 통계적 뉘앙스가 있는지 확실하지 않습니다.


출력 된 rocCurve 플롯에서 세 값은 무엇을 의미합니까? 예를 들어 내 데이터에는 0.289 (0.853, 0.831)라고 표시됩니다. 0.289는 이진 결과를 구분하는 데 사용해야하는 최상의 임계 값을 나타 냅니까? 즉, 예측 확률이 0.289보다 큰 모든 경우는 "1"로 코딩되고 예측 확률이 <0.289 인 모든 경우는 caret패키지 의 0.5 기본 임계 값이 아니라 "0"으로 코딩 됩니까?
coip

2
그렇습니다. 괄호 안의 다른 두 가지 값은 감도와 특이성입니다 (정직
하게도

2
또한 그때부터 나는 rocCurve$thresholds[which(rocCurve$sensitivities + rocCurve$specificities == max(rocCurve$sensitivities + rocCurve$specificities))]당신이 원하는 경우 다르게 가중치를 부여 할 수있는 유연성을 제공 하는 roc 곡선에서 추출 할 수 있다는 것을 알았 습니다 ... 마지막으로 주목해야 할 것은 실제로는 임계 값을 조정하고 싶습니다 (예 : Max가 여기에 설명 된대로 모든 모델 하이퍼 매개 변수를 사용 합니다 .
efh0888
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.