Як тренувати та перевіряти модель нейронної мережі в R?


33

Я новачок у моделюванні нейронних мереж, але мені вдалося створити нейронну мережу з усіма доступними точками даних, яка добре відповідає спостережуваним даним. Нейронна мережа була виконана в 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% точок даних. Як це зробити? Які функції я повинен використовувати?

Я використовував функцію поїзда з пакета 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)

Будь-яка вдячність за будь-яку пряму допомогу чи посилання на інші веб-сайти / публікації.


6
Насправді методологія розділення поїздів / тестів є субпартом, оскільки продуктивність вашого алгоритму може дещо відрізнятися залежно від вашого вибору точки розщеплення (я бачив 5% різниці ...). Краща методологія - це перехресне підтвердження.
Джон Дучетт

Відповіді:


36

Посібник з піклування Макса Куна - Побудова моделі - чудова відправна точка.

Я вважаю, що етап валідації відбувається під час виклику поїзда caret (), оскільки він вибирає ваші гіперпараметри занепаду та розміру за допомогою завантажувального чи іншого підходу, який ви можете вказати за допомогою параметра trControl. Я називаю набір даних, який використовую для характеристики помилки остаточної обраної моделі, своїм тестовим набором. Оскільки каретка займається підбором гіперпараметрів для вас, вам просто потрібен навчальний набір і тестовий набір.

Ви можете використовувати функцію createDataPartition () у кареті, щоб розділити набір даних на навчальні та тестові набори. Я перевірив це, використовуючи набір даних Prestige з автомобільного пакету, в якому є інформація про доходи, пов'язані з рівнем освіти та професійним престижем:

library(car)
library(caret)
trainIndex <- createDataPartition(Prestige$income, p=.7, list=F)
prestige.train <- Prestige[trainIndex, ]
prestige.test <- Prestige[-trainIndex, ]

Функція createDataPartition () здається трохи неправильною, тому що вона не створює для вас розділ, а надає вектор індексів, які ви потім можете використовувати для побудови навчальних і тестових наборів. Це досить легко зробити це самостійно в R , використовуючи зразок () , але одна річ createDataPartition () , очевидно , робить це робити вибірку всередині рівнів факторів. Крім того, якщо ваш результат категоричний, розподіл підтримується між розділами даних. Однак у цьому випадку це не актуально, оскільки ваш результат є постійним.

Тепер ви можете тренувати свою модель на тренувальному наборі:

my.grid <- expand.grid(.decay = c(0.5, 0.1), .size = c(5, 6, 7))
prestige.fit <- train(income ~ prestige + education, data = prestige.train,
    method = "nnet", maxit = 1000, tuneGrid = my.grid, trace = F, linout = 1)    

Убік: мені довелося додати параметр linout, щоб змусити мережу працювати з проблемою регресії (проти класифікації). В іншому випадку я отримав усі 1s як прогнозовані значення від моделі.

Потім можна зателефонувати передбачити на об'єкт fit, використовуючи тестовий набір даних і обчислити RMSE за результатами:

prestige.predict <- predict(prestige.fit, newdata = prestige.test)
prestige.rmse <- sqrt(mean((prestige.predict - prestige.test$income)^2)) 

ваше посилання Макса Куна, схоже, померло.
EngrStudent

Я знайшов книгу Макса Куна, вона тут прихована: feat.engineering
Agile Bean
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.