私は R を初めて使用し、この問題に遭遇しました。2 つの予測手法 (サポート ベクター マシンとニューラル ネットワーク) をいくつかのデータに適用して比較し、それらのパフォーマンスを比較したいと考えています。これを行うには、ROC 曲線を使用します。コードは ROC 曲線の下の領域を計算するはずですが、機能していません。ニューラル ネットワーク コードは正常に動作しますが、SVM 部分を実行すると、次のエラーが発生しました。
> aucs <- auc((dtest$recid=="SI")*1, lr.pred)
roc.default(response, predictor, auc = TRUE, ...) のエラー: Predictor は数値または順序付けされている必要があります。
> obj.roc <-roc((dtest$recid=="SI")*1, lr.pred )
roc.default((dtest$recid == "SI") * 1, lr.pred) のエラー: 予測子は数値または順序付けされている必要があります。
これは私が持っているコードです。
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 のアイデアに基づいていました。predict の戻り値は、必要な形式のデータを提供しないため、これを使用する必要がありました。
lr.pred <- attr(lr.pred,"probabilities")[,c("SI")]
文は、ROC 曲線で分析される列を取得します。