从scikit管道中提取选定的要素名称

时间:2016-02-13 05:02:45

标签: python numpy scikit-learn

# Load dataset
iris = datasets.load_iris()
X, y = iris.data, iris.target

rf_feature_imp = RandomForestClassifier(100)
feat_selection = SelectFromModel(rf_feature_imp, threshold=0.5)

clf = RandomForestClassifier(5000)

model = Pipeline([
          ('fs', feat_selection), 
          ('clf', clf), 
        ])

 params = {
    'fs__threshold': [0.5, 0.3, 0.7],
    'fs__estimator__max_features': ['auto', 'sqrt', 'log2'],
    'clf__max_features': ['auto', 'sqrt', 'log2'],
 }

 gs = GridSearchCV(model, params, ...)
 gs.fit(X,y)

以上代码基于Ensuring right order of operations in random forest classification in scikit learn

由于我使用的是SelectFromModel,我想打印所选功能的名称(在SelectFromModel管道中),但不知道如何提取它们。

3 个答案:

答案 0 :(得分:5)

一种方法是在要素名称上调用要素选择器transform(),但必须以示例列表的形式显示要素名称。

首先,您必须从GridSearchCV中找到的最佳估算工具中获取要素选择阶段。

fs = gs.best_estimator_.named_steps['fs']

从feature_names创建一个示例列表:

feature_names_example = [iris.feature_names]

使用特征选择器转换此示例。

selected_features = fs.transform(feature_names_example)

print selected_features[0] # Select the one example
# ['sepal length (cm)' 'petal length (cm)' 'petal width (cm)']

答案 1 :(得分:3)

SelectFromModel有一个get_support()方法,它为所选的要素返回一个布尔掩码。所以你可以做(​​除了@David Maust描述的初步步骤):

feature_names = np.array(iris.feature_names)
selected_features = feature_names[fs.get_support()]

答案 2 :(得分:1)

<强> S = model.named_steps [&#39; FS&#39]。拟合(X,Y)

<强> X.columns [s.get_support()]