2016-06-10 95 views
1

我正在训练一个神经网络做回归,(1个输入和1个输出)。我们的xy分别是通常的输入和输出数据集。Keras拟合忽略nan值

我的问题是,y数据集(而不是x)有一些值设置为nan,所以拟合到nan。我想知道是否有一个选项可以忽略拟合中的nan值,类似于numpy函数np.nanmean来计算忽略nans的平均值等等。

如果该选项不存在,我想我会找到NaN值并手动删除它们,,并在同一时间擦除对应楠位置yx值。

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

在这个简单的例子在y列中的NaN值应被删除,并在同一时间在x列中的相应的值(4,6,7)。

谢谢。

编辑:好吧,我有一个问题过滤NaN的,我做的:

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

,它不显示任何信息,我相信有NaN值...

EDIT(SELF回答):好吧,我已经找到一种方法,以本地化的NaN:

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

NAN真的有关联吗?否则,只需从训练数据中移除它们或将它们映射到特定的常量(如0或-1)。方式更容易,但结果与您的建议相同。 – runDOSrun

+0

是的,我在想,但是应该在两列中删除这些值,所以你必须在阵列中找到nans的位置,然后擦除它们。然后你将不得不在x列中找到相应的位置并删除它们。 – David

+0

我没有看到问题?如果你在y的第n行找到NAN,你也可以在x的第n行删除它。 – runDOSrun

回答

2

正如评论,说SIMPL y删除nan作为预处理步骤:

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]

如果你使用一些工具来预处理它给你的np.nan数据,检查是否API允许你禁用此行为,并采取一分钟考虑这是否是真的想要的行为(或者,如果例如,你想把它映射为常量,因为你发现你的输入是有价值的,即使它们没有标签)。