power_transform#

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

参数化、单调转换以使数据更像高斯分布。

幂变换是一族参数化、单调的变换,旨在使数据更接近高斯分布。这对于处理异方差性(非恒定方差)建模问题或需要正态性的其他情况非常有用。

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

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

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

更多信息请参阅 用户指南

参数:
Xshape 为 (n_samples, n_features) 的 array-like

要使用幂变换进行转换的数据。

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

幂变换方法。可选方法为:

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

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

0.23 版本变更:method 参数的默认值在 0.23 版本中从 ‘box-cox’ 改为了 ‘yeo-johnson’。

standardizebool, default=True

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

copy布尔值, 默认为 True

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

返回:
X_transndarray, shape (n_samples, n_features)

转换后的数据。

另请参阅

PowerTransformer

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

quantile_transform

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

注意事项

NaN 值被视为缺失值:在 fit 中忽略,并在 transform 中保持原样。

有关不同缩放器、变换器和归一器的比较,请参阅:比较不同缩放器对异常值数据的效果

References

[1]

I.K. Yeo and R.A. Johnson, “A new family of power transformations to improve normality or symmetry.” Biometrika, 87(4), pp.954-959, (2000).

[2]

G.E.P. Box and D.R. Cox, “An Analysis of Transformations”, Journal of the Royal Statistical Society B, 26, 211-252 (1964).

示例

>>> 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]]

警告

数据泄露风险。除非清楚自己在做什么,否则请勿使用 power_transform。一个常见的错误是在划分训练集和测试集之前将该方法应用于整个数据集。这将导致模型评估偏差,因为测试集的信息会泄露到训练集中。通常,我们建议在 Pipeline 中使用 PowerTransformer 以防止大多数数据泄露风险,例如:pipe = make_pipeline(PowerTransformer(), LogisticRegression())