我正在使用 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/