-
定义:一种广义幂变换方法,是统计建模中常用的一种数据变换
-
目的
- 用于连续变量不满足正态分布的情况
- Box-Cox变换之后,可以一定程度上减小不可观测的误差和预测变量的相关性
- 改善数据的正态性、对称性和方差相等性,但方差齐性的问题不一定会消失,做过之后仍然需要做方差齐性的检验,看是否还需要采用其他方法
-
公式
y ( λ ) = { y λ − 1 λ λ ≠ 0 ln ( y ) λ = 0 y(\lambda) = \begin{cases} \frac{y^{\lambda} - 1}{\lambda} & \lambda \neq 0 \\ \ln(y) & \lambda = 0 \end{cases} y(λ)={λyλ−1ln(y)λ=0λ=0- 条件
- y y y为连续变量
- y ≥ 0 y \ge 0 y≥0。当 y < 0 y \lt 0 y<0时,对原始数据同加一个常数 a a a,使得 y + a ≥ 0 y + a \ge 0 y+a≥0
- 特殊情况
- λ = 0 \lambda = 0 λ=0:对数变换
- λ = − 1 \lambda = -1 λ=−1:倒数变换
- λ = 0.5 \lambda = 0.5 λ=0.5:平方根变换
- 参数
λ
\lambda
λ的估计方法
- 最大似然估计
- Bayes方法
- 逆公式
y = { ( 1 + λ × y λ ) 1 λ λ ≠ 0 e y λ λ = 0 y = \begin{cases} (1 + \lambda \times y^{\lambda})^{\frac{1}{\lambda}} & \lambda \neq 0 \\ e^{y^{\lambda}} & \lambda = 0 \end{cases} y={(1+λ×yλ)λ1eyλλ=0λ=0
- 条件
-
其它的转换方法
- 非正态
- 对数转换: y = ln ( y ) y = \ln(y) y=ln(y)
- 平方根转换: y = y y = \sqrt{y} y=y
- 倒数转换: y = 1 y y = \frac{1}{y} y=y1
- 平方根取倒数转换: y = 1 y y = \frac{1}{\sqrt{y}} y=y1
- 平方根后再取反正弦转换: y = arcsin ( y ) y = \arcsin(\sqrt{y}) y=arcsin(y)
- 幂转换: y = y λ − 1 y ˉ λ + 1 , y ˉ = ( ∏ i = 1 N y ) 1 / n y = \frac{y^{\lambda} - 1}{{\bar{y}}^{\lambda + 1}}, \bar{y} = (\prod_{i=1}^{N}{y})^{1/n} y=yˉλ+1yλ−1,yˉ=(∏i=1Ny)1/n
- 标准化/无量纲化
- 最大最小标准化: x = x − min ( x ) max ( x ) − min ( x ) x = \frac{x - \text{min}(x)}{\text{max}(x) - \text{min}(x)} x=max(x)−min(x)x−min(x)
- z-score变换: x = x − x ˉ σ x = \frac{x - \bar{x}}{\sigma} x=σx−xˉ
- sklearn
- 二值化(转换为0或1):sklearn.preprocessing.Binarizer
- 自定义转换器:sklearn.preprocessing.FunctionTransformer
- 连续数据离散化:sklearn.preprocessing.KBinsDiscretizer
- 标签二值化
- 对目标标签进行 0 0 0到 n − 1 n-1 n−1的编码:sklearn.preprocessing.LabelEncoder
- 除以最大值来缩小特征:sklearn.preprocessing.MaxAbsScaler
- 指定范围变换/无量纲化
- x new = x − min ( x ) max ( x ) − min ( x ) x_{\text{new}} = \frac{x - \text{min}(x)}{\text{max}(x) - \text{min}(x)} xnew=max(x)−min(x)x−min(x)
- x scaled = x new × ( max − min ) + min x_{\text{scaled}} = x_{\text{new}} \times (\text{max} - \text{min}) + \text{min} xscaled=xnew×(max−min)+min
- sklearn.preprocessing.MinMaxScaler
- sklearn.preprocessing.minmax_scale
- 归一化
- 分类编码数组OneHot/哑编码:sklearn.preprocessing.OneHotEncoder
- 分类特征转为数字:sklearn.preprocessing.OrdinalEncoder
- 生成多项式和交互特征(广义线性回归):sklearn.preprocessing.PolynomialFeatures
- 幂变换,使得数据更接近正态(近Box-Cox)
- 分位数变换:
- 使用统计的方法缩放特征
- 标准化/z-score变换/无量纲化
- 稀疏矩阵阈值处理:sklearn.preprocessing.binarize
- 缩放至 [ − 1 , 1 ] [-1, 1] [−1,1]且不破坏其稀疏性:sklearn.preprocessing.maxabs_scale
- 非正态
-
代码
- R
-
λ
\lambda
λ参数估计
lam <- powerTransform(formula)
boxcox(lm_model, lambda=seq(0, 1, by=0.1))
- 变换
y_new <- bcPower(y, lam$lambda)
Ylam<- (Y^lambda-1)/lambda
lm_model<-lm(Ylam~X)
-
λ
\lambda
λ参数估计
- Python:
scipy.stats.boxcox
- 官方文档API
- 输入
- x
- lmbda:default None。box-cox转换的 λ \lambda λ参数。若为None,则使用最大似然估计获取最佳值(第二个返回参数)
- alpha:default None。若为None,则不返回第三个参数,否则按
100 * (1-alpha)%
来返回box-cox转换的 λ \lambda λ参数的置信区间
- 输出
- boxcox:转换后的值
- maxlog:第二个参数:box-cox转换的 λ \lambda λ参数
- (min_ci, max_ci):第三个参数: λ \lambda λ的置信区间
- R
-
Reference
Box-Cox变换
最新推荐文章于 2024-08-12 18:25:12 发布