Jak wytrenować i zweryfikować model sieci neuronowej w R?

33

Jestem nowy w modelowaniu z sieciami neuronowymi, ale udało mi się stworzyć sieć neuronową ze wszystkimi dostępnymi punktami danych, która dobrze pasuje do obserwowanych danych. Sieć neuronowa została wykonana w R z pakietem 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      

Dane, które analizuję, wyglądają następująco, gdzie DOC jest zmienną, którą należy modelować (istnieje około 17 000 obserwacji):

      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

Teraz przeczytałem, że model powinien zostać przeszkolony z 70% punktów danych, i zweryfikowany z pozostałą 30% punktów danych. Jak mam to zrobic? Z jakich funkcji muszę korzystać?

Użyłem funkcji pociągu z pakietu karetki, aby obliczyć parametry wielkości i rozkładu.

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)

Każda bezpośrednia pomoc lub link do innych stron / postów jest bardzo mile widziana.

Strohmi
źródło
6
W rzeczywistości metodologia podziału pociągu / testu jest słaba, ponieważ wydajność twojego algorytmu może się nieco różnić w zależności od wyboru punktu podziału (widziałem 5% różnic ...). Lepszą metodologią jest walidacja krzyżowa.
John Doucette,

Odpowiedzi:

36

Poradnik Maxa Kuhna - Modelarstwo to świetny punkt wyjścia.

Pomyślałbym, że etap sprawdzania poprawności występuje w wywołaniu caret train (), ponieważ wybiera on hiperparametry rozpadu i rozmiaru za pomocą ładowania początkowego lub innego podejścia, które można określić za pomocą parametru trControl. Nazywam zestaw danych, którego używam do scharakteryzowania błędu końcowego wybranego modelu, moim zestawem testowym. Ponieważ Caret obsługuje dla Ciebie wybór hiperparametrów, potrzebujesz tylko zestawu treningowego i zestawu testowego.

Możesz użyć funkcji createDataPartition () w karetce, aby podzielić zestaw danych na zestawy szkoleniowe i testowe. Przetestowałem to przy użyciu zestawu danych Prestige z pakietu samochodowego, który zawiera informacje o dochodach związanych z poziomem wykształcenia i prestiżem zawodowym:

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

Funkcja createDataPartition () wydaje się nieco źle nazwana, ponieważ nie tworzy dla ciebie partycji, ale raczej zapewnia wektor indeksów, których możesz następnie użyć do zbudowania zestawów szkoleniowych i testowych. Jest to dość łatwo to zrobić samemu w R stosując próbkę (), ale jeden createDataPartition rzecz () najwyraźniej robi to próbki z wnętrza poziomów czynników. Ponadto, jeśli wynik jest kategoryczny, dystrybucja jest zachowywana między partycjami danych. Nie ma to jednak znaczenia w tym przypadku, ponieważ wynik jest ciągły.

Teraz możesz wytrenować swój model na zestawie treningowym:

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)    

Poza tym: musiałem dodać parametr liniowy, aby nnet mógł pracować z problemem regresji (vs. klasyfikacji). W przeciwnym razie otrzymałem wszystkie 1 z przewidywanych wartości z modelu.

Następnie można wywołać przewidywanie na obiekcie dopasowania za pomocą zestawu danych testowych i obliczyć RMSE na podstawie wyników:

prestige.predict <- predict(prestige.fit, newdata = prestige.test)
prestige.rmse <- sqrt(mean((prestige.predict - prestige.test$income)^2)) 
Anne Z.
źródło
Twój link Maxa Kuhna prawdopodobnie umarł.
EngrStudent - Przywróć Monikę
Znalazłem książkę Maxa Kuhna, jest tutaj ukryta: feat.inżynieria
Agile Bean