首页 > 解决方案 > PowerTransform inverse_transform 未准确反转

问题描述

我正在测试偏斜数据集的 PowerTransform inverse_transform,但我没有准确地恢复列值。

为什么 val 不是 TRUE?

from numpy.random import randn
from sklearn.preprocessing import PowerTransformer
import pandas as pd


col1 = pd.Series([1 for i in range(70)] + [10, 20, 30])
col2 = pd.Series(randn(73), name='col')
df = pd.concat([col2, col1], axis=1)

col1_np = col1.to_numpy().reshape(-1, 1)
label_regression_transform = PowerTransformer()
data_label_trans = label_regression_transform.fit_transform(col1_np)
inv_trans = label_regression_transform.inverse_transform(data_label_trans)
val = np.allclose(inv_trans, col1_np)

标签: pythonscikit-learnsklearn-pandas

解决方案


NumPy 的方法测试两个数组是否在容差范围内按allclose元素相等。默认参数用于相对容差和绝对容差(请参阅文档)。rtol=1e-05atol=1e-08

但是,请检查原始值和转换后的值之间的差异,例如最后一个:

print(col1_np[-1]) # output: [30]
print(inv_trans[-1]) # output: [27.67403189]

PowerTransformer由于浮点精度的限制,不能总是重现准确的原始值。显然,allclose将因此(正确地)返回False默认参数。

因此,这不是PowerTransformer这方面的错误或任何东西。您可以做的是根据需要调整容差,例如:

val = np.allclose(inv_trans, col1_np, rtol=0.1) # val == True

推荐阅读