#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, переустановил их оба. Проблема довольно сложная, и даже переустановка программного обеспечения и пакетов не решила ее.