• 技术文章 >Python技术 >Python基础教程

    python中Box-Cox变换是什么

    小妮浅浅小妮浅浅2021-08-28 09:24:04原创6684

    概念

    1、Box-Cox变换是统计建模中常用的建模方法,主要用于连续响应变量不满足正态分布。

    可采用Box-Cox变换。

    2、使线性回归模型在满足线性、正态性、独立性和方差的同时不丢失信息。

    在Box-Cox转换之前,有必要将数据归一化。

    实例

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    #我们这里是对训练集和测试集一起归一化,也可以分开进行归一化,(分开)这种方式需要建立训练数据和测试数据分布一直的情况下,建议在数据量大的情况下使用。

    # 绘图显示Box-Cox变换对数据分布影响

    cols_numeric_left = cols_numeric[0:13]

    cols_numeric_right = cols_numeric[13:] #这里是将特征分为两部分,前13个为第一部分

    ## Check effect of Box-Cox transforms on distributions of continuous variables

      

    train_data_process = pd.concat([train_data_process, train_data['target']], axis=1)

      

    fcols = 6

    frows = len(cols_numeric_left)

    plt.figure(figsize=(4*fcols,4*frows))

    i=0

    for var in cols_numeric_left:

        dat = train_data_process[[var, 'target']].dropna()

             

        i+=1

        plt.subplot(frows,fcols,i)

        sns.distplot(dat[var] , fit=stats.norm);

        plt.title(var+' Original')

        plt.xlabel('')

             

        i+=1

        plt.subplot(frows,fcols,i)

        _=stats.probplot(dat[var], plot=plt)

        plt.title('skew='+'{:.4f}'.format(stats.skew(dat[var]))) #计算数据集的偏度

        plt.xlabel('')

        plt.ylabel('')

             

        i+=1

        plt.subplot(frows,fcols,i)

        plt.plot(dat[var],dat['target'],'.',alpha=0.5)

        plt.title('corr='+'{:.2f}'.format(np.corrcoef(dat[var],dat['target'])[0][1]))

      

        i+=1

        plt.subplot(frows,fcols,i)

        trans_var, lambda_var = stats.boxcox(dat[var].dropna()+1)

        trans_var = scale_data(trans_var)   

        sns.distplot(trans_var , fit=stats.norm);

        plt.title(var+' Tramsformed')

        plt.xlabel('')

             

        i+=1

        plt.subplot(frows,fcols,i)

        _=stats.probplot(trans_var, plot=plt)

        plt.title('skew='+'{:.4f}'.format(stats.skew(trans_var))) #归一化后,偏度明显变小,相关性变化不大

        plt.xlabel('')

        plt.ylabel('')

             

        i+=1

        plt.subplot(frows,fcols,i)

        plt.plot(trans_var, dat['target'],'.',alpha=0.5)

        plt.title('corr='+'{:.2f}'.format(np.corrcoef(trans_var,dat['target'])[0][1]))

    以上就是python中Box-Cox变换的介绍,希望对大家有所帮助。更多Python学习指路:python基础教程

    本文教程操作环境:windows7系统、Python 3.9.1,DELL G3电脑。

    专题推荐:python box-cox变换
    上一篇:python缺失值的解决方法 下一篇:python中fail函数如何使用

    相关文章推荐

    • Python中concurrent.futures模块如何使用• Python kmeans聚类的使用• Python K-means算法的计算步骤• Python默认值的使用注意• Python特殊传参如何实现• python中的两种输出语句• python循环语句的两种类型• python继承的多种类型• python merge()的连接• python join()合并DataFrame的操作• python concat方法的作用• python Unittest的组成• python中单向通信TCP服务器的搭建• python中客户端通信的实现流程• python列表元素的获取和查看• python列表清除元素的四种方式• python元组有哪些获取元素的方法• python字符的获取方式• python处理字符串的常见方法• python字符串的多行输出• python for循环的本质探究• python使用send启动生成器• python中Harris角点检测

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网