Ich bin relativ neu zu beiden maschinellen Lerntechniken und Programmierung in R, und im Moment versuche ich ein neuronales Netzwerk zu einigen Daten, die ich habe anzupassen. Die daraus resultierenden Vorhersagen des neuronalen Netzes ergeben für mich keinen Sinn. Ich habe StackOverflow durchgesehen, konnte aber keine Lösung für dieses Problem finden.Predict-Funktion von Neuralnetz gibt ungerade Ergebnisse
Meine Daten (dies ist ein Teil des Test-Set, ist der Trainingssatz des gleichen Formats)
target monday tuesday wednesday thursday friday saturday indepedent
428 277 1 0 0 0 0 0 3317
429 204 0 1 0 0 0 0 1942
430 309 0 0 1 0 0 0 2346
431 487 0 0 0 1 0 0 2394
432 289 0 0 0 0 1 0 2023
433 411 0 0 0 0 0 1 1886
434 182 0 0 0 0 0 0 1750
435 296 1 0 0 0 0 0 1749
436 212 0 1 0 0 0 0 1810
437 308 0 0 1 0 0 0 2021
438 378 0 0 0 1 0 0 2494
439 329 0 0 0 0 1 0 2110
440 349 0 0 0 0 0 1 1933
Mein Code
resultsnn <- neuralnet(target~monday+tuesday+wednesday+thursday+friday+saturday+independent,data=training,hidden=3,threshold=0.01,linear.output = TRUE)
compute(resultsnn,test[,2:8])$net.result
Meine Ergebnisse (der vorhergesagte Wert ist der gleiche für ALLE Testfallfälle.
[,1]
428 508.4962231
429 508.4962231
430 508.4962231
431 508.4962231
432 508.4962231
433 508.4962231
434 508.4962231
435 508.4962231
436 508.4962231
437 508.4962231
438 508.4962231
439 508.4962231
440 508.4962231
Was habe ich noch ausprobiert?
Ich habe versucht, Versionen ohne die Attrappen (nur die unabhängige Variable einschließlich, dies nicht die Art der Ergebnisse ändern) einige synthetische Daten
ich geschaffen habe, und verwendet diese als Eingabe für den gleichen Code, dies funktioniert einwandfrei funktionieren:
#building training set
input_train <- as.data.frame(c(1:100))
output_train <- as.data.frame(c(sqrt((1:100)+1)))
train <- cbind.data.frame(output_train,input_train)
colnames(train) <- c("output","input")
#building test set
input_test <- as.data.frame(c(101:150))
output_test <- as.data.frame(c(sqrt((101:150)+1)))
test <- cbind.data.frame(output_test,input_test)
colnames(test) <- c("output","input")
#NEURALNET PACKAGE
#neural network 3 neurons
res.train <- neuralnet(output~input,data=train,hidden=3,threshold=0.01) #train nn
compute(res.train,test[,2])$net.result #predict using nn on test set
ich auch andere Pakete versucht haben (zB nnet und RSNNS), aber diese Pakete bereits nicht korrekte Vorhersagen liefern, wenn die synthetischen Daten.
Einige zusätzliche Informationen
Einige zusätzliche Informationen zu den Datentypen:
str(test)
'data.frame': 82 obs. of 8 variables:
$ target : int 277 204 309 487 289 411 182 296 212 308 ...
$ monday : int 1 0 0 0 0 0 0 1 0 0 ...
$ tuesday : int 0 1 0 0 0 0 0 0 1 0 ...
$ wednesday : int 0 0 1 0 0 0 0 0 0 1 ...
$ thursday : int 0 0 0 1 0 0 0 0 0 0 ...
$ friday : int 0 0 0 0 1 0 0 0 0 0 ...
$ saturday : int 0 0 0 0 0 1 0 0 0 0 ...
$ independent: int 3317 1942 2346 2394 2023 1886 1750 1749 1810 2021 ...
str(training)
'data.frame': 397 obs. of 8 variables:
$ target : int 1079 1164 1069 1038 629 412 873 790 904 898 ...
$ monday : int 0 0 0 0 0 0 1 0 0 0 ...
$ tuesday : int 1 0 0 0 0 0 0 1 0 0 ...
$ wednesday : int 0 1 0 0 0 0 0 0 1 0 ...
$ thursday : int 0 0 1 0 0 0 0 0 0 1 ...
$ friday : int 0 0 0 1 0 0 0 0 0 0 ...
$ saturday : int 0 0 0 0 1 0 0 0 0 0 ...
$ independent: int 2249 2381 4185 2899 2387 2145 2933 2617 2378 3569 ...
Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen! Vielen Dank für die Hilfe Jungs (:
Wenn ich mehr Kovariaten hinzufüge, könnte es möglich sein, dass das neurale Netzwerk funktioniert (mit anderen Worten: mein einziges Problem ist, dass die aktuelle Menge von Kovariaten keine Erklärungskraft bezüglich des Ziels hat)? – Tomas
Ja, es ist möglich, dass Kovariaten existieren, die die Beziehung zwischen Ziel und Independent erklären, außer dass Sie sie nicht einbeziehen.Wenn Sie ein mechanistisches Verständnis davon haben, wie diese Variablen zusammenhängen, könnte dies eine Variable zum Ausprobieren nahelegen. Wenn Sie nur hoffen, dass es eine Beziehung gibt, dann versuchen Sie viele Variablen; Sobald Sie eine erklärende Variable für Kandidaten gefunden haben, prüfen Sie, ob dies in Ihren Testdaten zutrifft. Versuchen Sie, die Untersuchung Ihrer Trainingsdaten zu beenden, bevor Sie sich dem Test zuwenden! – CSJCampbell