在SciKit-Learn中使用管道的排列重要性 [英] Permutation importance using a Pipeline in SciKit-Learn
本文介绍了在SciKit-Learn中使用管道的排列重要性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我使用的是SciKit中的确切示例,它将permutation_importance
与tree feature_importances
如您所见,使用了管道:
rf = Pipeline([
('preprocess', preprocessing),
('classifier', RandomForestClassifier(random_state=42))
])
rf.fit(X_train, y_train)
permutation_importance
:
现在,当您拟合Pipeline
时,它将逐个拟合所有转换并转换数据,然后使用最终估计器拟合转换后的数据。
在后面的示例中,他们在拟合的模型上使用permutation_importance
:
result = permutation_importance(rf, X_test, y_test, n_repeats=10,
random_state=42, n_jobs=2)
问题:我不明白的是result
中的功能仍然是原始的未转换功能。为何会是这样呢?这能正常工作吗?那么Pipeline
的用途是什么?
tree feature_importance
:
在同一示例中,当它们使用feature_importance
时,结果会被转换:
tree_feature_importances = (
rf.named_steps['classifier'].feature_importances_)
我显然可以转换我的功能,然后使用permutation_importance
,但示例中提供的步骤似乎是故意的,应该有permutation_importance
不转换功能的原因。
推荐答案
这是预期行为。排列重要性的工作方式是将输入数据置乱,并将其应用于管道(或模型,如果这是您想要的)。事实上,如果您想了解初始输入数据如何影响模型,则应将其应用于管道。
如果您对通过预处理步骤生成的每个附加功能的功能重要性感兴趣,则应生成具有列名的预处理数据集,然后将该数据直接应用于模型(使用排列重要性),而不是管道。
在大多数情况下,人们对了解管道生成的次要功能的影响不感兴趣。这就是为什么他们在这里使用管道来包含预处理和建模步骤。
这篇关于在SciKit-Learn中使用管道的排列重要性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文