为什么ROC不能代表R

时间:2018-06-13 14:15:48

标签: r neural-network roc

我想知道为什么我的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结果

enter image description here

问题

为什么我的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))

enter image description here

0 个答案:

没有答案