如何计算 lambda 以对 500 列的整个数据框使用 scipy.special.boxcox1p 函数?
How do I calculate lambda to use scipy.special.boxcox1p function for my entire dataframe of 500 columns?
我有一个数据框,每行总销售额约为 500 个产品类别。所以我的数据框中有 500 列。我试图找到与我的另一个数据框列相关度最高的类别。
因此,我将为此使用 Pearson 相关方法。
但是所有类别的总销售额都是高度偏斜的数据,所有类别列的偏斜度级别都在 10 到 40 之间。所以我想使用 boxcox 转换对这个销售数据进行日志转换。
因为,我的销售数据也有 0 个值,所以我想使用 boxcox1p 函数。
有人可以帮我吗,我该如何计算 boxcox1p 函数的 lambda,因为它是此函数的强制参数?
另外,对于我的问题陈述来说,这是找到高度相关类别的正确方法吗?
假设df
是你的dataframe,有很多包含数值的列,box-cox变换的lambda参数等于0.25,那么:
from scipy.special import boxcox1p
df_boxcox = df.apply(lambda x: boxcox1p(x,0.25))
现在转换后的值在 df_boxcox
。
不幸的是,没有内置方法可以找到 boxcox1p
的 lambda,但我们可以使用 sklearn.preprocessing
中的 PowerTransformer
代替:
import numpy as np
from sklearn.preprocessing import PowerTransformer
pt = PowerTransformer(method='yeo-johnson')
使用注释方法 'yeo-johnson' 是因为它适用于正值和负值。方法 'box-cox' 将引发错误:ValueError: The Box-Cox transformation can only be applied to strictly positive data
.
data = pd.DataFrame({'x':[-2,-1,0,1,2,3,4,5]}) #just sample data to explain
pt.fit(data)
print(pt.lambdas_)
[0.89691707]
然后应用计算的 lambda:
print(pt.transform(data))
结果:
[[-1.60758267]
[-1.09524803]
[-0.60974999]
[-0.16141745]
[ 0.26331586]
[ 0.67341476]
[ 1.07296428]
[ 1.46430326]]
我有一个数据框,每行总销售额约为 500 个产品类别。所以我的数据框中有 500 列。我试图找到与我的另一个数据框列相关度最高的类别。 因此,我将为此使用 Pearson 相关方法。 但是所有类别的总销售额都是高度偏斜的数据,所有类别列的偏斜度级别都在 10 到 40 之间。所以我想使用 boxcox 转换对这个销售数据进行日志转换。 因为,我的销售数据也有 0 个值,所以我想使用 boxcox1p 函数。 有人可以帮我吗,我该如何计算 boxcox1p 函数的 lambda,因为它是此函数的强制参数? 另外,对于我的问题陈述来说,这是找到高度相关类别的正确方法吗?
假设df
是你的dataframe,有很多包含数值的列,box-cox变换的lambda参数等于0.25,那么:
from scipy.special import boxcox1p
df_boxcox = df.apply(lambda x: boxcox1p(x,0.25))
现在转换后的值在 df_boxcox
。
不幸的是,没有内置方法可以找到 boxcox1p
的 lambda,但我们可以使用 sklearn.preprocessing
中的 PowerTransformer
代替:
import numpy as np
from sklearn.preprocessing import PowerTransformer
pt = PowerTransformer(method='yeo-johnson')
使用注释方法 'yeo-johnson' 是因为它适用于正值和负值。方法 'box-cox' 将引发错误:ValueError: The Box-Cox transformation can only be applied to strictly positive data
.
data = pd.DataFrame({'x':[-2,-1,0,1,2,3,4,5]}) #just sample data to explain
pt.fit(data)
print(pt.lambdas_)
[0.89691707]
然后应用计算的 lambda:
print(pt.transform(data))
结果:
[[-1.60758267]
[-1.09524803]
[-0.60974999]
[-0.16141745]
[ 0.26331586]
[ 0.67341476]
[ 1.07296428]
[ 1.46430326]]