power_transform#
- sklearn.preprocessing.power_transform(X, method='yeo-johnson', *, standardize=True, copy=True)[源代码]#
参数化、单调转换以使数据更像高斯分布。
幂变换是一系列参数化的、单调的变换,用于使数据更像高斯分布。这对于处理与异方差性(非恒定方差)相关的问题,或在其他需要正态性的情况下非常有用。
目前,power_transform 支持 Box-Cox 变换和 Yeo-Johnson 变换。通过最大似然估计来确定稳定方差和最小化偏度的最优参数。
Box-Cox 要求输入数据严格为正,而 Yeo-Johnson 支持正数和负数数据。
默认情况下,对变换后的数据应用零均值、单位方差的归一化。
更多信息请参阅 用户指南。
- 参数:
- Xshape 为 (n_samples, n_features) 的 array-like
要使用幂变换进行变换的数据。
- method{‘yeo-johnson’, ‘box-cox’}, 默认值=’yeo-johnson’
幂变换方法。可用方法有:
版本 0.23 中已更改: 在 0.23 版本中,
method参数的默认值从 ‘box-cox’ 更改为 ‘yeo-johnson’。- standardizebool, 默认值=True
设置为 True 以对变换后的输出应用零均值、单位方差的归一化。
- copy布尔值, 默认为 True
如果为 False,则尝试避免复制并就地进行变换。这不能保证总是能就地完成;例如,如果数据是具有 int 数据类型的 numpy 数组,即使 copy=False 也会返回副本。
- 返回:
- X_transndarray,形状为 (n_samples, n_features)
转换后的数据。
另请参阅
PowerTransformer使用 Transformer API 进行等效变换(例如,作为预处理
Pipeline的一部分)。quantile_transform使用参数
output_distribution='normal'将数据映射到标准正态分布。
注意事项
NaN 被视为缺失值:在
fit中被忽略,在transform中被保留。有关不同缩放器、变换器和归一器的比较,请参阅:比较不同缩放器对异常值数据的效果。
References
[1]I.K. Yeo 和 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 和 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())。