【问题标题】:My data has no nan but I keep getting the finite error我的数据没有 nan 但我不断收到有限错误
【发布时间】:2021-02-05 11:38:01
【问题描述】:

上下文

我正在尝试规范化我的数据以运行 ML 模型。我在我的数据上使用 np.log

plt.hist(np.log(Portfolio_rtns['Aveva Returns']))

我也试过这种方式:

log_Aveva = np.log(Portfolio_rtns['Aveva Returns'])
log_Aveva.hist();

但是得到这个错误

ValueError: supplied range of [-inf, -1.2977785811129585] is not finite

我检查了我的数据,甚至确保将任何 nan 值替换为 0。

我找到了this 哪些状态可以使用np.isfinite。但是我觉得我的数据分布因此而混乱。

Port = np.isfinite(Portfolio_rtns['Aveva Returns'])
plt.hist(np.log(Port));

我也运行了这个函数

# Square root can also make normal distributed data
plt.hist(np.sqrt(Portfolio_rtns['Aveva Returns']));

虽然我得到了图表,但我得到了这个错误:

358: RuntimeWarning: invalid value encountered in sqrt
  result = getattr(ufunc, method)(*inputs, **kwargs)

问题

我的数据有问题吗?

【问题讨论】:

  • Log(0) 是负无穷大。因此,即使您输入有限的数据,日志也会返回无穷大的内容。
  • 对,有道理。
  • 如果平方根给你一个错误,你的数据集中也可能有负数。
  • 是的,它是用于股票的,所以它也会在那里。那么有解决办法吗?我需要标准化这些数据。我尝试用 0.0001 替换 nan 但日志规则似乎仍然适用。
  • 数学有修复方法吗?.... 没有。该函数执行它的功能。如果它返回的内容对您来说毫无意义,那么您使用了错误的功能。作为一般规则,Log 通常用于无量纲数据,例如口粮。我不知道您在这里的用例,但是记录 new_price/old_price 比记录 new_price-old_price 更有意义。如果您确实想要差异,那么线性图最有意义。

标签: python numpy


【解决方案1】:

因此,在浏览 Coursera 之后,我发现使用 log1p 将 1 添加到整个数据中的所有零数字。也摆脱了负面。所以解决办法是:

plt.hist(np.log1p(Portfolio_rtns['Aveva Returns']));

或

  1. data.describe()#'data' 是你的数据。
  2. 找出数据的最小值
  3. 将此最小值添加到整个数据中,将所有零和负数转换为正数和大于 0。
  4. 运行数据
  5. 运行ML模型后,转换回正常值(上面也是这样)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    • 2019-10-12
    • 2015-12-17
    • 2021-07-20
    • 1970-01-01
    相关资源
    最近更新 更多