Je suis novice en modélisation avec les réseaux de neurones, mais j’ai réussi à établir un réseau de neurones avec tous les points de données disponibles qui correspond bien aux données observées. Le réseau de neurones a été réalisé en R avec le paquet 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
Les données que je suis en train d’analyser ressemblent à ceci, où DOC est la variable à modéliser (il ya environ 17 000 observations):
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
Maintenant, j'ai lu que le modèle devrait être formé avec 70% des points de données et validé avec les 30% restants. Comment puis-je faire cela? Quelles fonctions dois-je utiliser?
J'ai utilisé la fonction de train du paquet caret pour calculer les paramètres de taille et de décroissance.
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)
Toute aide directe ou lien vers d’autres sites Web / publications est grandement apprécié.
la source
Réponses:
Manuel de Max Kuhn - La construction de modèles est un excellent point de départ.
Je penserais que la phase de validation se produit dans l’appel caret train (), car c’est choisir vos hyperparamètres de décroissance et de taille via amorçage ou une autre approche que vous pouvez spécifier via le paramètre trControl. J'appelle l'ensemble de données que j'utilise pour caractériser l'erreur du modèle final choisi comme l'ensemble de test. Puisque caret gère pour vous la sélection d'hyperparamètres, vous avez simplement besoin d'un kit de formation et d'un kit de test.
Vous pouvez utiliser la fonction createDataPartition () de caret pour fractionner votre jeu de données en ensembles de formation et de test. J'ai testé cela en utilisant l'ensemble de données Prestige du package voiture, qui contient des informations sur les revenus en relation avec le niveau d'instruction et le prestige professionnel:
La fonction createDataPartition () semble un peu mal nommée car elle ne crée pas la partition pour vous, mais fournit plutôt un vecteur d'index que vous pouvez ensuite utiliser pour construire des ensembles de formation et de test. C'est assez facile de faire cela vous-même en R en utilisant sample (), mais une chose que createDataPartition () fait apparemment est d'échantillonner à l'intérieur des niveaux de facteurs. De plus, si votre résultat est catégorique, la distribution est maintenue sur les partitions de données. Ce n'est pas pertinent dans ce cas, cependant, puisque votre résultat est continu.
Vous pouvez maintenant former votre modèle sur le kit de formation:
De plus, j'ai dû ajouter le paramètre linout pour que nnet fonctionne avec un problème de régression (par rapport à la classification). Sinon, j'ai tous les 1 comme valeurs prédites par le modèle.
Vous pouvez ensuite appeler prédire sur l'objet ajusté à l'aide du jeu de données de test et calculer RMSE à partir des résultats:
la source