首页 > 解决方案 > 我的数据没有 nan 但我不断收到有限错误

问题描述

语境

我正在尝试规范化我的数据以运行 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。

我发现说明要使用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)

问题

我的数据有问题吗?

标签: pythonnumpy

解决方案


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

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

或者

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

推荐阅读