我正在尝试使用逻辑回归模型和神经网络比较数据集的预测准确性。在查看两种方法的混淆矩阵时,与逻辑回归模型相比,ANN模型提供了更好的输出。但是,在绘制这两种方法的ROC曲线时,似乎逻辑回归模型更好。我想知道我的ROC曲线代码是否有问题。
对于上下文,我正在解释我的程序。首先,我将数据集分为训练和测试数据。
data = read.csv("heart.csv", header=TRUE)
set.seed(300)
index = sample(seq_len(nrow(data)), size = samplesize) # For logistic
train <- data[index,]
test <- data[-index,]
normalize <- function(x) {
return ((x - min(x)) / (max(x) - min(x)))
}
scaled <- as.data.frame(lapply(data, normalize))
index = sample(seq_len(nrow(scaled)), size = samplesize) # For ANN
trainset <- scaled[index, ]
testset <- scaled[-index, ]
响应变量是“目标”,因此我适合以下GLM:
glm.fit <- glm(target ~ ., data=train, family=binomial(link = "logit"),control = list(maxit = 50))
对于ANN,我使用R的Neuronet软件包并执行以下操作:
library(neuralnet)
nn <- neuralnet(target ~ ., data=trainset, hidden=c(3,2), act.fct = "logistic", err.fct = "sse", linear.output=FALSE, threshold=0.01)
对于我的ROC曲线,我执行了以下操作:
对于ANN:
prob = compute(nn, testset[, -ncol(testset)] )
prob.result <- prob$net.result
detach(package:neuralnet,unload = T)
library(ROCR)
nn.pred = prediction(prob.result, testset$target)
pref <- performance(nn.pred, "tpr", "fpr")
plot(pref)
对于逻辑回归:
prob=predict(glm.fit,type=c("response"))
library(ROCR)
pred <- prediction(prob, test$target)
perf <- performance(pred, measure = "tpr", x.measure = "fpr")
plot(perf, col=rainbow(7), main="ROC curve Admissions", xlab="Specificity",
ylab="Sensitivity")
我只想得到一些指导,以理解为什么当混淆矩阵表明不是这样时,为什么这些图似乎表明逻辑回归模型更好,并理解我做错了什么。
谢谢您的任何投入。