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'
,当fit
或transform
的数据集包含缺失值时,转换器将返回错误。如果设置为'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
将转换器拟合到X
和y
,并返回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_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 中剩余的行数相同。