2016-06-20 5 views
1

Ich habe gerade meinen ersten Versuch geschrieben, ein neuronales Netzwerk für die Haushaltsklassifikation bereitzustellen, indem ich Energieverbrauchsmerkmale verwende. Bisher konnte ich es laufen lassen, aber die Ausgabe scheint fraglich zu sein. So wie Sie sehen können, verwende ich 18 Funktionen (vielleicht zu viel?), Um vorherzusagen, ob es sich um einen einzelnen oder nicht-einzelnen Haushalt handelt.Neuronale Netto-Genauigkeit ist zu niedrig

Ich habe 3488 Zeilen wie folgt aus:

c_day  c_weekend c_evening c_morning c_night c_noon c_max c_min r_mean_max r_min_mean r_night_day r_morning_noon 
12  14  1826   9  765  3 447  2  878   0  7338    4 
r_evening_noon t_above_1kw t_above_2kw t_above_mean t_daily_max single 
3424   1   695   0  174319075712881  1 

Meine neuronale Netzwerk mit diesen Parametern:

net.nn <- neuralnet(single 
      ~ c_day 
      + c_weekend 
      + c_weekday 
      + c_evening 
      + c_morning 
      + c_night 
      + c_noon 
      + c_max 
      + c_min 
      + r_mean_max 
      + r_min_mean 
      + r_night_day 
      + r_morning_noon 
      + r_evening_noon 
      + t_above_1kw 
      + t_above_2kw 
      + t_above_mean 
      + t_daily_max 
      ,train, hidden=15, threshold=0.01,linear.output=F) 

1 repetition was calculated. 

     Error Reached Threshold Steps 
1 126.3425379 0.009899229932 4091 

ich die Daten normalisiert, bevor sie durch die Min-Max-Normalisierung Formel:

for(i in names(full_data)){ 
    x <- as.numeric(full_data[,i]) 
    full_data[,i] <- (x-min(x)/max(x)-min(x)) 
} 

Ich habe 3488 Zeilen von Daten und spaltete sie in ein Training und ein Test-Set.

half <- nrow(full_data)/2 
train <- full_data[1:half,] 
test <- full_data[half:3488,] 

net.results <- compute(net.nn,test) 
nn$net.result 

verwenden ich das Vorhersageverfahren und band es um den eigentlich „single [y/nein]“ - Spalte das Ergebnis zu vergleichen:

predict <- nn$net.result 
cleanoutput <- cbind(predict,full_data$single[half:3488]) 
colnames(cleanoutput) <- c("predicted","actual") 

Also, wenn ich es drucken, das ist meine Klassifizierung Ergebnis für die ersten 10 Reihen:

  predicted actual 
1701 0.1661093405  0 
1702 0.1317067578  0 
1703 0.1677147708  1 
1704 0.2051188618  1 
1705 0.2013035634  0 
1706 0.2088726723  0 
1707 0.2683753128  1 
1708 0.1661093405  0 
1709 0.2385537285  1 
1710 0.1257108821  0 

Also, wenn ich es richtig verstehe, wenn ich die vorhergesagten Ausgabe abzurunden sollte es entweder eine 0 oder 1, aber es endet immer eine 0 sein!

Verwende ich die falschen Parameter? Sind meine Daten einfach nicht für die Vorhersage von nn geeignet? Ist die Normalisierung falsch?

+0

Danke für den Hinweis. Ich habe gerade die Normalisierung der Standardabweichung versucht, wie Sie gesagt haben, und den Fehler auf ~ 25 gesenkt. – MayaK

+0

Gut, dass Ihr Fehler jetzt niedrig ist. Jetzt möchten Sie vielleicht den Fehler zwischen Trainings- und Testdatensätzen vergleichen, um zu sehen, ob Sie überanpassen. – abhiieor

Antwort

1

Es bedeutet, dass Ihre Modellleistung immer noch nicht gut ist. Sobald Sie nach dem Abstimmen eine gute Modellleistung erreicht haben, sollten Sie das richtige erwartete Verhalten erhalten. Neuronale Netztechniken sind sehr anfällig für Skalenunterschiede zwischen verschiedenen Spalten, so dass eine Standardisierung von Daten [Mittelwert = 0 Std = 1] eine gute Praxis ist. Wie von OP scale() gezeigt, macht die Arbeit.

1

Verwenden scale(full_data) für die gesamte Daten hat den Trick. Jetzt werden die Daten durch die Standardabweichung normalisiert und die Ausgabe scheint viel zuverlässiger zu sein.