幂变换器#

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

对特征应用幂变换,使数据更接近高斯分布。

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

目前,PowerTransformer 支持 Box-Cox 变换和 Yeo-Johnson 变换。通过最大似然法估计稳定方差和最小化偏斜的最佳参数。

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

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

有关示例可视化,请参阅 比较 PowerTransformer 与其他缩放器。要查看 Box-Cox 和 Yeo-Johnson 变换对不同分布的影响,请参阅:将数据映射到正态分布

用户指南 中了解更多信息。

0.20 版本中添加。

参数:
method{‘yeo-johnson’, ‘box-cox’}, 默认值为’yeo-johnson’

幂变换方法。可用方法为

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

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

standardize布尔值,默认为 True

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

copy布尔值,默认为 True

设置为 False 以在变换过程中执行就地计算。

属性:
lambdas_形状为 (n_features,) 的浮点数 ndarray

所选特征的幂变换参数。

n_features_in_整数

拟合过程中看到的特征数量。

0.24 版本中添加。

feature_names_in_形状为 (n_features_in_,) 的 ndarray

拟合过程中看到的特征名称。仅当 X 的特征名称全部为字符串时才定义。

1.0 版本中添加。

另请参阅

幂变换

没有估计器 API 的等效函数。

分位数变换器

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

备注

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

参考文献

示例

>>> import numpy as np
>>> from sklearn.preprocessing import PowerTransformer
>>> pt = PowerTransformer()
>>> data = [[1, 2], [3, 2], [4, 5]]
>>> print(pt.fit(data))
PowerTransformer()
>>> print(pt.lambdas_)
[ 1.386... -3.100...]
>>> print(pt.transform(data))
[[-1.316... -0.707...]
 [ 0.209... -0.707...]
 [ 1.106...  1.414...]]
fit(X, y=None)[source]#

估计每个特征的最佳参数 lambda。

使用最大似然法独立估计每个特征上最小化偏斜的最佳 lambda 参数。

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

用于估计最佳变换参数的数据。

yNone

忽略。

返回值:
self对象

拟合的转换器。

fit_transform(X, y=None)[source]#

PowerTransformer 拟合到 X,然后变换 X

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

用于估计最佳变换参数并使用幂变换进行变换的数据。

y忽略

未使用,根据约定保留用于 API 一致性。

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

变换后的数据。

get_feature_names_out(input_features=None)[source]#

获取变换的输出特征名称。

参数:
input_features字符串的类数组或 None,默认为 None

输入特征。

  • 如果 input_featuresNone,则使用 feature_names_in_ 作为输入特征名称。如果 feature_names_in_ 未定义,则会生成以下输入特征名称:["x0", "x1", ..., "x(n_features_in_ - 1)"]

  • 如果 input_features 是类数组,则如果 feature_names_in_ 已定义,则 input_features 必须与 feature_names_in_ 匹配。

返回值:
feature_names_out字符串对象的 ndarray

与输入特征相同。

get_metadata_routing()[source]#

获取此对象的元数据路由。

请查看 用户指南,了解路由机制的工作原理。

返回值:
routingMetadataRequest

一个封装路由信息的MetadataRequest

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deepbool, default=True

如果为 True,则将返回此估计器和包含的子对象(它们是估计器)的参数。

返回值:
paramsdict

参数名称及其值的映射。

inverse_transform(X)[source]#

使用拟合的 lambda 应用反幂变换。

Box-Cox 变换的反变换由以下公式给出:

if lambda_ == 0:
    X = exp(X_trans)
else:
    X = (X_trans * lambda_ + 1) ** (1 / lambda_)

Yeo-Johnson 变换的反变换由以下公式给出:

if X >= 0 and lambda_ == 0:
    X = exp(X_trans) - 1
elif X >= 0 and lambda_ != 0:
    X = (X_trans * lambda_ + 1) ** (1 / lambda_) - 1
elif X < 0 and lambda_ != 2:
    X = 1 - (-(2 - lambda_) * X_trans + 1) ** (1 / (2 - lambda_))
elif X < 0 and lambda_ == 2:
    X = 1 - exp(-X_trans)
参数:
X形状为 (n_samples, n_features) 的类数组

变换后的数据。

返回值:
Xndarray of shape (n_samples, n_features)

原始数据。

set_output(*, transform=None)[source]#

设置输出容器。

参见 Introducing the set_output API,了解如何使用此 API 的示例。

参数:
transform{“default”, “pandas”, “polars”}, default=None

配置transformfit_transform的输出。

  • "default": 变换器的默认输出格式

  • "pandas": DataFrame 输出

  • "polars": Polars 输出

  • None: 变换配置保持不变

Added in version 1.4: "polars" 选项已添加。

返回值:
selfestimator instance

估计器实例。

set_params(**params)[source]#

设置此估计器的参数。

此方法适用于简单的估计器以及嵌套对象(例如 Pipeline)。后者具有 <component>__<parameter> 形式的参数,因此可以更新嵌套对象的每个组件。

参数:
**paramsdict

估计器参数。

返回值:
selfestimator instance

估计器实例。

transform(X)[source]#

使用拟合的 lambda 对每个特征应用幂变换。

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

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

返回值:
X_transndarray of shape (n_samples, n_features)

变换后的数据。