2012-07-13 3 views
21

ROCR을 사용하여 ROC 곡선을 그리는 방법을 설명 할 수 있습니까? 내가 먼저 실행해야 함을 알고 : 다음ROCR 패키지를 사용하는 R의 ROC 곡선

prediction(predictions, labels, label.ordering = NULL) 

과 :

performance(prediction.obj, measure, x.measure="cutoff", ...) 

을 그냥 예측 및 레이블이 무엇을 의미하는지 명확하지입니다. 나는 ctree와 cforest로 모델을 만들었고, 둘 다 ROC 곡선을 사용하여 결국 그것을 비교하기를 원합니다. 필자의 경우 class 속성은 y_n이다. 레이블에 사용해야한다. 그러나 예측은 어떨까요?

pred<-cforest(y_n~.,bank_part) 
tablebank<-table(predict(pred),bank_part$y_n) 
prediction(tablebank, bank_part$y_n) 

나는이 오류 얻을 마지막 줄에 실행 한 후 : 사전에

Error in prediction(tablebank, bank_part$y_n) : 
Number of cross-validation runs must be equal for predictions and labels. 

덕분에 저는 여기에 (데이터 세트 이름 = bank_part을)하는 일의 단계가 있습니다! 여기

는 또 다른 예이다 : 나는 훈련 데이터 세트 (bank_training) 및 테스트 데이터 세트 (bank_testing)을하고 난 아래와 같이 랜덤 포레스트를 실행 :

bankrf<-randomForest(y~., bank_training, mtry=4, ntree=2,  
keep.forest=TRUE,importance=TRUE) 
bankrf.pred<-predict(bankrf, bank_testing, type='response') 

이제 bankrf.pred이 라벨의 C =와 요소 객체입니다 ("0", "1"). 그래도 ROC를 그릴 방법을 모릅니다. 예측 부분에 갇히게됩니다. 여기에 내가

