python Box-Cox数据变化与逆变化

Box-Cox数据变化是一个基于参数λ的数据变化方法

  • 接受任意分布的输入,但需要值>0
  • 可以使变化后的数据减少变量之间的相关性
  • 减少噪声

在这里插入图片描述

数据Box-Cox变化与逆变换

stats box-cox变化请参考:https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.boxcox.html

逆变换请参考:https://docs.scipy.org/doc/scipy/reference/generated/scipy.special.inv_boxcox.html

from scipy.stats import boxcox
from scipy.special import inv_boxcox
from numpy.random import pareto


array = pareto(3, size=(1000))  # 生成幂律分布数据

box_array, lambda0 = boxcox(array)  # box-cox变换
origin_array = inv_boxcox(box_array, lambda0)  # 逆box-cox变换

这里的lambda0就是上面公式里的λ,可以在变换时给定,如果没有给定,就会通过max{y}使用最大似然求出参数λ

示例代码

numpy生成幂律分布请参考:https://numpy.org/doc/stable/reference/random/generated/numpy.random.pareto.html

from scipy.stats import boxcox
from numpy.random import pareto
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.special import inv_boxcox

if __name__ == '__main__':
    array = pareto(3, size=(1000))  # 生成幂律分布数据
    box_array, lambda0 = boxcox(array)  # box-cox变换
    origin_array = inv_boxcox(box_array, lambda0)  # 逆box-cox变换
    # 绘图
    sns.distplot(array, kde=False, rug_kws={
    
    'color': 'g'})
    sns.distplot(box_array, kde=False, rug_kws={
    
    'color': 'r'})
    plt.show()

效果图如下:

在这里插入图片描述

Guess you like

Origin blog.csdn.net/weixin_35757704/article/details/121764990