python - 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)
解决方案
NumPy 的方法测试两个数组是否在容差范围内按allclose
元素相等。默认参数用于相对容差和绝对容差(请参阅文档)。rtol=1e-05
atol=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
推荐阅读
- python - 如何用元组列表替换列表中正则表达式匹配的模式?
- solr - Solr中距离为3的模糊搜索
- local - 本地家庭执行重启 Google Nest 中心
- python - 如何使用 python 日志记录模块在 dictConfig 文件中设置自定义日志记录处理程序
- javascript - 在 Vue.js 的子组件中放置 Modals
- c# - 多对多关系和创建视图
- c# - 如何使用 Convert.ToInt32 在 C# 中构造三元表达式?
- javascript - 如何让我的应用程序显示错误消息而不是损坏的图像链接?
- c# - 解析 M3U 文件
- ios - Xcode 11 GM Seed 工具链无效