我想知道为什么我的ROC图表可能错误
按照使用的包:
library(datasets)
library(caTools)
library(neuralnet)
library(ROCR)
按照我的脚本和我得到的ROC结果:
1。第一步我将物种分类为1,2,3
data(iris)
iris$Species <- ifelse(iris$Species=='setosa',1,ifelse(iris$Species=='versicolor',2,3))
2。第二步,规范化数据
scaled.dat<-scale(iris[,1:4])
第3。第三步,拆分数据:训练和测试
split <- sample.split(iris$Species, SplitRatio = 0.70)
treino <- subset(iris, split == TRUE)
teste <- subset(iris, split == FALSE)
4。第四步,转换标准格式的字符串变量
feats <- names(teste[,c('Sepal.Length','Sepal.Width','Petal.Length','Petal.Width')])
f <- paste(feats,collapse=' + ')
f <- paste('Species ~',f)
f <- as.formula(f)
5。第五步,运行神经网络包和混淆矩阵分析
nn <- neuralnet(f, treino, hidden = c(4),linear.output=TRUE, threshold=0.01)
plot(nn)
pr.nn <- compute(nn, teste[, 1:4])
results <- data.frame(actual = teste$Species, prediction = pr.nn$net.result)
results
roundedresults<-sapply(results,round,digits=0)
roundedresultsdf=data.frame(roundedresults)
attach(roundedresultsdf)
table(actual,prediction)
head(roundedresultsdf$prediction)
1 1 1 1 1 1
head(roundedresultsdf$actual)
1 1 1 1 1 1
6。第六步,ROC分析
roundedresultsdf$label <- ifelse(roundedresultsdf$actual==roundedresultsdf$prediction,1,0)
pred <- prediction(roundedresultsdf$prediction,roundedresultsdf$label)
perf1 <- performance(pred,"tpr","fpr")
plot(perf1)
abline(a=0, b= 1)
为什么我的ROC结果与模型结果如此不同。应该是更好的曲线作为良好模型的ROC图表。
这是multiclass ROC
的问题,请遵循正确的代码:
install.packages('pROC')
library(pROC)
roc.multi <- multiclass.roc(results$actual, results$prediction)
auc(roc.multi)
rs <- roc.multi[['rocs']]
plot.roc(rs[[1]])
legend("bottomleft", inset=.02, title="Número de classes",
c("1","2","3"), fill=c("yellow", "red", "green"), horiz=TRUE, cex=0.8)
sapply(1:length(rs),function(i) lines.roc(rs[[i]],col=i))