Winsorizer#

class feature_engine.outliers.Winsorizer(capping_method='gaussian', tail='right', fold='auto', add_indicators=False, variables=None, missing_values='raise')[源代码][源代码]#

Winsorizer() 将变量的最大值和/或最小值限制在自动确定的值上,并可选择添加指示器。

超出这些极值的观测值被认为是异常值,这些极值是通过以下方法确定的:

  • 高斯近似

  • 四分位距接近规则 (IQR)

  • MAD-中位数规则 (MAD)

  • 百分位数

高斯极限:

  • 右尾: 均值 + 3* 标准差

  • 左尾: 均值 - 3* 标准差

IQR 限制:

  • 右尾: 75%分位数 + 1.5* IQR

  • 左尾: 25%分位数 - 1.5* IQR

其中 IQR 是四分位距:75% 分位数 - 25% 分位数。

MAD 限制:

  • 右尾: 中位数 + 3.29* 绝对中位差

  • 左尾: 中位数 - 3.29* 绝对中位差

其中 MAD 是中位数绝对偏差。

百分位数:

  • 右尾: 第95百分位数

  • 左尾: 第5百分位

你可以通过参数 'fold' 选择最大值或最小值的限制范围。

如果 capping_method='gaussian' 折叠给出乘以标准差的值。

如果 capping_method='iqr' ,fold 是乘以 IQR 的值。

如果 capping_method='mad',fold 是乘以 MAD 的值。

如果 capping_method='quantiles',fold 是每个尾部应被审查的百分位数。例如,如果 fold=0.05,则限制将是第 5 和第 95 百分位数。如果 fold=0.1,则限制将是第 10 和第 90 百分位数。

Winsorizer() 仅适用于数值变量。可以指定一个变量列表。或者,Winsorizer() 将选择并限定训练集中所有数值变量。

转换器首先在分布的一个或两个尾部找到值(拟合)。然后转换器对变量进行上限处理(转换)。

更多详情请参见 用户指南

参数
capping_method: str, default=’gaussian’

期望的异常值检测方法。可以是 ‘gaussian’, ‘iqr’, ‘mad’, ‘quantiles’。

转换器将使用以下方法找到超出最大值和/或最小值的数据点,这些数据点将被视为异常值:’gaussian’:高斯近似。’iqr’:IQR 接近规则。’quantiles’:百分位数。’mad’:使用稳健统计的高斯近似。

tail: str, default=’right’

是否在分布的右侧、左侧或两侧查找异常值。可以取值为 ‘left’、’right’ 或 ‘both’。

fold: int, float 或 ‘auto’, 默认=’auto’.

用于乘以标准差、MAD 或 IQR 以计算允许的最大或最小值的因子。当为 ‘auto’ 时,fold 根据 capping_method 设置:

  • 如果 capping_method='quantile',那么 'fold' = 0.05;

  • 如果 capping_method='gaussian' ,那么 'fold' = 3.0;

  • 如果 capping_method='mad' ,那么 'fold' = 3.29;

  • 如果 capping_method='iqr',那么 'fold' = 1.5。

对于高斯近似,推荐值为2、2.5或3;对于IQR接近规则,推荐值为1.5或3;对于MAD规则,推荐值为3或3.5。

如果 capping_method='quantile',那么 'fold' 表示百分位数。因此,如果 fold=0.05,则限制将是第 95 和第 5 百分位数。

注意: 当 capping_method='quantile' 时,允许的最大 fold 是 0.2,这将找到位于第 20 和第 80 百分位的边界。

add_indicators: bool, default=False

是否添加指示变量以标记被截断的异常值。如果为 ‘True’,将添加二进制变量以标记分布左右尾部的异常值。每个尾部、每个变量对应一个二进制变量。

变量: 列表, 默认=无

要转换的数值变量的列表。如果为 None,转换器将自动查找并选择所有数值变量。

missing_values: string, default=’raise’

指示是否应忽略缺失值或引发错误。如果设置为 'raise',当 fittransform 的数据集包含缺失值时,转换器将返回错误。如果设置为 'ignore',在学习参数或执行转换时将忽略缺失数据。

属性
right_tail_caps_

包含最大值的字典,超过该值将被视为异常值。

left_tail_caps_

字典,包含最小值,超过该值的值将被视为异常值。

变量_

将被转换的变量组。

feature_names_in_:

fit 期间看到的特征名称列表。

n_features_in_:

在拟合过程中使用的训练集中的特征数量。

fold_:

