错误 运行 神经网络

Error running neural net

library(nnet)
set.seed(9850)
train1<- sample(1:155,110)
test1 <- setdiff(1:110,train1)
ideal <- class.ind(hepatitis$class)
hepatitisANN = nnet(hepatitis[train1,-20], ideal[train1,], size=10, softmax=TRUE)
j <- predict(hepatitisANN, hepatitis[test1,-20], type="class")
hepatitis[test1,]$class
table(predict(hepatitisANN, hepatitis[test1,-20], type="class"),hepatitis[test1,]$class)
confusionMatrix(hepatitis[test1,]$class, j)

错误:

Error in nnet.default(hepatitis[train1, -20], ideal[train1, ], size = 10,  : 
  NA/NaN/Inf in foreign function call (arg 2)
In addition: Warning message:
In nnet.default(hepatitis[train1, -20], ideal[train1, ], size = 10,  :
  NAs introduced by coercion

hepatitis variable consists of the hepatitis dataset available on UCI.

此错误消息是因为您的数据中有字符值。

尝试使用 na.strings =“?”读取肝炎数据集。这是在 uci 页面上数据集的描述中定义的。

headers <- c("Class","AGE","SEX","STEROID","ANTIVIRALS","FATIGUE","MALAISE","ANOREXIA","LIVER BIG","LIVER FIRM","SPLEEN PALPABLE","SPIDERS","ASCITES","VARICES","BILIRUBIN","ALK PHOSPHATE","SGOT","ALBUMIN","PROTIME","HISTOLOGY")
hepatitis <- read.csv("https://archive.ics.uci.edu/ml/machine-learning-databases/hepatitis/hepatitis.data", header = FALSE, na.strings = "?")
names(hepatitis) <- headers

library(nnet)
set.seed(9850)
train1<- sample(1:155,110)
test1 <- setdiff(1:110,train1)

ideal <- class.ind(hepatitis$Class)

# will give error due to missing values
# 1st column of hepatitis dataset is the class variable
hepatitisANN <- nnet(hepatitis[train1,-1], ideal[train1,], size=10, softmax=TRUE)

此代码不会给出您的错误,但会给出缺失值的错误。在继续之前,您需要解决这些问题。 另请注意,class 变量是直接来自 UCI 数据存储库的数据集中的第一个变量

根据评论编辑:

na.action 仅在使用 nnet 的公式表示法时有效。 所以在你的情况下:

hepatitisANN <- nnet(class.ind(Class)~., hepatitis[train1,], size=10,  softmax=TRUE, na.action = na.omit)