2016-04-29 12 views
0

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 (:

Antwort

2

Es sieht aus wie kein Signal zwischen Ziel und indepedent Ignorieren Wochentag für jetzt, wenn Sie das lineare Modell mit und ohne Gefälle passen.

# a linear model looking at response with indepedent (with intercept) 
lm1 <- lm(target ~ indepedent, data = training) 
lm1 
# 
# Call: 
# lm(formula = target ~ indepedent, data = training) 
# 
# Coefficients: 
# (Intercept) indepedent 
# 206.37312594 0.04853823 
# intercept only 
lm0 <- lm(target ~ 1, data = training) 
lm0 
# 
# Call: 
# lm(formula = target ~ 1, data = training) 
# 
# Coefficients: 
# (Intercept) 
# 310.0769 
# two models of the data equivalent to possible outcomes 
plot(target ~ indepedent, data = training) 
lines(fitted(lm1) ~ indepedent, data = training, lty = 2) 
lines(fitted(lm0) ~ indepedent, data = training, col = 2) 

... die Intercept nur Modell bevorzugt wird.

# test which model is better 
# large p-value suggests we're happy accepting the simple model 
anova(lm0, lm1) 
# Analysis of Variance Table 
# 
# Model 1: target ~ 1 
# Model 2: target ~ indepedent 
# Res.Df  RSS Df Sum of Sq  F Pr(>F) 
# 1  12 86990.923        
# 2  11 81792.165 1 5198.7582 0.69917 0.42086 
head(fitted(lm0)) 
#   428   429   430   431   432   433 
# 310.0769231 310.0769231 310.0769231 310.0769231 310.0769231 310.0769231 

Also das ist, was die Maschine Lernansatz auch sagt dir das einfache Modell sagt voraus, einen einzelnen Wert für Ziel für jeden Wert von indepedent in der Wochentag Variable Hinzufügen offenbar nicht verbessern. dies.

Sie haben Vorhersagen für Ihr Spielzeugbeispiel gesehen, weil es ein starkes Signal in der Antwort gab.

+0

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

+0

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

Verwandte Themen