power_transform#

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

参数化、单调变换,使数据更接近高斯分布。

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

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

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

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

用户指南中阅读更多内容。

参数:
X形状为 (n_samples, n_features) 的类数组对象

将使用幂变换进行变换的数据。

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

幂变换方法。可用方法包括:

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

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

0.23 版中的变化:0.23 版中 `method` 参数的默认值从 ‘box-cox’ 变为 ‘yeo-johnson’。

standardize布尔值,默认为 True

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

copy布尔值,默认为 True

如果为 False,则尝试避免复制并就地变换。这不保证总是就地操作;例如,如果数据是具有 int dtype 的 numpy 数组,即使 `copy=False` 也会返回副本。

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

变换后的数据。

另请参阅

PowerTransformer

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

quantile_transform

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

注意

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

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

参考文献

[1]

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

[2]

G.E.P. Box 和 D.R. Cox,“变换分析”,《英国皇家统计学会期刊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())