BoxCox以及反变换

date
Jul 22, 2022
Last edited time
Jul 22, 2022 12:42 PM
status
Published
slug
BoxCox以及反变换
tags
Math
summary
type
Post
Field
Plat

一、BoxCox变换

1 基本含义

Box-Cox变换是一种广义幂变换方法,用于连续的响应变量不满足正态分布的情况。Box-Cox变换之后,可以一定程度上减小不可观测的误差和预测变量的相关性。Box-Cox变换的主要特点是引入一个参数lambda,通过数据本身估计该参数进而确定应采取的数据变换形式,Box-Cox变换可以明显地改善数据的正态性、对称性和方差相等性,对许多实际数据都是行之有效的。 我认为最关键的是这一点:Box-Cox变换通过对因变量进行变换,使得变换过的向量与回归自变量具有线性相依关系,误差也服从正态分布.误差各分量是等方差且相互独立,故Box-Cox变换是通过参数的适当选择。达到对原来数据的“综合治理”,使其满足一个正态线性回归模型的所有假设条件。 他不是仅仅为了使原数据集变换为正态分布,所以他与Z-Score标准化不同,从我了解的角度,Box-Cox变换兼顾了变量在时间序列维度上的回归特性,所以经常用于时间序列方面的预测

2 公式表示

Box-Cox公式为:
要求 ,所以对于 的情况,可以给 加上一个常数 进行调整,即得如下所示

二、Python实现

首先需要明确的是Box-Cox变换存在一个超参数lambda,这个超参数控制了数据的变化形式,而且这个lambda也可以使用最大似然估计等方法进行计算得到。

1 Box-Cox变换

首先该变换均在scipy模块之下,主要有以下两个地方:
区别在于,1中包含了box-cox中的lambda计算(即不需要给函数boxcox输入参数lmbda,boxcox返回值中就有lambda),所以其格式为:
lambda的计算方法一般为最大似然估计方法和Bayes方法。
而2中不包含lambda的计算,所以其函数参数必填的为数据data和lambda。
以下展示一个变换的效果(使用的使讯飞温室温度预测比赛中的数据) 下图为Box-Cox变换之前的数据分布(核密度函数图)
notion image
下图为经过Box-Cox变换滞后的数据分布(核密度函数图)
notion image

2 反Box-Cox变换

通常我们在Box-cox变换之后,将预处理后的数据投入到模型中进行训练,如果变换处理的是标签,那么还需要对测试集的预测值进行反Box-Cox变换,Python实现如下:
其中x为需要进行反Box-Cox变换的数据,lamda为训练集Box-Cox时使用的lambda,一般即为上文中stats.boxcox()返回的第二个参数。需要注意:如果在训练集Box-Cox变换时使用了C常数进行了自变量的非零处理,那么还需要再反变换之后减去这个C常数。

© Lazurite 2021 - 2024