저는 R에 익숙하지 않아이 문제에 부딪 혔습니다. 두 가지 예측 기술 (지원 벡터 머신과 신경망)을 일부 데이터에 적용하고 성능을 비교하고 싶습니다. 이렇게하려면 ROC 커브를 사용합니다. 이 코드는 ROC 곡선 아래의 영역을 계산하기로되어 있지만 작동하지 않습니다. 신경 네트워크 코드는 잘 작동하지만 SVM의 일부가 실행될 때이 오류가 발생했습니다R의 SVM : "예측자는 숫자 또는 순서 여야합니다."
> aucs <- auc((dtest$recid=="SI")*1, lr.pred)
Error in roc.default(response, predictor, auc = TRUE, ...) : Predictor must be numeric or ordered.
> obj.roc <- roc((dtest$recid=="SI")*1, lr.pred)
Error in roc.default((dtest$recid == "SI") * 1, lr.pred) : Predictor must be numeric or ordered.
이것은 내가 가지고있는 코드입니다.
library(stats)
library(pROC)
library(nnet)
library(e1071)
library(rpart)
data <- read.table("data.csv", header=T)
set.seed(1234)
ind <- sample(2, nrow(data), replace=TRUE, prob=c(0.8, 0.2))
dtrain <- data[ind==1,]
dtest <- data[ind==2,]
# Variables for storing comparison results #
bestAuc = 0
bestIdx = 0
# Support Vector Machines
lr.fit <- svm(recid~., data=dtrain, cost=1000, gamma=1, probability=TRUE)
lr.pred <- predict(lr.fit, dtest, type="response")
aucs <- auc((dtest$recid=="SI")*1, lr.pred)
obj.roc <- roc((dtest$recid=="SI")*1, lr.pred)
print("SVN (default)")
bestAuc = aucs # Initialize
# Neural networks
lr.fit <- nnet(recid~., data=dtrain, size=4, maxit=500, decay=1, trace=FALSE)
lr.pred <- predict(lr.fit, dtest, type="raw")
aucs <- auc((dtest$recid=="SI")*1, lr.pred)
obj.roc <- roc((dtest$recid=="SI")*1, lr.pred)
if(aucs > bestAuc) {
bestAuc <- aucs
bestIdx <- 1
print("Neural networks")
}
정보를 찾고 있었지만 사용중인 방법에 대한 정보가 거의없는 것으로 보입니다. ROCR이라는 패키지가 유용하다고 생각했지만 성능 기능에 오류가 발생했습니다. 나는 모든 라이브러리를 잃어 버렸으므로 개선하지 않고 초기 솔루션을 계속 사용하려고했습니다. 어떻게해야합니까?
편집 :이 솔루션은 Calimo의 아이디어를 기반으로 한
.
lr.pred <- attr(lr.pred,"probabilities")[,c("SI")]
문장은 ROC 곡선 분석 할 것입니다 열을 가져옵니다 내가 원하는 형식으로 데이터를 제공하지 않습니다 예측의 반환 값은 그래서 이것을 사용하는 데 필요한.