power_transform#

sklearn.preprocessing.power_transform(X, method='yeo-johnson', *, standardize=True, copy=True)#

参数化、单调变换使数据更符合高斯分布。

幂变换是一类参数化、单调变换,应用于使数据更符合高斯分布。这对于解决异方差性(非恒定方差)相关问题或需要在其他情况下实现正态性时非常有用。

目前,power_transform 支持 Box-Cox 变换和 Yeo-Johnson 变换。通过最大似然估计来估计最优参数以稳定方差和最小化偏度。

Box-Cox 要求输入数据为严格正数,而 Yeo-Johnson 支持正数和负数数据。

默认情况下,对变换后的数据应用零均值、单位方差归一化。

更多信息请参阅 用户指南

Parameters:
X形状为 (n_samples, n_features) 的类数组

使用幂变换的数据。

method{‘yeo-johnson’, ‘box-cox’}, 默认=’yeo-johnson’

幂变换方法。可用方法有:

  • ‘yeo-johnson’ [1], 适用于正数和负数

  • ‘box-cox’ [2], 仅适用于严格正数

Changed in version 0.23: 在 0.23 版本中, method 参数的默认值从 ‘box-cox’ 改为 ‘yeo-johnson’。

standardizebool, 默认=True

设置为 True 以对变换后的输出应用零均值、单位方差归一化。

copybool, 默认=True

如果为 False,尝试避免复制并在原地进行变换。 这不能保证总是原地工作;例如,如果数据是一个 int 类型的 numpy 数组,即使 copy=False,也会返回一个副本。

Returns:
X_trans形状为 (n_samples, n_features) 的 ndarray

变换后的数据。

See also

PowerTransformer

等效变换使用 Transformer API(例如,作为预处理 Pipeline 的一部分)。

quantile_transform

将数据映射到标准正态分布,参数 output_distribution='normal'

Notes

NaN 被视为缺失值:在 fit 中忽略,在 transform 中保留。

有关不同缩放器、变换器和正则化器的比较,请参见:比较不同缩放器对含有异常值的数据的影响

References

[1]

I.K. Yeo 和 R.A. Johnson, “一种新的幂变换家族,以改善正态性或对称性。” Biometrika, 87(4), pp.954-959, (2000).

[2]

G.E.P. Box 和 D.R. Cox, “变换分析”, Journal of the Royal Statistical Society B, 26, 211-252 (1964).

Examples

>>> import numpy as np
>>> from sklearn.preprocessing import power_transform
>>> data = [[1, 2], [3, 2], [4, 5]]
>>> print(power_transform(data, method='box-cox'))
[[-1.332... -0.707...]
 [ 0.256... -0.707...]
 [ 1.076...  1.414...]]

Warning

数据泄露风险。 除非你知道自己在做什么,否则不要使用 power_transform 。一个常见的错误是在将数据拆分为训练集和测试集之前对其进行变换。这将导致模型评估偏差,因为测试集的信息会泄露到训练集中。 一般来说,我们建议在 Pipeline 中使用 PowerTransformer 以防止大多数数据泄露风险,例如: pipe = make_pipeline(PowerTransformer(), LogisticRegression())