DropDuplicateFeatures#

重复特征是数据集中的列,它们是相同的,换句话说,它们包含完全相同的值。重复特征可能是由于数据管理过程不善或数据操作过程中意外引入的。

例如,可以通过对分类变量进行独热编码或添加缺失数据指示符来创建重复的新记录。当我们将显示某些变量重叠的不同数据源合并时,我们也可能意外生成重复记录。

检查并删除重复特征是任何数据分析工作流程中的标准步骤,它帮助我们快速减少数据集的维度并确保数据质量。在Python中,我们可以使用Pandas非常容易地在属性表中找到重复值。然而,删除这些重复特征需要更多的代码行。

Feature-engine 旨在通过使用 DropDuplicateFeatures() 类来加速数据验证过程,该类能够发现并移除重复特征,它是选择 API 的一部分。

DropDuplicateFeatures() 正是这样做的;它查找并从数据框中删除重复的变量。DropDuplicateFeatures() 将自动评估所有变量,或者您可以传递一个包含您希望检查的变量的列表。它同样适用于数值和分类特征。

那么让我们看看如何设置 DropDuplicateFeatures()

示例

在这个演示中,我们将使用泰坦尼克号数据集,并手动引入一些重复的特征:

import pandas as pd
from sklearn.model_selection import train_test_split
from feature_engine.datasets import load_titanic
from feature_engine.selection import DropDuplicateFeatures

data = load_titanic(
    handle_missing=True,
    predictors_only=True,
)

# Lets duplicate some columns
data = pd.concat([data, data[['sex', 'age', 'sibsp']]], axis=1)
data.columns = ['pclass', 'survived', 'sex', 'age',
                'sibsp', 'parch', 'fare','cabin', 'embarked',
                'sex_dup', 'age_dup', 'sibsp_dup']

然后我们将数据分为训练集和测试集:

# Separate into train and test sets
X_train, X_test, y_train, y_test = train_test_split(
    data.drop(['survived'], axis=1),
    data['survived'],
    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

     sex_dup    age_dup  sibsp_dup
501   female  13.000000          0
588   female   4.000000          1
402   female  30.000000          1
1193    male  29.881135          0
686   female  22.000000          0

如预期,变量 sexsex_dup 在所有行中具有重复的字段值。变量 ageage_dup 也是如此。

现在,我们设置 DropDuplicateFeatures() 来查找重复的特征:

transformer = DropDuplicateFeatures()

通过 fit() 方法,转换器可以找到重复的特征:

transformer.fit(X_train)

将被删除的重复功能存储在 features_to_drop_ 属性中:

transformer.features_to_drop_
{'age_dup', 'sex_dup', 'sibsp_dup'}

通过 transform() 我们移除了重复的变量:

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

我们可以继续检查转换后的数据集中的变量,我们会发现重复的特征已经不存在了:

train_t.columns
Index(['pclass', 'sex', 'age', 'sibsp', 'parch', 'fare', 'cabin', 'embarked'], dtype='object')

变压器还存储了重复特征的组,这对于数据分析和验证非常有用。

transformer.duplicated_feature_sets_
[{'sex', 'sex_dup'}, {'age', 'age_dup'}, {'sibsp', 'sibsp_dup'}]

附加资源#

在这个 Kaggle 内核中,我们使用 DropDuplicateFeatures() 与其它特征选择算法一起在管道中使用:

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

../../_images/fsml.png

机器学习的特征选择#











或者阅读我们的书:

../../_images/fsmlbook.png

机器学习中的特征选择#















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