0

Ich versuche, eine NN für die Regression zu verwenden - mein Setup hat 2 versteckte Schichten.NN-Training - mit einer heißen Codierung vs mit künstlichen Funktionen

Die Eingabedaten, die ich habe, hat die folgende Struktur - Merkmale A, B, C, D sind numerisch (können Werte von -500k bis 500k aufnehmen), Merkmal E ist kategorisch und F ist die abhängige Variable, die ich versuche zu prognostizieren. A, B, C, D variieren je nach Land (daher habe ich das Land als separates Merkmal hinzugefügt).

ich zwei verschiedene Ansätze versucht haben Funktion E auszudrücken beim Training:

  1. Eine heiße Codierung
  2. Verwenden der bestehenden A, B, C, D

verfügt habe ich angebracht ein Screenshot, wie die Trainingsdaten aussehen (zusammengesetzte Werte) sowie meine beiden Ansätze.

[data][1] 
[Option1][2] 
[Option2][3] 

Option (2) funktioniert sehr gut (in Form von r^2 und Genauigkeit für die einzelnen Vorhersagen), während (1) ziemlich schlecht funktioniert.

Ich habe auch versucht Normalisierung A, B, C, D (-mean/Std) bei der Verwendung von One-Hot-Encoding, aber es hat nicht viel geholfen.

Bemerkenswert - Option (2) funktioniert sehr gut sogar ohne Normalisierung.

Meine Frage ist - wie kann ich verstehen, warum dies der Fall ist? Ich würde denken, dass ein Hot-Encoding gut funktionieren könnte, aber es scheint, als ob es nicht funktioniert. Warum versteht der NN die Klassifizierung besser aus Ansatz (2)?

Dank

[1]: https://i.stack.imgur.com/sixHw.png 
[2]: https://i.stack.imgur.com/VMw8O.png 
[3]: https://i.stack.imgur.com/5eQxk.png 

Antwort

0

Ich habe auch versucht, A, B, C, D zu normalisieren, wenn eine Hot-Codierung aber viel hat nicht geholfen.

Ich schlage vor, Sie testen dies weiter. Dies wäre das Beste, was zu tun ist. Da neuronale Netzwerke eine Funktion besser annähern werden, wenn die Daten im Bereich von 0 bis 1 liegen, passt dies gut zu den Aktivierungsfunktionen.

Aber Sie müssen immer alle Daten gleichermaßen normalisieren. Um eine Nummer zu normalisieren, z.B. A = 346, Sie müssen es durch eine Zahl teilen, die 346 oder höher ist, , aber auch höher als alle Werte für A im Datensatz.

Und wenn A, B, C, D ähnliche Eigenschaften sind, können Sie sie alle gleich normalisieren. Wenn sie völlig unterschiedliche Merkmale sind, machen Sie dasselbe wie unten für JEDES Merkmal (A, B, C und D).

Also für die folgenden Daten-Set:

{ A: 212, B: 1241, C: 321, D: 2, country: Germany } 
{ A: 72, B: 412, C: 545, D: 345, country: UK} 
{ A: 43, B: 123, C: 4, D: 977, country: Netherlands} 

Sie haben zu teilen, A, B, C und D durch die gleiche Zahl, sie zu normalisieren. Die Länder sollten, wie Sie es bereits getan haben, eins-codiert sein.

So ist der höchste Wert für A, B, C, D 1241, also werde ich alle Zahlen durch diesen Wert dividieren:

{ A: 0.17, B: 1, C: 0.26, D: 0, DE: 1, UK: 0, NL: 0 } 
{ A: 0.06, B: 0.33, C: 0.44, D: 0.28, DE: 0, UK: 1, NL: 0 } 
{ A: 0.03, B: 0.10, C: 0, D: 0.79, DE: 0, UK: 0, NL: 1} 

Zahlen sind gerundet

Mehr Infos here

+0

Hmm, ich habe den StandardScaler von sklearn benutzt - er subtrahiert den Mittelwert und dividiert durch den stdev für jedes Feature (also, spaltenweise) - glaubst du, das ist nicht genug? – user80564