ArbitraryOutlierCapper#
The ArbitraryOutlierCapper()
将变量的最大值或最小值限制为用户指定的任意值。最大值或最小值应以 {特征: 限制值} 形式的字典输入。
让我们通过一个例子来看这个。首先我们加载泰坦尼克号数据集,并将其分为训练集和测试集:
from sklearn.model_selection import train_test_split
from feature_engine.datasets import load_titanic
from feature_engine.outliers import ArbitraryOutlierCapper
X, y = load_titanic(
return_X_y_frame=True,
predictors_only=True,
handle_missing=True,
)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=0,
)
print(X_train.head())
我们将在下面看到生成的数据:
pclass sex age sibsp parch fare cabin embarked
501 2 female 13.000000 0 1 19.5000 Missing S
588 2 female 4.000000 1 1 23.0000 Missing S
402 2 female 30.000000 1 0 13.8583 Missing C
1193 3 male 29.881135 0 0 7.7250 Missing Q
686 3 female 22.000000 0 0 7.7250 Missing Q
现在,我们设置 ArbitraryOutlierCapper()
,指示我们希望将变量 ‘age’ 的上限设为 50,将变量 ‘Fare’ 的上限设为 200。我们不希望在这些变量分布的左侧进行上限设置。
capper = ArbitraryOutlierCapper(
max_capping_dict={'age': 50, 'fare': 200},
min_capping_dict=None,
)
capper.fit(X_train)
通过 fit()
方法,转换器不会学习任何参数。它只是将输入的字典重新分配给将在转换中使用的属性:
capper.right_tail_caps_
{'age': 50, 'fare': 200}
现在,我们可以继续并限定变量:
train_t = capper.transform(X_train)
test_t = capper.transform(X_test)
如果我们现在检查转换数据中的最大值,它们应该是字典中输入的那些值:
train_t[['fare', 'age']].max()
fare 200.0
age 50.0
dtype: float64
附加资源#
你可以在以下笔记本中找到更多关于 ArbitraryOutlierCapper()
功能的详细信息:
有关此方法和其他特征工程方法的更多详细信息,请查看以下资源:
或者阅读我们的书:
我们的书籍和课程都适合初学者和更高级的数据科学家。通过购买它们,您正在支持 Feature-engine 的主要开发者 Sole。