R neuralnet на данных NIR плохие результаты

Я пытаюсь предсказать набор валидации с помощью нейронной сети () со спектрами NIR, и я получаю очень плохие результаты.

В литературе некоторые сообщают об использовании сигмоидальной функции от входного слоя до скрытого слоя и линейной от скрытой до выходной; который я выбрал здесь. Я пробовал несколько разных итераций (т.е. количество нейронов, факторы PLS в качестве входных данных, ets) и все еще получил довольно плохие результаты в моей валидации.

   maxs1 <- apply(cal, 2, max)
   mins1 <- apply(cal, 2, min)
   scaledcal <- as.data.frame(scale(cal, center = mins1, scale = maxs1- mins1))

   maxs2 <- apply(val, 2, max)
   mins2 <- apply(val, 2, min)
   scaledval <- as.data.frame(scale(val, center = mins2, scale = maxs2- mins2))

library(neuralnet)

sigmoid = function(x) {
  1 / (1 + exp(-x))
}

set.seed(400)

n <- names(cal)
z <- length(n)-1
f <- as.formula(paste("DM ~", paste(n[!n %in% "DM"], collapse = " + ")))
nn <- neuralnet(f, data=scaledcal, act.fct = sigmoid, hidden=(20), linear.output=T,
                lifesign ="full", threshold=0.01, stepmax = 1e+07)

pr.nn <- compute(nn,scaledval[,1:83])

pr.nn_ <- pr.nn$net.result*(max(cal$DM)-min(cal$DM))+min(cal$DM)

test.cv.r <- (scaledval$DM)*(max(val$DM)-min(val$DM))+min(val$DM)

MSE.nn <- sum((pr.nn_ - val$DM)^2)/nrow(val)

MSE, которую я получал на nn, был где-то между 20-2, поэтому удивительно, что я получаю MSE 0,8 (диапазон 9-22) при выполнении простой LM на тех же данных.

lm.fit <- glm(DM~., data=cal)
pr.lm <- predict(lm.fit,val)
MSE.lm <- sum((pr.lm - val$DM)^2)/nrow(val)

Ура,

0 ответов

Другие вопросы по тегам