Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用SciKit中的管道排列重要性_Python_Machine Learning_Scikit Learn_Feature Selection - Fatal编程技术网

Python 使用SciKit中的管道排列重要性

Python 使用SciKit中的管道排列重要性,python,machine-learning,scikit-learn,feature-selection,Python,Machine Learning,Scikit Learn,Feature Selection,我使用的正是来自的示例,它将排列重要性与树特征重要性 如您所见,使用了管道: rf = Pipeline([ ('preprocess', preprocessing), ('classifier', RandomForestClassifier(random_state=42)) ]) rf.fit(X_train, y_train) 排列重要性: 现在,当您拟合管道时,它将依次拟合所有变换并变换数据,然后使用最终估计器拟合变换后的数据 在本例的后面部分,他们在拟合模型上使用

我使用的正是来自的示例,它将
排列重要性
树特征重要性

如您所见,使用了管道:

rf = Pipeline([
    ('preprocess', preprocessing),
    ('classifier', RandomForestClassifier(random_state=42))
])
rf.fit(X_train, y_train)
排列重要性

现在,当您拟合
管道时,它将依次拟合所有变换并变换数据,然后使用最终估计器拟合变换后的数据

在本例的后面部分,他们在拟合模型上使用了
排列重要性

result = permutation_importance(rf, X_test, y_test, n_repeats=10,
                                random_state=42, n_jobs=2)
问题:我不明白的是,
结果中的特征仍然是原始的未转换特征。为什么会这样?这工作正常吗?那么,
管道的目的是什么

树特征的重要性
: 在同一示例中,当他们使用
功能\u重要性
时,结果将被转换:

tree_feature_importances = (
    rf.named_steps['classifier'].feature_importances_)


显然,我可以转换我的功能,然后使用
permutation\u importance
,但示例中的步骤似乎是有意的,应该有一个原因说明
permutation\u importance
不会转换功能。

这是预期的行为。排列重要性的工作方式是洗牌输入数据,并将其应用于管道(或模型,如果您需要的话)。事实上,如果您想了解初始输入数据如何影响模型,那么应该将其应用于管道

如果您对预处理步骤生成的每个附加特征的特征重要性感兴趣,则应生成具有列名的预处理数据集,然后直接将该数据应用于模型(使用排列重要性),而不是管道


在大多数情况下,人们对学习管道生成的次要特性的影响不感兴趣。这就是为什么他们在这里使用管道来包含预处理和建模步骤。

我可以从代码中看到,它迭代X的原始列(
用于范围内的col_idx(X.shape[1])
),并在循环内进行转换。我想不出哪种情况会出问题,但这就是发生的事情。这也让我感到沮丧。我找不到一个简单的方法来处理排列重要性,因为所有的东西都被组装到一个管道中。如果我在排列之前中断预处理器并进行转换,我会对标签的列排序感到各种各样的头疼。如果管道正确地应用在置换中,这一切都可以解决_importance@Josh是的,我也决定这么做。我对特征进行变换,然后将变换后的向量传递给管道。嗨@towi_parallelism,我发现你关于排列重要性的问题非常有趣和有用。我正在尝试获取次要功能的名称,而不是主要功能的名称。我想分享我的问题的链接,以防你能帮助我。非常感谢。谢谢你的回答。我想还有另一个原因。一个热编码会产生完美的多重共线性,向PI提供多重共线特征可能会产生误导