运行时警告:在log(stats.boxcox)中遇到除以零的情况。

3

当我尝试运行 stats.boxcox(list) 时,出现了 RuntimeWarning: divide by zero encountered in log 错误。

这个列表中没有包含零值。我参考了其他的帖子,说可以使用 np.errstate() 忽略这个错误。

但是,在我的情况下,我认为这样做并不合适,因为由 stats.boxcox() 返回的值是无意义的(全部都是常数)。请看下文。

array([ 0.11472901,  0.11472901,  0.11472901,  0.11472901,  0.11472901,
    0.11472901,  0.11472901,  0.11472901,  0.11472901,  0.11472901,
    0.11472901,  0.11472901,  0.11472901,  0.11472901,  0.11472901,
    0.11472901,  0.11472901,  ... ... ]

错误的详细信息如下:
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scipy/stats/morestats.py:591: RuntimeWarning: divide by zero encountered in log
llf -= N / 2.0 * np.log(np.sum((y - y_mean)**2. / N, axis=0))
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scipy/optimize/optimize.py:2063: RuntimeWarning: invalid value encountered in double_scalars
w = xb - ((xb - xc) * tmp2 - (xb - xa) * tmp1) / denomenter code here

你可能需要在这里更具体一些。你使用的 scipy 版本是什么?如果只使用 list 的前10个值,是否也会出现这种情况?如果是这样,请向我们展示这些值,以便我们尝试重现您的问题。 - cel
@cel 我正在使用scipy版本0.15.1。该列表包含494个数字。如果我随机删除2个数字,则问题不会发生。 - Qaseh Zaidi
你传递的是一个ndarray,而不是一个列表,对吗? - Jon Custer
是的,我正在使用nparray。 我已经改为使用list,但我仍然收到同样的错误。 - Qaseh Zaidi
正如@FrancoPiccolo所指出的那样,您可能正在经历https://github.com/scipy/scipy/issues/6873中报告的错误。这已在scipy的开发分支中修复。修复程序将在下一个版本(scipy 1.3)中发布。 - Warren Weckesser
1个回答

0

我按照这个 Github 帖子上的建议尝试了一下,结果对我有用:

https://github.com/scipy/scipy/issues/6873

建议使用 stats.boxcox_normmax(array) 来获取理想的 lambda 值,然后进行 boxcox 转换。
boxcox_lambda = boxcox_normmax(array, brack=(-1.9, 2.0),  method='mle')
transformed_array = boxcox(array, boxcox_lambda)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接