【问题标题】:Keras fitting ignoring nan valuesKeras拟合忽略nan值
【发布时间】:2016-10-11 09:37:06
【问题描述】:

我正在训练一个神经网络来进行回归,(1 个输入和 1 个输出)。让我们将xy 分别作为常用的输入和输出数据集。

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

如果该选项不存在,我想我必须找到 nan 值并手动删除它们,同时删除 x 中与 @ 中的 nan 位置相对应的值987654327@。

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

在这个简单的示例中,应删除 y 列中的 nan 值,同时删除 x 列中的相应值 (4, 6, 7)。

谢谢。

编辑:好的,我在过滤 nans 时遇到问题,我会这样做:

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

它不打印任何东西,我确信有 nan 值...

编辑(自我回答):好的,我找到了一种本地化 nans 的方法:

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

【问题讨论】:

  • NAN 真的相关吗?否则,只需将它们从您的训练数据中删除或将它们映射到特定常量(如 0 或 -1)。更容易,但结果与您的提议相同。
  • 是的,我是这么想的,但是两列中的值都应该被删除,所以你必须找到数组中 nans 的位置,然后删除它们。然后你必须在 x 列中找到相应的位置并删除它们。
  • 我没发现问题?如果你在 y 的第 n 行找到 NAN,你也会在 x 的第 n 行删除它。
  • 原始问题已编辑。

标签: python numpy neural-network keras


【解决方案1】:

正如 cmets 中所说,只需将 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 是否允许您禁用此行为并花一点时间考虑这是否真的你想要的行为(或者如果你想把它映射到常量,因为你发现你的输入很有价值,即使它们没有标签)。

【讨论】:

  • 在我的情况下并不是那么简单,其中数据是一个时间序列,每帧标记。在这种情况下我该怎么办?
  • @Gulzar 您也可以进行插补而不是删除这些值。然而,正确处理“缺失数据”而不破坏底层统计关系本身就是一个相当大的话题,因为它对于每个用例都是不同的,并且需要对缺失值的原因进行适当的分析。我建议对此进行一些基础研究,以了解您可以在特定用例中做什么。
猜你喜欢
  • 2014-11-26
  • 2019-09-24
  • 1970-01-01
  • 1970-01-01
  • 2016-01-14
  • 2016-03-28
  • 2017-02-11
  • 1970-01-01
  • 2020-10-08
相关资源
最近更新 更多