Eu sou novo na modelagem com redes neurais, mas consegui estabelecer uma rede neural com todos os pontos de dados disponíveis que se ajustam bem aos dados observados. A rede neural foi feita em R com o pacote 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
Os dados que estou analisando têm a seguinte aparência, onde o DOC é a variável que deve ser modelada (existem cerca de 17.000 observações):
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
Agora, li que o modelo deve ser treinado com 70% dos pontos de dados e validado com os 30% restantes. Como eu faço isso? Quais funções eu tenho que usar?
Usei a função de trem do pacote de interpolação para calcular os parâmetros de tamanho e decaimento.
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)
Qualquer ajuda direta ou ligação a outros sites / postagens é muito apreciada.
r
neural-networks
Strohmi
fonte
fonte
Respostas:
O manual de intercalação de Max Kuhn - Model Building é um excelente ponto de partida.
Eu pensaria no estágio de validação como ocorrendo na chamada de sinal de intercalação (), já que ele escolhe seus hiperparâmetros de decaimento e tamanho via bootstrapping ou alguma outra abordagem que você pode especificar através do parâmetro trControl. Chamo o conjunto de dados que utilizo para caracterizar o erro do modelo final escolhido como meu conjunto de testes. Como o sinal de intercalação lida com a seleção de hiperparâmetros para você, você só precisa de um conjunto de treinamento e um conjunto de teste.
Você pode usar a função createDataPartition () no sinal de intercalação para dividir seu conjunto de dados em conjuntos de treinamento e teste. Testei isso usando o conjunto de dados Prestige do pacote car, que contém informações sobre a renda relacionadas ao nível de escolaridade e prestígio ocupacional:
A função createDataPartition () parece um pouco errada porque não cria a partição para você, mas fornece um vetor de índices que você pode usar para construir conjuntos de treinamento e teste. É muito fácil fazer isso sozinho no R usando sample (), mas uma coisa que createDataPartition () aparentemente faz é fazer a amostra dentro dos níveis dos fatores. Além disso, se seu resultado for categórico, a distribuição será mantida entre as partições de dados. No entanto, não é relevante neste caso, pois seu resultado é contínuo.
Agora você pode treinar seu modelo no conjunto de treinamento:
Além disso: tive que adicionar o parâmetro linout para que a nnet trabalhasse com um problema de regressão (vs. classificação). Caso contrário, obtive todos os 1s como valores previstos no modelo.
É possível chamar a previsão no objeto de ajuste usando o conjunto de dados de teste e calcular o RMSE a partir dos resultados:
fonte