R 언어 | ROC 곡선 - 분류 기의 성능 표현 평가

2813 단어
필자 의 메시지: 분류 기 알고리즘 은 마지막 에 예측 정밀도 가 있 고 예측 정밀도 가 혼 란 스 러 운 행렬 을 쓸 것 이다. 모든 훈련 데 이 터 는 이 행렬 에 떨 어 질 것 이다. 대각선 의 숫자 는 정확 한 수량 을 예측 하 는 것 을 대표 한다. 즉, True Positive + True Nagetive 이다.
이와 함께 TPR (진율 또는 민감 도) 과 TNR (진음 율 또는 특이 도) 을 계산 할 수 있다.우 리 는 주관적 으로 이 두 가지 지표 가 클 수록 좋 기 를 바라 지만, 애석 하 게 도 두 가 지 는 이것 이 저것 을 없 애 는 관계 이다.분류 기의 훈련 매개 변 수 를 제외 하고 임계 점 의 선택 도 TPR 과 TNR 에 큰 영향 을 줄 수 있다.구체 적 인 문제 와 수요 에 따라 구체 적 인 임계 점 을 선택 할 수도 있다.
본 고 는 두 개의 ROC 곡선 그리 기 가방 이 있 으 니 참고 할 수 있다.
다음으로 전송:http://www.r-bloggers.com/lang/chinese/1205
우리 가 일련의 임계 점 을 선택 하면 일련의 TPR 과 TNR 을 얻어 이 값 에 대응 하 는 점 을 연결 하면 ROC 곡선 을 구성한다.ROC 곡선 은 우리 가 이 분류 기의 성능 표현 을 명확 하 게 이해 하 는 데 도움 을 주 고 서로 다른 분류 기의 성능 을 비교 하 는 데 도 편리 하 다.ROC 곡선 을 그 릴 때 는 1 - TNR 을 가로 좌표 로, TPR 을 세로 좌표 로 사용 하 는 것 이 습관 이다.R 언어 에서 ROC 곡선 을 그 리 는 방법 을 살 펴 보 자.
#    logistic  ,       
model1 <- glm(y~., data=newdata, family='binomial')
pre <- predict(model1,type='response')
#      prob     y        
data <- data.frame(prob=pre,obs=newdata$y)
#            
data <- data[order(data$prob),]
n <- nrow(data)
tpr <- fpr <- rep(0,n)
#         threshold   TPR FPR,      
for (i in 1:n) {
    threshold <- data$prob[i]
    tp <- sum(data$prob > threshold & data$obs == 1)
    fp <- sum(data$prob > threshold & data$obs == 0)
    tn <- sum(data$prob < threshold & data$obs == 0)
    fn <- sum(data$prob < threshold & data$obs == 1)
    tpr[i] <- tp/(tp+fn) #    
    fpr[i] <- fp/(tn+fp) #    
}
plot(fpr,tpr,type='l')
abline(a=0,b=1)

R 에는 ROC 곡선 을 그 리 는 데 사용 되 는 가방 도 있다. 예 를 들 어 흔히 볼 수 있 는 ROCR 가방 은 그림 을 그 릴 수 있 을 뿐만 아니 라 ROC 곡선 아래 면적 AUC 를 계산 하여 분류 기의 종합 적 인 성능 을 평가 할 수 있다. 이 수 치 는 0 - 1 사 이 를 취하 면 클 수록 좋다.
library(ROCR)
pred <- prediction(pre,newdata$y)
performance(pred,'auc')@y.values #AUC 
perf <- performance(pred,'tpr','fpr')
plot(perf)

ROCR 패키지 그래 픽 함수 의 기능 이 비교적 단일 하고 필 자 는 기능 이 더욱 강 한 pROC 패 키 지 를 선 호한 다.그것 은 두 개의 분류 기 를 편리 하 게 비교 할 수 있 고 가장 좋 은 임계 점 을 자동 으로 표시 할 수 있 으 며 그림 도 비교적 예 뻐 보인다.
library(pROC)
modelroc <- roc(newdata$y,pre)
plot(modelroc, print.auc=TRUE, auc.polygon=TRUE, grid=c(0.1, 0.2),
     grid.col=c("green", "red"), max.auc.polygon=TRUE,
     auc.polygon.col="skyblue", print.thres=TRUE)

——————————————————————————————————————————————
필 자 는 조작 할 때 다음 과 같은 문제 가 발생 한다.
Error in prediction(tablebank, bank_part$y_n) : 
Number of cross-validation runs must be equal for predictions and labels.

인터넷 의 해결 방안 은 다음 과 같다.
이 경우 예측 (예측, 태그, 태그. 점 = NULL) 함수 류 의 '예측' 과 '태그' 변 수 는 목록 이나 행렬 이 어야 합 니 다.

좋은 웹페이지 즐겨찾기