Я новичок в моделировании с нейронными сетями, но мне удалось создать нейронную сеть со всеми доступными точками данных, которая хорошо соответствует наблюдаемым данным. Нейронная сеть была сделана в R с пакетом nnet:
require(nnet)
##33.8 is the highest value
mynnet.fit <- nnet(DOC/33.80 ~ ., data = MyData, size = 6, decay = 0.1, maxit = 1000)
mynnet.predict <- predict(mynnet.fit)*33.80
mean((mynnet.predict - MyData$DOC)^2) ## mean squared error was 16.5
Данные, которые я анализирую, выглядят следующим образом, где DOC - это переменная, которую необходимо смоделировать (существует около 17 000 наблюдений):
Q GW_level Temp t_sum DOC
1 0.045 0.070 12.50 0.2 11.17
2 0.046 0.070 12.61 0.4 11.09
3 0.046 0.068 12.66 2.8 11.16
4 0.047 0.050 12.66 0.4 11.28
5 0.049 0.050 12.55 0.6 11.45
6 0.050 0.048 12.45 0.4 11.48
Теперь я прочитал, что модель должна быть обучена с 70% точек данных и проверена с оставшимися 30% точек данных. Как мне это сделать? Какие функции мне нужно использовать?
Я использовал функцию train из пакета caret для расчета параметров размера и затухания.
require(caret)
my.grid <- expand.grid(.decay = c(0.5, 0.1), .size = c(5, 6, 7))
mynnetfit <- train(DOC/33.80 ~ ., data = MyData, method = "nnet", maxit = 100, tuneGrid = my.grid, trace = f)
Любая прямая помощь или связь с другими сайтами / сообщениями очень ценится.
r
neural-networks
Strohmi
источник
источник
Ответы:
Руководство Карета Макса Куна - Построение модели - отличная отправная точка.
Я бы подумал, что этап проверки происходит в вызове caret train (), так как он выбирает ваши гиперпараметры затухания и размера с помощью начальной загрузки или другого подхода, который вы можете указать с помощью параметра trControl. Я называю набор данных, который я использую для определения ошибки окончательно выбранной модели, своим тестовым набором. Поскольку карета обрабатывает выбор гиперпараметров для вас, вам просто нужен тренировочный набор и тестовый набор.
Вы можете использовать функцию createDataPartition () в каретке, чтобы разделить ваш набор данных на обучающий и тестовый наборы. Я проверил это, используя набор данных Prestige из автомобильного пакета, в котором есть информация о доходах в зависимости от уровня образования и профессионального престижа:
Функция createDataPartition () выглядит несколько неправильно, потому что она не создает раздел для вас, а предоставляет вектор индексов, которые вы затем можете использовать для создания обучающих и тестовых наборов. Это довольно легко сделать самостоятельно в R с помощью sample (), но одна вещь, которую, очевидно, делает createDataPartition (), - это выборка из факторных уровней. Более того, если ваш результат категоричен, распределение поддерживается по разделам данных. Однако в данном случае это не актуально, поскольку ваш результат непрерывен.
Теперь вы можете тренировать свою модель на тренировочном наборе:
Кроме того: мне пришлось добавить параметр linout, чтобы заставить nnet работать с проблемой регрессии (против классификации). В противном случае я получил все 1 как прогнозируемые значения из модели.
Затем вы можете вызвать прогнозирование для подходящего объекта, используя набор тестовых данных, и рассчитать RMSE по результатам:
источник