pandas 创建Yeo-Johnson转换数据集前后Box-Cox转换的不同lambda值

qhhrdooz  于 2023-04-04  发布在  其他
关注(0)|答案(1)|浏览(215)

我正在处理一个回归问题,我试图使用Box-Cox变换来规范化我的输入特征。我使用scikit-learn的PowerTransformer函数来执行变换,并获得了每个特征的最佳lambda值。然而,当我在同一数据集上比较Box-Cox变换的lambda值和Yeo-Johnson变换的lambda值时,我注意到Box-Cox的lambda值与我之前获得的不同。
以下是我采取的步骤的摘要:
1.我使用Box-Cox变换来规范化我的训练数据:
pt = PowerTransformer(method ='box-cox')
X_train_transformed =pt.fit_transform(X_train+0.000001)
1.获得Box-Cox变换的λ值:
pd.DataFrame('cols':X_train.columns,'box_考克斯_lambdas':pt.lambdas_})
1.在相同的数据集上执行了Yeo-Johnson变换:
pt1 = PowerTransformer()
X_train_transformed2 =pt1.fit_transform(X_train)
1.获得了Yeo-Johnson变换的λ值:
pd.DataFrame('cols':X_train.columns,'Yeo_Json_lambdas':pt1.lambdas_})
1.创建了一个dataframe来比较两个转换的lambda值:
pd.DataFrame('columns':X_train.columns,'box_考克斯_lambdas':pt.lambdas_,'Yeo_Json_lambdas':pt1.lambdas_})
创建数据框后的列
水泥0.177025 0.169544
高炉矿渣0.025093 0.016633
粉煤灰-0.038970 -0.136480
水0.772682 0.808438
超塑化剂0.098811 0.264160
粗骨料1.129813 1.129395
细骨料1.782019 1.830763
年龄0.066631 0.001771
有谁能解释一下为什么会发生这种情况,以及我如何解决它?

holgip5t

holgip5t1#

Box-Cox变换和Yeo-Johnson变换是将非正态数据变换为更正态分布的两种不同方法。Box-Cox变换假设数据具有正分布,并应用幂变换以使数据更正态。另一方面,Yeo-Johnson变换可以处理正数据和负数据,并应用类似的幂变换。但是具有允许负值的不同公式。
从这些转换获得的lambda值是应用于每个特征的转换量的指示器。然而,从Box-Cox转换和Yeo-Johnson转换获得的lambda值对于相同的数据集可能不同,因为它们使用不同的公式来计算lambda值。
在您的例子中,您在同一个数据集上使用了两种转换,并获得了不同的lambda值。这是意料之中的,因为Box-Cox和Yeo-Johnson转换是不同的方法,可能会为同一个数据集产生不同的lambda值。重要的是选择在回归任务中性能最好的转换。
要解决此问题,您可以尝试比较使用两种转换的回归模型的性能,并选择提供更好结果的转换。或者,您可以尝试其他归一化技术,如StandardScaler或MinMaxScaler,并将其性能与Box-Cox和Yeo-Johnson转换进行比较。最终,归一化技术的选择取决于数据的性质和回归模型的性能。

相关问题