数据预处理—5.box-cox变换及python实现

文章目录

*

+ 1.box-cox变换是什么?
+ 2.python实现
+
* 2.1逆变换

接上一篇:

1.box-cox变换是什么?

Box-Cox变换是Box和Cox在1964年提出的一种广义幂变换方法,是统计建模中常用的一种数据变换,用于连续的响应变量不满足正态分布的情况。Box-Cox变换之后,可以一定程度上减小不可观测的误差和预测变量的相关性。Box-Cox变换的主要特点是引入一个参数,通过数据本身估计该参数进而确定应采取的数据变换形式,Box-Cox变换可以明显地改善数据的正态性、对称性和方差相等性,对许多实际数据都是行之有效的。
通俗来讲,Box-Cox变换就是来修正偏态和峰度以使得原始分布接近正态分布,修正后的分布满足了线性回归假设中的正态性与同方差。Box-Cox变换的一个显著优点是通过求变换参数来确定变换形式,而这个过程完全基于数据本身而无须任何先验信息,这无疑比凭经验或通过尝试而选用对数、平方根等变换方式要客观和精确。
Box-Cox变换的目的是为了让数据满足线性模型的基本假定,即线性、正态性及方差齐性,然而经Box-Cox变换后数据是否同时满足了以上假定,仍需要考察验证

2.python实现

scipy.special.boxcox1p是Box-Cox变换的函数。scipy.stats.boxcox_normmax是用来计算输入数据的最佳Box-Cox变换参数,即scipy.special.boxcox1p函数中的lamda。

scipy.special.boxcox1p(x, lmbda)

python实现


from scipy.special import boxcox1p
from scipy.stats import boxcox_normmax

def fixing_skewness(df):
"""
    This function takes in a dataframe and return fixed skewed dataframe
"""

    numeric_feats = df.dtypes[df.dtypes != "object"].index

    skewed_feats = df[numeric_feats].apply(lambda x: x.skew()).sort_values(ascending=False)

    high_skew = skewed_feats[abs(skewed_feats) > 0.5]
    skewed_features = high_skew.index

    for feat in skewed_features:

        df[feat] = boxcox1p(df[feat], boxcox_normmax(df[feat] + 1))

举例:
修正前:

数据预处理—5.box-cox变换及python实现
修正后:
数据预处理—5.box-cox变换及python实现

2.1逆变换

如果变换的是目标变量,那么还需要对测试集的预测值进行反Box-Cox变换,
Python实现

from scipy.special import inv_boxcox
y = inv_boxcox(x1, lambda)

其中x为需要进行反Box-Cox变换的数据,即预测值,lamda为训练集Box-Cox时使用的lambda,如果在训练集Box-Cox变换时使用了C常数(即上面中的+1)进行了非零处理,那么还需要再反变换之后减去这个C常数。

参考:

  1. box-cox变换

如果对您有帮助,麻烦点赞关注,这真的对我很重要!!!如果需要互关,请评论留言!

数据预处理—5.box-cox变换及python实现

Original: https://blog.csdn.net/weixin_46649052/article/details/115212088
Author: 哎呦-_-不错
Title: 数据预处理—5.box-cox变换及python实现

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/754772/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球