2016-06-10 17 views
1

Ich trainiere ein neuronales Netzwerk, Regression zu tun, (1 Eingang und 1 Ausgang). Let 's x und y werden die üblichen Eingabe- bzw. Ausgabe-Dataset.Keras Fitting ignoriert Nan Werte

Mein Problem ist, dass der y Datensatz (nicht die x) einige Werte auf Nan festgelegt haben, so dass die Anpassung an Nan geht. Ich frage mich, ob es eine Option gibt, die Nan-Werte in der Anpassung zu ignorieren, in ähnlicher Weise wie die numpy Funktionen np.nanmean, um die mittlere ignoring nans und so weiter zu berechnen.

Wenn diese Option Ich nehme nicht existieren würde ich die nan Werte finden müssen, und löschen Sie sie dann in yund zugleich löschen Sie die Werte in x auf die nan Position entsprechend manuell.

x  y 
2  4 
3  2 
4  np.nan 
5  7 
6  np.nan 
7  np.nan 

In diesem einfachen Beispiel der nan Werte in der Y-Spalte entfernt werden sollen und gleichzeitig die entsprechenden Werte in der x-Säule (4, 6, 7).

Vielen Dank.

EDIT: Ok, ich habe ein Problem, die nans Filterung, das tue ich:

for index, x in np.ndenumerate(a): 
    if x == np.nan: 
     print index, x 

und es nichts drucken, und ich bin sicher, es gibt nan Werte ...

EDIT (SELF ANTWORT): Ok, ich habe einen Weg gefunden, die nans zu lokalisieren:

for index, x in np.ndenumerate(a): 
     if x != x: 
      print index, x 
+1

Ist die NAN wirklich relevant? Ansonsten entferne sie einfach aus deinen Trainingsdaten oder mappe sie auf eine bestimmte Konstante (wie 0 oder -1). Viel einfacher, aber dasselbe Ergebnis wie Ihr Vorschlag. – runDOSrun

+0

Ja, ich dachte das, aber die Werte sollten in beiden Spalten entfernt werden, so müssen Sie die Position der Nans im Array finden und sie dann löschen. Dann müssten Sie die entsprechende Position in der x-Spalte finden und sie löschen. – David

+0

Ich sehe das Problem nicht? Wenn Sie eine NAN in der n-ten Zeile von y finden, löschen Sie diese auch in der n-ten Zeile von x. – runDOSrun

Antwort

2

Wie gesagt in den Kommentaren, simpl y den nan als Vorverarbeitungsschritt entfernen:

import numpy as np 

x = range(2,8) 
y = [4,2,np.nan,7,np.nan,np.nan] 

for a,b in zip(x,y): 
    if str(b) == 'nan': 
     x.remove(a) 
     y.remove(b) 

print x,y 

[2, 3, 5] [4, 2, 7] produziert.

Wenn Sie die Daten ein Tool zur Vorverarbeitung verwenden, die Ihnen die np.nan gibt, überprüfen, ob die API können Sie dieses Verhalten deaktivieren und eine Minute zu denken, ob dies wirklich das Verhalten, das Sie wollen (oder wenn Sie möchten dies zB Konstanten zuordnen, da Sie Ihre Eingabe als wertvoll finden, obwohl sie keine Labels haben.