在R中运行以下代码以训练神经网络以对手写进行分类。有63列,其中第63列的分类范围为0到9
library(neuralnet)
data <- read.csv("handwriting.csv")
index <- sample(1:nrow(data),round(0.75*nrow(data)))
train <- data[index,]
test <- data[-index,]
n <- names(train)
f <- as.formula(paste("a63 ~", paste(n[!n %in% "a63"], collapse = " + ")))
nn <- neuralnet(f,data=train, hidden=2, linear.output=F, act.fct = "logistic", err.fct="ce")
plot(nn)
pr.nn <- compute(nn,test[, -63])
predicted <- pr.nn$net.result
results <- cbind(predicted, test$a63)
results
我在最后一步得到的输出如下
4480 0.9999991455 0
4482 0.9999991455 2
4490 0.9999991455 0
4492 0.9999991455 2
4494 0.9999991455 4
带小数的第一列是预测结果,这不是我所期望的,因为结果应该像上一列中的分类而不是小数,当我改变linear.output = TRUE时,我得到更接近的值但是这不是正确的解释,因为我的目的是分类
答案 0 :(得分:0)
R不知道你的csv中的0-9是一个分类变量。你必须强迫它成为一个因素。现在你正在预测一个连续的价值。在直接进入预测建模之前,它有助于进行一些探索性分析,包括通过调用class()函数确保使用正确的数据类型。