我使用SciPy箱形函数对连续变量执行Box变换。
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)然而,找不到一个SciPy函数,它可以执行给定转换后的数据和lambda的反向Box-Cox转换。有这样的函数吗?i现在编码了一个逆变换。
pred_y = np.power((y_box * lambda_) + 1, 1 / lambda_) - 1发布于 2014-12-02 15:11:35
多亏了@ Weckesser,我了解到SciPy的当前实现没有一个函数来逆转Box-Cox转换。但是,未来的SciPy发行版可能具有此功能。现在,我在问题中提供的代码可能会为其他人提供反向Box-Cox转换服务。
发布于 2018-03-16 18:53:59
SciPy增加了一个逆盒-考克斯变换.
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.])发布于 2016-03-24 21:18:13
https://stackoverflow.com/questions/26391454
复制相似问题