【发布时间】: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 更有意义。如果您确实想要差异,那么线性图最有意义。