library(ROCR) 
pred<-prediction(bankrf.pred$y, bank_testing$c(0,1) 

을 무엇하지만

Error in bankrf.pred$y_n : $ operator is invalid for atomic vectors 
+5

완전한 모습으로 제공되는 예제를 제공 한 경우 더 많은 잠재 고객을 확보 할 수 있습니다. 방법에 대한 정보는 http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example을 참조하십시오. –

답변

23

예측이 분류의 변함 예측되는 오류 메시지가 얻을 원인이 여전히 잘못, 라벨은 각 변수에 대한 진 사실이다.

그래서 다음과 같이 작동합니다 :

> pred <- prediction(c(0.1,.5,.3,.8,.9,.4,.9,.5), c(0,0,0,1,1,1,1,1)) 
> perf <- performance(pred, "tpr", "fpr") 
> plot(perf) 

는 ROC를 생성합니다.

편집 : 질문에 재현 가능한 코드 샘플을 포함시키는 것이 도움이 될 수 있습니다 (의견을 분석하는 데 어려움이 있습니다).

plotROC <- function(truth, predicted, ...){ 
    pred <- prediction(abs(predicted), truth)  
    perf <- performance(pred,"tpr","fpr") 

    plot(perf, ...) 
} 
+0

[편집] 나는 아직도 그것을 얻지 못한다. 다음은 또 다른 예입니다. 훈련 데이터 세트 (bank_training)와 테스트 데이터 세트 (bank_testing)가 있으며 randomForest를 아래와 같이 실행했습니다. bankrf <-randomForest (y ~., bank_training, mtry = 4, ntree = 2, keep .forest = TRUE, 중요성 = TRUE) bankrf.pred <-predict (bankrf, bank_testing) 라이브러리 (ROCR) PRED <-prediction (bankrf.pred $ y를, bank_testing $ y를) 하지만 여전히 올바르지 않습니다, 예측 형식에 오류가 있다는 오류 메시지가 표시됩니다. – spektra

0

문제는 당신이 여러 실행에 대한 예측 기능을 실행하고 싶은 것을 할 수있다 :

가 여기에 새로운 코드는 없다,하지만 ... 여기가 내가 ROC 플로팅 자주 사용하는 기능입니다 교차 유효성 확인을위한 예.

예측 (예측, 레이블, label.ordering = NULL) 함수의 경우 "예측"및 "레이블"클래스의 클래스는 목록 또는 행렬이어야합니다.

7

@ Jeff와 마찬가지로 ROCRprediction 기능에 대한 예측이 계속되어야합니다. require(randomForest); ?predict.randomForest은 기본적으로 predict.randomForest이 원래의 눈금 (분류의 클래스 레이블)에 대한 예측을 반환하지만 predict.randomForest(..., type = 'prob')은 각 클래스의 확률을 반환한다는 것을 보여줍니다.따라서 :

require(ROCR) 
data(iris) 
iris$setosa <- factor(1*(iris$Species == 'setosa')) 
iris.rf <- randomForest(setosa ~ ., data=iris[,-5]) 
summary(predict(iris.rf, iris[,-5])) 
summary(iris.preds <- predict(iris.rf, iris[,-5], type = 'prob')) 
preds <- iris.preds[,2] 
plot(performance(prediction(preds, iris$setosa), 'tpr', 'fpr')) 

원하는 것을 제공합니다. 다른 분류 패키지는 예측 된 확률을 얻기 위해 다른 명령을 필요로합니다 - 때로는 predict(..., type='probs'), predict(..., type='prob')[,2] 등입니다. 따라서 호출하는 각 함수에 대한 도움말 파일을 확인하십시오.

1

다른 사람들에 의해 지적 되었 듯이, ROCR의 예측은 수치 값을 기대합니다. randomForest (ROCR의 첫 번째 인수로 예측)을 삽입하는 경우 해당 예측은 type='response' 대신 type='prob' (기본값)으로 생성되어야합니다. 또는 type='response' 개의 결과를 취하여 숫자로 변환 할 수 있습니다 (즉, 응답이 0/1이라고하면). 그러나 ROCR은 ROC 곡선에서 의미있는 단일 점을 생성합니다. ROC 곡선에서 많은 점을 얻으려면 각 예측과 관련된 확률이 필요합니다. 즉, 예측 생성시 type='prob'을 사용합니다.

4

이 당신이 그것을 할 수있는 방법은 다음과 같습니다

는, CSV 파일 ("data_file.csv")를 우리의 데이터를 가지고 있지만 여기에 전체 경로를 제공해야 할 수도 있습니다. 이 파일에는 열 머리글이 있습니다. 여기서는 "default_flag", "var1", "var2", "var3"을 사용합니다. 여기서 default_flag는 0 또는 1이고 다른 변수는 값을가집니다. R 코드 : 안양 $ 점수는 당신에게 기본의 가능성을 줄 것이다

rm(list=ls()) 
df <- read.csv("data_file.csv") #use the full path if needed 
mylogit <- glm(default_flag ~ var1 + var2 + var3, family = "binomial" , data = df) 

summary(mylogit) 
library(ROCR) 

df$score<-predict.glm(mylogit, type="response") 
pred<-prediction(df$score,df$default_flag) 
perf<-performance(pred,"tpr", "fpr") 
plot(perf) 
auc<- performance(pred,"auc") 
auc 

참고.

library(ROCR) pred<-ROCR::prediction(bankrf.pred$y, bank_testing$c(0,1)

이 기능 예측은 다음과 같습니다 경우 당신이 하나의 시도

df2 <- read.csv("data_file2.csv") 

df2$score<-predict.glm(mylogit,newdata=df2, type="response") 

pred<-prediction(df2$score,df2$default_flag) 
perf<-performance(pred,"tpr", "fpr") 
plot(perf) 
auc<- performance(pred,"auc") 
auc 
0

를 사용하여 교차 검증을 위해 설정 DF2 다른 데이터에서 테스트하려면이 로짓 (같은 회귀 계수)를 사용하려면 현재 많은 패키지가 있습니다. ROCR에서이를 사용하려면 명시 적으로 (ROCR : :)을 지정해야합니다. 이것은 나를 위해 일했다.

관련 문제