Ich verwende das nnet-Paket in R, um zu versuchen, eine ANN zu erstellen, um die Immobilienpreise für Eigentumswohnungen vorherzusagen (persönliches Projekt). Ich bin neu in diesem Bereich und habe keinen mathematischen Hintergrund.
Ich habe Eingabevariablen, die sowohl binär als auch stetig sind. Zum Beispiel wurden einige Binärvariablen, die ursprünglich Ja / Nein waren, für das neuronale Netz in 1/0 konvertiert. Andere Variablen sind stetig wie Sqft
.
Ich habe alle Werte auf eine Skala von 0-1 normiert. Vielleicht Bedrooms
und Bathrooms
sollte nicht normalisiert werden, da ihr Bereich nur 0-4 ist?
Stellen diese gemischten Eingänge ein Problem für den ANN dar? Ich habe gute Ergebnisse erzielt, aber bei näherer Betrachtung scheinen die von der ANN für bestimmte Variablen gewählten Gewichte keinen Sinn zu ergeben. Mein Code ist unten, irgendwelche Vorschläge?
ANN <- nnet(Price ~ Sqft + Bedrooms + Bathrooms + Parking2 + Elevator +
Central.AC + Terrace + Washer.Dryer + Doorman + Exercise.Room +
New.York.View,data[1:700,], size=3, maxit=5000, linout=TRUE, decay=.0001)
UPDATE: Basierend auf den Kommentaren unten zum Aufteilen der Binäreingaben in separate Felder für jede Wertklasse sieht mein Code jetzt folgendermaßen aus:
ANN <- nnet(Price ~ Sqft + Studio + X1BR + X2BR + X3BR + X4BR + X1Bath
+ X2Bath + X3Bath + X4bath + Parking.Yes + Parking.No + Elevator.Yes + Elevator.No
+ Central.AC.Yes + Central.AC.No + Terrace.Yes + Terrace.No + Washer.Dryer.Yes
+ Washer.Dryer.No + Doorman.Yes + Doorman.No + Exercise.Room.Yes + Exercise.Room.No
+ New.York.View.Yes + New.York.View.No + Healtch.Club.Yes + Health.Club.No,
data[1:700,], size=12, maxit=50000, decay=.0001)
Die versteckten Knoten im obigen Code sind 12, aber ich habe eine Reihe von versteckten Knoten von 3 bis 25 ausprobiert und alle liefern schlechtere Ergebnisse als die ursprünglichen Parameter, die ich oben im veröffentlichten Originalcode hatte. Ich habe es auch mit linearer Ausgabe versucht = wahr / falsch.
Ich vermute, dass ich die Daten auf andere Weise an nnet weiterleiten muss, da dies die Binäreingabe nicht richtig interpretiert. Entweder das, oder ich muss ihm andere Parameter geben.
Irgendwelche Ideen?
quelle
Antworten:
Eine Möglichkeit, mit dieser Situation umzugehen, besteht darin, die Eingaben so zu skalieren, dass ihre Varianzen in etwa im selben Maßstab liegen. Dieser Rat wird im Allgemeinen für die Regressionsmodellierung gegeben, gilt jedoch in Wirklichkeit für alle Modellierungssituationen, in denen Variablen verwendet werden, die auf verschiedenen Skalen gemessen werden. Dies liegt daran, dass sich die Varianz einer binären Variablen häufig stark von der Varianz einer stetigen Variablen unterscheidet. Gelman und Hill (2006) empfehlen, kontinuierliche Eingaben um zwei Standardabweichungen neu zu skalieren, um eine Parität mit (nicht skalierten) Binäreingaben zu erzielen. Diese Empfehlung spiegelt sich auch in einem Artikel und einem Blogbeitrag wider .
Eine spezifischere Empfehlung für neuronale Netze besteht darin, "Effektcodierung" für Binäreingänge (dh -1 und 1) anstelle von "Scheincodierung" (0 und 1) zu verwenden und den zusätzlichen Schritt des Zentrierens kontinuierlicher Variablen durchzuführen. Diese Empfehlungen stammen aus einer umfangreichen FAQ von Warren Sarle, insbesondere aus den Abschnitten "Warum nicht Binäreingänge als 0 und 1 codieren?" und "Soll ich die Eingabevariablen standardisieren?" Das Wesentliche ist jedoch dasselbe:
Ungeordnete kategoriale Variablen müssen in binäre Indikatoren aufgeteilt werden. Sie sind sonst einfach nicht aussagekräftig.
quelle