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'
,当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 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
将转换器拟合到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
如果为真,将返回此估计器及其包含的作为估计器的子对象的参数。
- 返回
- 参数dict
参数名称映射到它们的值。