乘以标准差、平均绝对偏差、四分位距或百分位数的因子。仅当 fold="auto" 时与 fold 不同。

参考文献

1

Rousseeuw, Croux. “均值绝对偏差的替代方案”。《美国统计协会杂志》,1993年。http://www.jstor.org/stable/2291267

2

Leys, 等人。“不要使用均值的标准差,使用中位数的绝对差”。《实验社会心理学杂志》,2013年。http://dx.doi.org/10.1016/j.jesp.2013.03.013

3

Thériault 等人。检查你的异常值!使用 easystats 在 R 中识别统计异常值的介绍。行为研究方法,2024。https://doi.org/10.3758/s13428-024-02356-w

4

Dixon. 从截尾正态样本中简化估计。《数理统计年鉴》,1960年。http://www.jstor.org/stable/2237953

示例

>>> import numpy as np
>>> import pandas as pd
>>> from feature_engine.outliers import Winsorizer
>>> np.random.seed(42)
>>> X = pd.DataFrame(dict(x = np.random.normal(size = 10)))
>>> wz = Winsorizer(capping_method='mad', tail='both', fold=3)
>>> wz.fit(X)
>>> wz.transform(X)
          x
0  0.496714
1 -0.138264
2  0.647689
3  1.523030
4 -0.234153
5 -0.234137
6  1.579213
7  0.767435
8 -0.469474
9  0.542560
>>> import numpy as np
>>> import pandas as pd
>>> from feature_engine.outliers import Winsorizer
>>> np.random.seed(42)
>>> X = pd.DataFrame(dict(x = np.random.normal(size = 10)))
>>> wz = Winsorizer(capping_method='mad', tail='both', fold=3)
>>> wz.fit(X)
>>> wz.transform(X)
          x
0  0.496714
1 -0.138264
2  0.647689
3  1.523030
4 -0.234153
5 -0.234137
6  1.579213
7  0.767435
8 -0.469474
9  0.542560

方法

拟合:

学习将替换异常值的值。

fit_transform:

拟合数据,然后进行转换。

get_feature_names_out:

获取转换后的输出特征名称。

get_params:

获取此估计器的参数。

设置参数:

设置此估计器的参数。

转换:

限制变量。

fit(X, y=None)[源代码]#

学习应使用的值来替换异常值。

参数
Xpandas 数据框,形状为 = [样本数, 特征数]

训练输入样本。

ypandas 系列, 默认=None

在这个转换器中不需要 y。你可以传递 y 或 None。

fit_transform(X, y=None, **fit_params)[源代码]#

拟合数据,然后进行转换。

使用可选参数 fit_params 将转换器拟合到 Xy,并返回 X 的转换版本。

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

输入样本。

y形状为 (n_samples,) 或 (n_samples, n_outputs) 的类数组对象,默认=None

目标值(无监督转换为None)。

**fit_参数dict

附加的拟合参数。

返回
X_newndarray 数组的形状为 (n_samples, n_features_new)

转换后的数组。

get_feature_names_out(input_features=None)[源代码]#

获取转换后的输出特征名称。换句话说,返回转换后的数据框的变量名称。

参数
输入特征数组或列表,默认=None

此参数仅用于与 Scikit-learn 管道兼容。

  • 如果 None,那么 feature_names_in_ 将用作特征名称。

  • 如果是一个数组或列表,那么 input_features 必须与 feature_names_in_ 匹配。

返回
feature_names_out: 列表

转换后的特征名称。

rtype

List[Union[str, int]] ..

get_metadata_routing()[源代码]#

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

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

返回
路由MetadataRequest

一个封装了路由信息的 MetadataRequest

get_params(deep=True)[源代码]#

获取此估计器的参数。

参数
深度bool, 默认=True

如果为真,将返回此估计器及其包含的作为估计器的子对象的参数。

返回
参数dict

参数名称映射到它们的值。

set_params(**params)[源代码]#

设置此估计器的参数。

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

参数
**参数dict

估计器参数。

返回
self估计器实例

估计器实例。

transform(X)[源代码][源代码]#

限制变量值。可选地,添加异常值指示器。

参数
X: pandas 数据框,形状为 = [样本数, 特征数]

要转换的数据。

返回
X_new: 形状为 [n_samples, n_features + n_ind] 的 pandas dataframe

带有上限变量和指标的数据框。输出变量的数量取决于’tail’和’add_indicators’的值:如果传递’add_indicators=False’,将等于’n_features’,否则,将为每个处理的特征的每个尾部添加一个额外的指示列。

rtype

DataFrame ..