DropFeatures#

The DropFeatures() 从原始数据框中删除用户指定的一组变量。用户可以传递单个变量作为字符串或要删除的变量列表。

DropFeatures() 提供了与 pandas.dataframe.drop 类似的功能,但不同之处在于 DropFeatures() 可以集成到 Scikit-learn 管道中。

这个变压器何时有用?

有时,我们通过结合数据集中的其他变量来创建新变量,例如,我们通过从 date_of_birth 中减去 date_of_application 来获得变量 age。在我们获得新变量后,我们不再需要数据集中的日期变量。因此,我们可以在 Pipeline 中添加 DropFeatures() 来移除这些变量。

示例

让我们看看如何在泰坦尼克号数据集的示例中使用 DropFeatures()。我们首先加载数据并将其分为训练集和测试集:

from sklearn.model_selection import train_test_split
from feature_engine.datasets import load_titanic
from feature_engine.selection import DropFeatures

X, y = load_titanic(
    return_X_y_frame=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())

现在,我们继续并打印数据集的列名:

X_train.columns
Index(['pclass', 'name', 'sex', 'age', 'sibsp', 'parch', 'ticket', 'fare',
       'cabin', 'embarked', 'boat', 'body', 'home.dest'],
      dtype='object')

现在,使用 DropFeatures() 我们可以非常容易地删除一组变量。下面我们设置转换器来删除一个包含6个变量的列表:

# set up the transformer
transformer = DropFeatures(
    features_to_drop=['sibsp', 'parch', 'ticket', 'fare', 'body', 'home.dest']
)

# fit the transformer
transformer.fit(X_train)

使用 fit() 这个转换器不会学习任何参数。我们可以继续并如下移除变量:

train_t = transformer.transform(X_train)
test_t = transformer.transform(X_test)

现在,如果我们打印转换后的数据集的变量名称,我们可以看到它已经被减少了:

train_t.columns
Index(['pclass', 'name', 'sex', 'age', 'cabin', 'embarked', 'boat'], dtype='object')

其他资源#

在这个 Kaggle 内核中,我们展示了使用 DropFeatures() 的 3 种不同的端到端机器学习管道。

所有笔记本都可以在 专用仓库 中找到。

有关此功能选择方法及其他方法的更多详细信息,请查看以下资源:

../../_images/fsml.png

机器学习的特征选择#











或者阅读我们的书:

../../_images/fsmlbook.png

机器学习中的特征选择#















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