URL Dataset.

abalone <- read.csv("abalone.csv", header =T, na.strings=c("","NA"))
suppressWarnings(suppressMessages(library(dplyr)))
#create an age column for different age group
train1 <- abalone %>%
  mutate(age=case_when(
    rings %in% 1:5 ~ "young",
    rings %in% 6:13 ~ "adult",
    rings %in% 14:30 ~ "old"
  ))
#convert AGE into factor
train1$age <- as.factor(train1$age)
# since we have 3 AGE groups (adult, young, old), create extra variables into numeric classes
# class 1 as ADULT, CLASS 2 AS YOUNG, CLASS 3 AS OLD
train1$is_class_1 <- as.numeric(train1$age == "adult")
train1$is_class_2 <- as.numeric(train1$age == "young")
train1$is_class_3 <- as.numeric(train1$age == "old")
# remove variables - RING and AGE and SEX
myvars <- names(train1) %in% c("rings", "age", "sex") 
train1 <- train1[!myvars]
#RANDOMIZE AND BREAK INTO TRAINSET AND TESTSET
train1 <- train1[sample(1:4177),]
# trainset = 60% , testset = 40% (any %)
trainset <- train1[1:2506, ]
testset <- train1[2507:4177, ]

Model is shown below

# supports numeric only
suppressWarnings(suppressMessages(library(neuralnet)))
my_abalone_net <- neuralnet(is_class_1+is_class_2+is_class_3 ~ length + diameter + height + weight + shucked + viscera + shell,
                        trainset, hidden = 8, lifesign = "minimal", linear.output = FALSE,
                        threshold = 0.1)
hidden: 8    thresh: 0.1    rep: 1/1    steps:    5100  error: 213.91839    time: 10.56 secs

ANN graph

plot(my_abalone_net)

Test against the test-set

# subset testset
temp_test <- subset(testset, select = c("length","diameter","height","weight","shucked","viscera","shell"))
# apply NN model to temp_test dataset
my_abalone_net.results <- compute(my_abalone_net, temp_test)
# view the results dataframe
results <- data.frame(testset$is_class_1, testset$is_class_2, testset$is_class_3,prediction = my_abalone_net.results$net.result)
# round up to 0 for comparison rather than estimated values
results$prediction_1 <- round(results$prediction.1)
results$prediction_2 <- round(results$prediction.2)
results$prediction_3 <- round(results$prediction.3)
# class 1 is classification by ADULT
table(results$prediction_1, results$testset.is_class_1)
   
       0    1
  0  132   68
  1  142 1329
# CLASS 2 AS YOUNG
table(results$prediction_2, results$testset.is_class_2)
   
       0    1
  0 1575   29
  1   12   55
# CLASS 3 AS OLD
table(results$prediction_3, results$testset.is_class_3)
   
       0    1
  0 1425  113
  1   56   77

It is difficult to classify into different AGE group based on physical appearances as you can see the above table classification output.

