2013-12-11 4 views
2

는, 예를 들어, 내가 임의 숲으로 데이터 세트를 훈련, 여기 내 코드입니다 :R (pROC 패키지)에서 여러 클래스 ROC 분석을 처리하는 방법은 무엇입니까? 나는 R (PROC 패키지)에 multiclass.roc 기능을 사용하면

# randomForest & pROC packages should be installed: 
# install.packages(c('randomForest', 'pROC')) 
data(iris) 
library(randomForest) 
library(pROC) 
set.seed(1000) 
# 3-class in response variable 
rf = randomForest(Species~., data = iris, ntree = 100) 
# predict(.., type = 'prob') returns a probability matrix 
multiclass.roc(iris$Species, predict(rf, iris, type = 'prob')) 

그리고 그 결과는 다음과 같습니다

Call: 
multiclass.roc.default(response = iris$Species, predictor = predict(rf,  
iris, type = "prob")) 
Data: predict(rf, iris, type = "prob") with 3 levels of iris$Species: setosa, 
versicolor, virginica. 
Multi-class area under the curve: 0.5142 

이게 맞습니까? 감사!!!

"PROC"참조 : http://www.inside-r.org/packages/cran/pROC/docs/multiclass.roc

답변

7

참고로 보았 듯이 multiclass.roc는 "숫자 벡터 (...)"를 기대하며 거기에서 링크 된 roc의 문서는 (사용자가 제공 한 링크에없는 이유로) response "과 동일한 길이의 분명히 틀렸고 pROC 1.6 이후 더 이상 지원되지 않는 3 개의 열이 포함 된 숫자 행렬을 전달하고 있습니다. 나는 그것이 이전에 무엇을하고 있었는지 전혀 모른다. 아마 당신이 기대했던 것이 아니었을 것이다.

이것은 예측을 숫자 모드의 단일 원자 벡터로 요약해야 함을 의미합니다. 그것은 일반적으로 정말 이해가되지 않지만 모델의 경우에는 숫자로 요소를 변환하려면 다음을 사용할 수

predictions <- as.numeric(predict(rf, iris, type = 'response')) 
multiclass.roc(iris$Species, predictions) 

이 코드는 정말에 3 개 ROC 곡선을 계산하는 것입니다 무엇을 당신의 예측 (setosa vs. versicolor, vicginica 대 virginica, setosa vs. virginica) 및 평균 AUC.

세 이상 코멘트 :

  • 나는 당신이 완벽한 분류가없는 상태에서 레벨 순서를 변경하는 경우 다른 결과를 얻을 수 있기 때문에 이해가되지 않는 숫자에 요소를 변환 말. 이것이 pROC에서 자동으로 수행되지 않는 이유입니다. 설치 프로그램에서이를 고려해야합니다.
  • 일반적으로이 멀티플 평균은 실제로 이해가되지 않으며 바이너리 분류의 관점에서 질문을 다시 생각하는 것이 좋습니다. pROC에서 아직 구현되지 않은 고급 다중 클래스 메서드 (ROC 표면 등)가 있습니다.
  • @cbeleites에서 설명한 것처럼 훈련 데이터가있는 모델을 다시 계산 (resubstitution)하는 것은 올바르지 않습니다. 실제 예제에서는 테스트를 따로 보관하거나 교차 유효성 검사를 사용해야합니다.
1

만 코드가 나에게 좋아 보인다 최소한의 작업 예 술의 resubstitution 추정치를했다는 것을 가정.

신속하게 유형 "prob"로 oob 예측을 얻으려고했지만 성공하지 못했습니다. 따라서 randomForest 함수 외부에서 유효성 검사를 수행해야합니다.

개인적으로 전체 멀티 클라스 모델을 하나의 무조건적인 숫자로 요약하려고하지 않습니다. 그러나 그것은 완전히 다른 질문입니다.

+0

죄송합니다. 귀하의 의미를 이해하지 못했습니다. –

+0

'multiclass.auc' [link] (http://www.inside-r.org/packages/cran/pROC/docs/multiclass.roc)의 방법을 보여주는 예제가 있습니다. 's100b'는 의미한다. 그것은 확률이 아니라 그것이 무엇인가? 감사! –

0

코드를 복사하고 AUC가 .83입니다. 무엇이 다른지 잘 모르겠습니다.

맞습니다. s100b 열은 확률이 아닙니다. aSAH (동맥류의 지주막 하 출혈 출혈) 데이터 세트는 임상 데이터 세트입니다. s100b는 뇌의 신경아 교세포에서 발견되는 단백질입니다. 데이터 세트에 대한 연구 논문에서 s100b 컬럼은 혈액 샘플에서 s100b 단백질 (ug/l)의 농도를 나타내는 것으로 보인다.

+0

실험의 결과가 0.83이라는 것을 의미합니까 ?? 또한 's100b'는 실제 변수이지만'score '가 아님을 의미합니까? 그러나'multiclass.roc' 함수를 사용했을 때'predictor'는 확률 행렬이므로 잘못된 것이어야합니다. 이 질문의 정답은 무엇입니까? –

+0

미안하지만 문제가 더 혼란 스럽습니다. pROC 도움말 문서는'predictor' 인자가 수치 벡터임을 명시하고 있습니다. 그래서 홍채 데이터에 대한 귀하의 초기 예제가 정확하다고 생각합니다. 그래서 나는 pROC 문서 (aSAH 데이터 세트 사용)에 링크 된 예제에 대해 의견을 말했습니다. '데이터 (aSAH)'이후에, 나는 도움으로 연결된 연구 논문 (''aSAH')을 보았다. s100b를 검색하면 단백질의 농도처럼 보입니다. –

+0

실제로 나의 초기 예제 인 '홍채 데이터'는'multiclass.roc' 함수에서'predictor'로 확률 행렬을 사용했습니다. 그러나 문제는 AUC가 중요하지 않다는 결과입니다 (_0.5142_)! 따라서 나는 그것을 교정하는 방법을 모르지만 코드가 잘못되었다고 생각합니다. 감사! –

관련 문제