amankedia
amankedia

Reputation: 377

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:

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.

Upvotes: 0

Views: 3114

Answers (1)

phiver
phiver

Reputation: 23598

This error message is because you have character values in your data.

Try reading the hepatitis dataset with na.strings = "?". This is defined in the description of the dataset on the uci page.

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)

This code will not give your error, but it will give an error on missing values. You will need to do address those before you can continue. Also be aware that the class variable is the first variable in the dataset straight from the UCI data repository

Edit based on comments:

The na.action only works if you use the formula notation of nnet. So in your case:

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

Upvotes: 1

Related Questions