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() 功能的详细信息:

有关此方法和其他特征工程方法的更多详细信息,请查看以下资源:

../../_images/feml.png

机器学习的特征工程#











或者阅读我们的书:

../../_images/cookbook.png

Python 特征工程手册#














我们的书籍和课程都适合初学者和更高级的数据科学家。通过购买它们,您正在支持 Feature-engine 的主要开发者 Sole。