英文:
"Neuralnet" Library in R - Confusion Matrix
问题
我运行此代码时收到错误消息“所有参数必须具有相同的长度”。
是否有人可以向我展示如何克服这个错误,因为'test$y'和'pred_label'都具有相同的输入长度?
我目前正在尝试从这些数据中生成混淆矩阵(具有讽刺意味),并且将不胜感激地接受所有帮助。
library(neuralnet)
library(tidyverse)
#MOCK DATA
x1 = rep(1:3, times = 40)
x2 = rep(1:3, times = 40)
x3 = rep(1:3, times = 40)
x4 = rep(1:3, times = 40)
x5 = rep(1:3, times = 40)
y = rep(0:1, times = 60)
y <- as.factor(y)
dat <- data.frame(y, x1, x2, x3, x4, x5)
#SPLIT
set.seed(123)
indexes = createDataPartition(dat$y, p = .85, list = F)
train = dat[indexes, ]
test = dat[-indexes, ]
xtest = test[, -1]
ytest = test[, 1]
#MODEL
NN1 <- neuralnet(y ~., train,
linear.output = FALSE,
stepmax = 1e7)
#ACCURACY TEST
pred <- predict(NN1, test)
labels <- c("0", "1")
pred_label <- data.frame(max.col(pred)) %>%
mutate(pred = labels[max.col.pred.]) %>%
select(2) %>%
unlist()
table(test$y, pred_label)
我目前正在遵循此教程:https://www.datacamp.com/tutorial/neural-network-models-r
英文:
I get an error message "all arguments must have the same length" when I run this code.
Would it be possible for someone to show me how to overcome this error, given `test$y,' and 'pred_label' both have the same input length?
I am currently struggling to generate a confusion matrix (ironically) from this data, and all help would be appreciated.
library(neuralnet)
library(tidyverse)
#MOCK DATA
x1 = rep(1:3, times = 40)
x2 = rep(1:3, times = 40)
x3 = rep(1:3, times = 40)
x4 = rep(1:3, times = 40)
x5 = rep(1:3, times = 40)
y = rep(0:1, times = 60)
y <- as.factor(y)
dat <- data.frame(y, x1, x2, x3, x4, x5)
#SPLIT
set.seed(123)
indexes=createDataPartition(dat$y, p=.85, list = F)
train = dat[indexes, ]
test = dat[-indexes, ]
xtest = test[, -1]
ytest = test[, 1]
#MODEL
NN1 <- neuralnet(y ~., train,
linear.output = FALSE,
stepmax=1e7)
#ACCURACY TEST
pred <- predict(NN1, test)
labels <- c("0", "1")
pred_label <- data.frame(max.col(pred)) %>%
mutate(pred=labels[max.col.pred.]) %>%
select(2) %>%
unlist()
table(test$y, prediction_label)
I am currently following this tutorial. https://www.datacamp.com/tutorial/neural-network-models-r
答案1
得分: 1
你可以使用以下代码进行ROC计算
library(MLeval)
pred <- predict(NN1, newdata = test)
colnames(pred) <- c("No", "Yes")
roc <- data.frame(pred, y = test$y, Group = "ANN") %>%
mutate(y = if_else(y == 0, "No", "Yes"))
ROC <- evalm(roc)
英文:
You can use the following code
library(neuralnet)
library(tidyverse)
library(caret)
#MOCK DATA
x1 = rep(1:3, times = 40)
x2 = rep(1:3, times = 40)
x3 = rep(1:3, times = 40)
x4 = rep(1:3, times = 40)
x5 = rep(1:3, times = 40)
y = rep(0:1, times = 60)
y <- as.factor(y)
dat <- data.frame(y, x1, x2, x3, x4, x5)
#SPLIT
set.seed(123)
indexes=createDataPartition(dat$y, p=.85, list = F)
train = dat[indexes, ]
test = dat[-indexes, ]
#MODEL
NN1 <- neuralnet(y ~., train,
linear.output = FALSE,
stepmax=1e7)
#ACCURACY TEST
pred <- predict(NN1, newdata = test)
colnames(pred) <- c("0", "1")
tab <- table(test$y, colnames(pred)[max.col(pred)])
confusionMatrix(tab)
#> Confusion Matrix and Statistics
#>
#>
#> 0 1
#> 0 3 6
#> 1 6 3
#>
#> Accuracy : 0.3333
#> 95% CI : (0.1334, 0.5901)
#> No Information Rate : 0.5
#> P-Value [Acc > NIR] : 0.9519
#>
#> Kappa : -0.3333
#>
#> Mcnemar's Test P-Value : 1.0000
#>
#> Sensitivity : 0.3333
#> Specificity : 0.3333
#> Pos Pred Value : 0.3333
#> Neg Pred Value : 0.3333
#> Prevalence : 0.5000
#> Detection Rate : 0.1667
#> Detection Prevalence : 0.5000
#> Balanced Accuracy : 0.3333
#>
#> 'Positive' Class : 0
For ROC calculation, you can use the following code
library(MLeval)
pred <- predict(NN1, newdata = test)
colnames(pred) <- c("No", "Yes")
roc <- data.frame(pred, y = test$y, Group = "ANN") %>%
mutate(y = if_else(y == 0, "No", "Yes"))
ROC <- evalm(roc)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论