【问题标题】:How do I correctly use the inverse_transform method when using PowerTransformer?使用 PowerTransformer 时如何正确使用 inverse_transform 方法?
【发布时间】:2019-11-18 01:53:06
【问题描述】:

在对各种数组执行连续变换后,我在使用 inverse_transform 方法对数组进行逆变换时遇到了一些困难。我可以使用 .lambdas_ 属性访问用于原始转换的 lambda 值。此外,我了解执行 inverse_transform 的代码在here 中列出。但是,我想知道如何正确使用 inverse_transform 方法。

此代码确实按预期执行了逆变换:

from sklearn.preprocessing import PowerTransformer

a = np.array([1,3,3,6,3]).reshape(-1, 1)

bc = PowerTransformer(method='box-cox', standardize=False)
bc.fit(a)
a_transformed = bc.transform(a)

a_inverse_transformed = bc.inverse_transform(a_transformed)
a_inverse_transformed

此代码的输出表明 a 与 a_inverse_transformed 相同。但是,我无法在其他脚本或其他转换之后存储 lambdas 以供以后的 inverse_transform 使用。这是我尝试过的代码:

a = np.array([1,3,3,6,3]).reshape(-1, 1)
bc = PowerTransformer(method='box-cox', standardize=False)
bc.fit(a)
a_transformed = bc.transform(a)
a_lambda = bc.lambdas_[0]

b = np.array([11,33,35,60,38]).reshape(-1, 1)
bc = PowerTransformer(method='box-cox', standardize=False)
bc.fit(b)
b_transformed = bc.transform(b)


bc.set_params(**{'lambdas_':a_lambda})
a_inverse_transformed = bc.inverse_transform(a_transformed)
a_inverse_transformed

上面的代码出现以下错误:

ValueError: Invalid parameter lambdas_ for estimator PowerTransformer(copy=True, method='box-cox', standardize=False). Check the list of available parameters with `estimator.get_params().keys()`.

另外,我尝试使用 bc.get_params().keys() 找到正确的参数。我看到的唯一键是

dict_keys(['copy', 'method', 'standardize'])

【问题讨论】:

    标签: python python-3.x scikit-learn


    【解决方案1】:

    显然,您可以直接分配 lambda 值。 因此,最初您保存用于转换的 .lambdas_,例如: savedLamdas = bc.lambdas_

    然后,在执行 .inverse_transformed() 之前,您可以直接恢复保存的 lambda,例如: bc.lambdas_ = savedLamdas

    我很惊讶您可以直接设置 lambdas_ 属性,但它可以工作(至少在我的 scikit-learn 0.21.2 版本中)。

    【讨论】:

      猜你喜欢
      • 2016-11-20
      • 2019-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-23
      • 2021-12-22
      相关资源
      最近更新 更多