我将使用SciKit中的确切示例,比较
正如您所看到的,这里使用了一个Pipeline:
permutation_importance
和tree feature_importances
。正如您所看到的,这里使用了一个Pipeline:
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
不转换特征应该有其原因。
for col_idx in range(X.shape[1])
),并在循环内部进行转换。想不出特定的情况会出错,但这就是正在发生的事情。 - towi_parallelism