python - 反向 Box-Cox 变换

标签 python statistics scipy transformation inverse

我正在使用 SciPy's boxcox function执行 Box-Cox transformation在一个连续变量上。

from scipy.stats import boxcox
import numpy as np
y = np.random.random(100)
y_box, lambda_ = ss.boxcox(y + 1) # Add 1 to be able to transform 0 values

然后,我拟合了一个统计模型来预测这个 Box-Cox 转换变量的值。模型预测采用 Box-Cox 尺度,我想将它们转换为变量的原始尺度。

from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor()
X = np.random.random((100, 100))
rf.fit(X, y_box)
pred_box = rf.predict(X)

但是,在给定转换后的数据和 lambda 的情况下,我找不到执行反向 Box-Cox 转换的 SciPy 函数。有这样的函数吗?我现在写了一个逆变换。

pred_y = np.power((y_box * lambda_) + 1, 1 / lambda_) - 1

最佳答案

SciPy 添加了一个逆 Box-Cox 变换。

https://docs.scipy.org/doc/scipy/reference/generated/scipy.special.inv_boxcox.html

scipy.special.inv_boxcox scipy.special.inv_boxcox(y, lmbda) =

计算 Box-Cox 变换的逆。

找到 x 使得:

y = (x**lmbda - 1) / lmbda  if lmbda != 0
    log(x)                  if lmbda == 0

参数: y : array_like

要转换的数据。

lmbda : array_like

Box-Cox 变换的幂参数。

返回:
x : 数组

转换后的数据。

注意事项

0.16.0 版中的新功能。

例子:

from scipy.special import boxcox, inv_boxcox
y = boxcox([1, 4, 10], 2.5)
inv_boxcox(y, 2.5)

output: array([1., 4., 10.])

关于python - 反向 Box-Cox 变换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26391454/

相关文章:

python - 使用 for 循环操作 python 函数输出

python - 在 Python 中是否有处理数值概率密度函数的标准方法?

python - Python 如何推断二进制 NOT 中使用的位数?

python - 展开字典的快捷方式

python - 如何从数据框中弹出行?

python - 使用 CURVE_FIT 在 Python 中拟合对数正态分布

python - 非正态分布中因变量和自变量之间的相关性

machine-learning - 测试预测值相对于已知值的准确性

python - python中的概率函数卷积

python - Anaconda 导入 mpi4py 但不导入 mpi