OutlierTrimmer#

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

OutlierTrimmer() 从数据集中移除含有异常值的观测值。

OutlierTrimmer() 首先计算最大值和/或最小值,超过这些值的值将被视为异常值,并因此被移除。

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

  • 高斯近似

  • 四分位距接近规则 (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 百分位数。

OutlierTrimmer() 仅适用于数值变量。可以指定一个变量列表。或者,它将选择所有数值变量。

转换器首先在分布的一个或两个尾部找到值(拟合)。然后,转换器从数据框中移除包含异常值的观测值(转换)。

更多详情请参阅 用户指南

参数
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 百分位的边界。

变量: 列表, 默认=无

要转换的数值变量列表。如果为 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 pandas as pd
>>> from feature_engine.outliers import OutlierTrimmer
>>> X = pd.DataFrame(dict(x = [0.49671,
>>>                         -0.1382,
>>>                          0.64768,
>>>                          1.52302,
>>>                         -0.2341,
>>>                         -17.2341,
>>>                          1.57921,
>>>                          0.76743,
>>>                         -0.4694,
>>>                          0.54256]))
>>> ot = OutlierTrimmer(capping_method='gaussian', tail='left', fold=3)
>>> ot.fit(X)
>>> ot.transform(X)
          x
0   0.49671
1  -0.13820
2   0.64768
3   1.52302
4  -0.23410
5 -17.23410
6   1.57921
7   0.76743
8  -0.46940
9   0.54256
>>> import pandas as pd
>>> from feature_engine.outliers import OutlierTrimmer
>>> X = pd.DataFrame(dict(x = [0.49671,
>>>                         -0.1382,
>>>                          0.64768,
>>>                          1.52302,
>>>                         -0.2341,
>>>                         -17.2341,
>>>                          1.57921,
>>>                          0.76743,
>>>                         -0.4694,
>>>                          0.54256]))
>>> ot = OutlierTrimmer(capping_method='mad', tail='left', fold=3)
>>> ot.fit(X)
>>> ot.transform(X)
         x
0  0.49671
1 -0.13820
2  0.64768
3  1.52302
4 -0.23410
6  1.57921
7  0.76743
8 -0.46940
9  0.54256

方法

拟合:

查找最大值和最小值。

fit_transform:

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

get_feature_names_out:

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

get_params:

获取此估计器的参数。

设置参数:

设置此估计器的参数。

变换:

移除异常值。

transform_x_y:

从 X 集合和 y 中移除包含异常值的行。

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

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

参数
Xpandas 数据框,形状为 = [n_samples, n_features]

训练输入样本。

ypandas Series,默认=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

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

返回
参数dict

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

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

设置此估计器的参数。

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

参数
**参数dict

估计器参数。

返回
self估计器实例

估计器实例。

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

从数据框中移除包含异常值的观测。

参数
Xpandas 数据框,形状为 = [n_samples, n_features]

要转换的数据。

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

没有异常观测值的数据框。

rtype

DataFrame ..

transform_x_y(X, y)[源代码]#

基于应用于X的变换,对X和y进行变换、对齐和调整,确保如果从X中删除了任何行,它们对应于相同的一组行。

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

要转换的数据框。

y: pandas Series 或 Dataframe,长度 = n_samples

要转换的目标变量。可以是多输出的。

返回
X_new: pandas 数据框

转换后的数据框,形状为 [n_samples - n_rows, n_features]。它可能包含比原始数据集更少的行。

y_new: pandas Series 或 DataFrame

转换后的目标变量,长度为 [n_samples - n_rows]。它包含的行数与 X_new 中剩余的行数相同。