Пакет R nnet больше не работает

#r #nnet #rattle

#r #nnet #дребезжание

Вопрос:

Я знаю, что это странная проблема, и я даже не могу дать MRE, но с надеждой, что кто-то еще столкнулся с подобным и решил его, я отправляю вопрос.

Я использую Rattle со всеми доступными моделями. Я хотел использовать автономный nnet, чтобы самостоятельно проверять результаты и иметь больший контроль над параметрами.

В какой-то момент я включил переключатель энтропии (у меня не так много переменных и факторов), что привело к ошибке. Я переключил переключатель обратно на значение по умолчанию (FALSE), но с тех пор nnet никогда не работал должным образом. Даже внутри Rattle он не работает на обучающем наборе, который я использовал, возможно, 100 раз. Я смог получить оценки вероятности, теперь Rattle дает мне оценки вероятности для всех других моделей, но не для nnet. Nnet по-прежнему выдает двоичный вывод, даже если в параметрах Rattle Score выбрано значение «Вероятность».

Кто-нибудь сталкивался с подобной проблемой с nnet?

Редактировать: часть кода:

 mnnet <- nnet(response1 ~ ., data=dftr, size=10, skip=TRUE, MaxNWts=100000, trace=FALSE, maxit=100)
  

Увеличение MaxNWts, похоже, устраняет ошибку too many weights , но теперь требуется время для запуска и потребляет много памяти. С тем же набором данных я смог запустить множество вариантов размера обучения в цикле, что заняло менее минуты. (Я использую Mac Book Pro объемом 16 ГБ) Речь идет о наборе из ~ 10000 строк и около 20 функций.

Пример кода того, что раньше работало отлично:

 pldata <- data.frame(nobs = NA,
                 ntrain = NA,
                 ntest = NA,
                 error = NA
)
#
obssize <- seq(0.8, 1.0, 0.1)
trsize <- seq(0.5, 0.8, 0.05)
#
set.seed(1234)
for (i in obssize){
  ind1 <- sample(nrow(df), i * nrow(df))
  dfp <- df[ind1,]
  size <- nrow(dfp)
  for (j in trsize){
    ind2 <- sample(nrow(dfp), j * nrow(dfp))
    dftr <- dfp[ind2, ]
    dftest <- dfp[-ind2, ]
    mnnet <- nnet(response1 ~ ., data=dftr, size=20, skip=TRUE, MaxNWts=10000, trace=FALSE, maxit=100)
    nnetp <- predict(mnnet, newdata = dftest)
    nnetp <- factor(nnetp, levels = levels(dftr$response1))
    cfm <- table(nnetp, dftest$response1)
    mcrate <- (length(nnetp) - sum(diag(cfm))) / length(nnetp)
    trainsize <- nrow(dftr)
    testsize <- nrow(dftest)
    temp <- data.frame(nobs = size, ntrain = trainsize, ntest =  testsize, error = mcrate)
    pldata <- rbind(pldata, temp)           
  }
}
#
pldata <- pldata[2:nrow(pldata),]
  

Теперь часть построения модели не работает, не говоря уже о том, чтобы поместить ее в цикл.

Редактировать 2: проверил параметры и опубликовал, что происходит:

 mnnet <- nnet(response1 ~ ., data=dftr, size=10, skip=TRUE, MaxNWts=100000, trace=FALSE, maxit=100, entropy = FALSE)
  

> mnnet$entropy

[1] TRUE

Как только для энтропии установлено значение «TRUE», кажется невозможным вернуть его к значению по умолчанию.

Комментарии:

1. Попробуйте перезапустить R. В противном случае опубликуйте свой код.

2. Большое спасибо @HongOoi . Я перезапустил R, удалил R и RStudio, переустановил их оба. Проблема довольно сложная, и даже переустановка программного обеспечения и пакетов не решила ее.