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')