DropCorrelatedFeatures#

The DropCorrelatedFeatures() 从数据框中查找并移除相关变量。相关性通过 pandas.corr() 计算。pandas.corr() 支持的所有相关性方法都可以用于选择,包括 Spearman、Kendall 或 Spearman。你也可以传递一个自定义的相关性函数,前提是它返回一个介于 -1 和 1 之间的值。

功能是按照先找到先删除的原则进行删除,没有任何进一步的洞察。也就是说,第一个功能将被保留,所有与此相关的后续功能都将被删除。

转换器将自动检查所有数值变量。请注意,您可以传递一个包含分类变量和日期时间变量的数据框,这些变量将自动被忽略。或者,您可以传递一个包含您希望评估的变量的列表。

示例

让我们创建一个玩具数据框,其中4个特征是相关的:

import pandas as pd
from sklearn.datasets import make_classification
from feature_engine.selection import DropCorrelatedFeatures

# make dataframe with some correlated variables
def make_data():
    X, y = make_classification(n_samples=1000,
                           n_features=12,
                           n_redundant=4,
                           n_clusters_per_class=1,
                           weights=[0.50],
                           class_sep=2,
                           random_state=1)

    # trasform arrays into pandas df and series
    colnames = ['var_'+str(i) for i in range(12)]
    X = pd.DataFrame(X, columns =colnames)
    return X

X = make_data()

现在,我们设置 DropCorrelatedFeatures() 来查找并移除(绝对)相关系数大于0.8的变量:

tr = DropCorrelatedFeatures(variables=None, method='pearson', threshold=0.8)

通过 fit() 方法,转换器找到相关变量,并通过 transform() 方法将其从数据集中删除:

Xt = tr.fit_transform(X)

相关特征组存储在转换器的属性中:

tr.correlated_feature_sets_
[{'var_0', 'var_8'}, {'var_4', 'var_6', 'var_7', 'var_9'}]

我们可以通过检查字典来确定每个组中哪些功能将被保留,哪些将被移除:

tr.correlated_feature_dict_

在下面的字典中,我们看到从第一个相关组中,var_0 是一个键,因此它将被保留,而 var_8 是一个值,这意味着它与 var_0 相关,因此将被移除。

{'var_0': {'var_8'}, 'var_4': {'var_6', 'var_7', 'var_9'}}

同样地,var_4 是一个关键变量,将被保留,而变量 6、7 和 8 被发现与 var_4 相关,因此将被移除。

将从数据集中移除的特征也存储在不同的属性中:

tr.features_to_drop_
['var_8', 'var_6', 'var_7', 'var_9']

如果我们现在继续打印转换后的数据,我们会看到相关特征已经被移除。

print(print(Xt.head()))
          var_0     var_1     var_2     var_3     var_4     var_5    var_10  \
0  1.471061 -2.376400 -0.247208  1.210290 -3.247521  0.091527  2.070526
1  1.819196  1.969326 -0.126894  0.034598 -2.910112 -0.186802  1.184820
2  1.625024  1.499174  0.334123 -2.233844 -3.399345 -0.313881 -0.066448
3  1.939212  0.075341  1.627132  0.943132 -4.783124 -0.468041  0.713558
4  1.579307  0.372213  0.338141  0.951526 -3.199285  0.729005  0.398790

     var_11
0 -1.989335
1 -1.309524
2 -0.852703
3  0.484649
4 -0.186530

其他资源#

在这个笔记本中,我们展示了如何使用 DropCorrelatedFeatures() 与不同的关系度量:

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

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

../../_images/fsml.png

机器学习的特征选择#











或者阅读我们的书:

../../_images/fsmlbook.png

机器学习中的特征选择#















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