LS0tDQp0aXRsZTogIk5PVEVCT09LIG9uIEFCQUxPTkUgQXJ0aWZpY2FsIE5OIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KVVJMIFtEYXRhc2V0XShodHRwczovL2FyY2hpdmUuaWNzLnVjaS5lZHUvbWwvZGF0YXNldHMvQWJhbG9uZSkuDQoNCg0KYGBge3J9DQphYmFsb25lIDwtIHJlYWQuY3N2KCJhYmFsb25lLmNzdiIsIGhlYWRlciA9VCwgbmEuc3RyaW5ncz1jKCIiLCJOQSIpKQ0KDQpzdXBwcmVzc1dhcm5pbmdzKHN1cHByZXNzTWVzc2FnZXMobGlicmFyeShkcGx5cikpKQ0KDQojY3JlYXRlIGFuIGFnZSBjb2x1bW4gZm9yIGRpZmZlcmVudCBhZ2UgZ3JvdXANCnRyYWluMSA8LSBhYmFsb25lICU+JQ0KICBtdXRhdGUoYWdlPWNhc2Vfd2hlbigNCiAgICByaW5ncyAlaW4lIDE6NSB+ICJ5b3VuZyIsDQogICAgcmluZ3MgJWluJSA2OjEzIH4gImFkdWx0IiwNCiAgICByaW5ncyAlaW4lIDE0OjMwIH4gIm9sZCINCiAgKSkNCg0KI2NvbnZlcnQgQUdFIGludG8gZmFjdG9yDQp0cmFpbjEkYWdlIDwtIGFzLmZhY3Rvcih0cmFpbjEkYWdlKQ0KDQoNCiMgc2luY2Ugd2UgaGF2ZSAzIEFHRSBncm91cHMgKGFkdWx0LCB5b3VuZywgb2xkKSwgY3JlYXRlIGV4dHJhIHZhcmlhYmxlcyBpbnRvIG51bWVyaWMgY2xhc3Nlcw0KIyBjbGFzcyAxIGFzIEFEVUxULCBDTEFTUyAyIEFTIFlPVU5HLCBDTEFTUyAzIEFTIE9MRA0KDQoNCnRyYWluMSRpc19jbGFzc18xIDwtIGFzLm51bWVyaWModHJhaW4xJGFnZSA9PSAiYWR1bHQiKQ0KdHJhaW4xJGlzX2NsYXNzXzIgPC0gYXMubnVtZXJpYyh0cmFpbjEkYWdlID09ICJ5b3VuZyIpDQp0cmFpbjEkaXNfY2xhc3NfMyA8LSBhcy5udW1lcmljKHRyYWluMSRhZ2UgPT0gIm9sZCIpDQoNCiMgcmVtb3ZlIHZhcmlhYmxlcyAtIFJJTkcgYW5kIEFHRSBhbmQgU0VYDQpteXZhcnMgPC0gbmFtZXModHJhaW4xKSAlaW4lIGMoInJpbmdzIiwgImFnZSIsICJzZXgiKSANCnRyYWluMSA8LSB0cmFpbjFbIW15dmFyc10NCg0KI1JBTkRPTUlaRSBBTkQgQlJFQUsgSU5UTyBUUkFJTlNFVCBBTkQgVEVTVFNFVA0KdHJhaW4xIDwtIHRyYWluMVtzYW1wbGUoMTo0MTc3KSxdDQoNCiMgdHJhaW5zZXQgPSA2MCUgLCB0ZXN0c2V0ID0gNDAlIChhbnkgJSkNCnRyYWluc2V0IDwtIHRyYWluMVsxOjI1MDYsIF0NCnRlc3RzZXQgPC0gdHJhaW4xWzI1MDc6NDE3NywgXQ0KDQpgYGANCg0KDQojTW9kZWwgaXMgc2hvd24gYmVsb3cNCg0KYGBge3IgQU5OIG1vZGVsfQ0KIyBzdXBwb3J0cyBudW1lcmljIG9ubHkNCg0Kc3VwcHJlc3NXYXJuaW5ncyhzdXBwcmVzc01lc3NhZ2VzKGxpYnJhcnkobmV1cmFsbmV0KSkpDQoNCm15X2FiYWxvbmVfbmV0IDwtIG5ldXJhbG5ldChpc19jbGFzc18xK2lzX2NsYXNzXzIraXNfY2xhc3NfMyB+IGxlbmd0aCArIGRpYW1ldGVyICsgaGVpZ2h0ICsgd2VpZ2h0ICsgc2h1Y2tlZCArIHZpc2NlcmEgKyBzaGVsbCwNCiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWluc2V0LCBoaWRkZW4gPSA4LCBsaWZlc2lnbiA9ICJtaW5pbWFsIiwgbGluZWFyLm91dHB1dCA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICAgICAgICAgdGhyZXNob2xkID0gMC4xKQ0KYGBgDQoNCiNBTk4gZ3JhcGggDQoNCmBgYHtyIGFubiBncmFwaH0NCnBsb3QobXlfYWJhbG9uZV9uZXQpDQpgYGANCg0KI1Rlc3QgYWdhaW5zdCB0aGUgdGVzdC1zZXQNCmBgYHtyfQ0KIyBzdWJzZXQgdGVzdHNldA0KdGVtcF90ZXN0IDwtIHN1YnNldCh0ZXN0c2V0LCBzZWxlY3QgPSBjKCJsZW5ndGgiLCJkaWFtZXRlciIsImhlaWdodCIsIndlaWdodCIsInNodWNrZWQiLCJ2aXNjZXJhIiwic2hlbGwiKSkNCg0KIyBhcHBseSBOTiBtb2RlbCB0byB0ZW1wX3Rlc3QgZGF0YXNldA0KbXlfYWJhbG9uZV9uZXQucmVzdWx0cyA8LSBjb21wdXRlKG15X2FiYWxvbmVfbmV0LCB0ZW1wX3Rlc3QpDQoNCiMgdmlldyB0aGUgcmVzdWx0cyBkYXRhZnJhbWUNCnJlc3VsdHMgPC0gZGF0YS5mcmFtZSh0ZXN0c2V0JGlzX2NsYXNzXzEsIHRlc3RzZXQkaXNfY2xhc3NfMiwgdGVzdHNldCRpc19jbGFzc18zLHByZWRpY3Rpb24gPSBteV9hYmFsb25lX25ldC5yZXN1bHRzJG5ldC5yZXN1bHQpDQoNCiMgcm91bmQgdXAgdG8gMCBmb3IgY29tcGFyaXNvbiByYXRoZXIgdGhhbiBlc3RpbWF0ZWQgdmFsdWVzDQpyZXN1bHRzJHByZWRpY3Rpb25fMSA8LSByb3VuZChyZXN1bHRzJHByZWRpY3Rpb24uMSkNCnJlc3VsdHMkcHJlZGljdGlvbl8yIDwtIHJvdW5kKHJlc3VsdHMkcHJlZGljdGlvbi4yKQ0KcmVzdWx0cyRwcmVkaWN0aW9uXzMgPC0gcm91bmQocmVzdWx0cyRwcmVkaWN0aW9uLjMpDQoNCiMgY2xhc3MgMSBpcyBjbGFzc2lmaWNhdGlvbiBieSBBRFVMVA0KDQp0YWJsZShyZXN1bHRzJHByZWRpY3Rpb25fMSwgcmVzdWx0cyR0ZXN0c2V0LmlzX2NsYXNzXzEpDQoNCiMgQ0xBU1MgMiBBUyBZT1VORw0KdGFibGUocmVzdWx0cyRwcmVkaWN0aW9uXzIsIHJlc3VsdHMkdGVzdHNldC5pc19jbGFzc18yKQ0KDQojIENMQVNTIDMgQVMgT0xEDQp0YWJsZShyZXN1bHRzJHByZWRpY3Rpb25fMywgcmVzdWx0cyR0ZXN0c2V0LmlzX2NsYXNzXzMpDQpgYGANCg0KDQoNCiMgSXQgaXMgZGlmZmljdWx0IHRvIGNsYXNzaWZ5IGludG8gZGlmZmVyZW50IEFHRSBncm91cCBiYXNlZCBvbiBwaHlzaWNhbCBhcHBlYXJhbmNlcyBhcyB5b3UgY2FuIHNlZSB0aGUgYWJvdmUgdGFibGUgY2xhc3NpZmljYXRpb24gb3V0cHV0Lg0K